52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// CpuRecord defines the low-level per-cpu state maintained by the Isal layer
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
#if ISA_IX
|
||
|
using Microsoft.Singularity.Isal.IX;
|
||
|
#elif ISA_ARM
|
||
|
using Microsoft.Singularity.Isal.Arm;
|
||
|
#endif
|
||
|
|
||
|
namespace Microsoft.Singularity.Isal
|
||
|
{
|
||
|
[NoCCtor]
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
[CLSCompliant(false)]
|
||
|
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential, Pack=4)]
|
||
|
[StructAlign(16)]
|
||
|
public struct CpuRecord
|
||
|
{
|
||
|
// Area to spill current context for debugging purposes.
|
||
|
// Note this must be 16-byte aligned
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public SpillContext spill;
|
||
|
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public int id;
|
||
|
|
||
|
// Interrupt stack - this must be large enough to handle our deepest possible interrupt
|
||
|
// nesting.
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public unsafe UIntPtr interruptStackBegin;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public unsafe UIntPtr interruptStackLimit;
|
||
|
|
||
|
// Default ThreadContext - this is used for boot and (perhaps?) interrupt processing
|
||
|
// when no other thread is active.
|
||
|
public ThreadRecord bootThread;
|
||
|
|
||
|
#if ISA_ARM
|
||
|
public DispatchStack dispatchStack;
|
||
|
#endif
|
||
|
}
|
||
|
}
|