singrdk/base/Kernel/Singularity/V1/Services/StackService.cs

84 lines
2.6 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity - Singularity ABI
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: StackService.cs
//
// Note:
//
using System;
using System.Runtime.CompilerServices;
using Microsoft.Singularity.Memory;
namespace Microsoft.Singularity.V1.Services
{
public struct StackService
{
[ExternalEntryPoint]
public static void WalkStack()
{
Stacks.WalkStack(Processor.GetFramePointer());
}
[ExternalEntryPoint]
[NoHeapAllocation]
[CLSCompliant(false)]
public static unsafe void GetUsageStatisticsImpl(ulong *gets, ulong *returns)
{
GetUsageStatistics(out *gets, out *returns);
}
[NoHeapAllocation]
[CLSCompliant(false)]
public static void GetUsageStatistics(out ulong gets, out ulong returns)
{
gets = (ulong)Stacks.GetCount;
returns = (ulong)Stacks.ReturnCount;
}
[AccessedByRuntime("referenced from halstack.asm")]
[StackBound(64)]
[NoStackLinkCheck]
[NoStackOverflowCheck]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void LinkSharedStack();
[AccessedByRuntime("referenced from halstack.asm")]
[StackBound(64)]
[NoStackLinkCheck]
[NoStackOverflowCheck]
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void UnlinkSharedStack();
[ExternalEntryPoint]
[CLSCompliant(false)]
public static unsafe UIntPtr LinkNewStackSegment(
UIntPtr size,
uint *arg2,
uint args,
UIntPtr esp,
UIntPtr begin,
UIntPtr limit)
{
Microsoft.Singularity.X86.ThreadContext* context = Processor.GetCurrentThreadContext();
return Microsoft.Singularity.Memory.Stacks.GetStackSegmentAndCopy(
size, ref *context, arg2, args, esp, begin, limit);
}
[ExternalEntryPoint]
[CLSCompliant(false)]
//[NoHeapAllocation]
public static unsafe void ReturnStackSegmentRaw(
UIntPtr begin,
UIntPtr limit)
{
Microsoft.Singularity.X86.ThreadContext* context = Processor.GetCurrentThreadContext();
Microsoft.Singularity.Memory.Stacks.ReturnStackSegmentRaw(
ref *context, begin, limit);
}
}
}