singrdk/base/Kernel/Singularity/Isal/ThreadRecord.cs

50 lines
1.8 KiB
C#

//////////////////////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ThreadRecord defines the low-level per-thread state maintained by the Isal layer
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
#if ISA_IX
using Microsoft.Singularity.Isal.IX;
#endif
namespace Microsoft.Singularity.Isal
{
[NoCCtor]
[AccessedByRuntime("referenced in c++")]
[CLSCompliant(false)]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential, Pack=4)]
[StructAlign(16)]
public struct ThreadRecord
{
// Spill context to use with this thread's execution is preempted
// Note this must be 16-byte aligned
[AccessedByRuntime("referenced in c++")]
public SpillContext spill;
// The current stack limit for bounds checks - this is kept current with
// thread context switches.
//
// While this is really logically associated with the Cpu rather than
// the thread, it is kept in the ThreadRecord since accesses into the Cpu
// record would be non-atomic (in the case where a thread is interrupted and
// migrates across processors).
//
// There are several cases where the activeStackLimit will differ from the
// stackLimit:
// - when we switch to the interrupt stack
// - after we call SetCurrentThreadRecord, but before we do a context
// restore on that thread's context.
[AccessedByRuntime("referenced in c++")]
public UIntPtr activeStackLimit;
}
}