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

199 lines
7.3 KiB
C#
Raw Permalink Normal View History

2008-03-05 09:52:00 -05:00
////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity - Singularity ABI
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: DebugService.cs
//
// Note:
//
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using Microsoft.Singularity;
using Microsoft.Singularity.Memory;
2008-11-17 18:29:00 -05:00
using Microsoft.Singularity.Isal;
2008-03-05 09:52:00 -05:00
namespace Microsoft.Singularity.V1.Services
{
public struct DebugService
{
[ExternalEntryPoint]
[CLSCompliant(false)]
public static unsafe void PrintBeginImpl(
char * * buffer,
int * length)
{
PrintBegin(out *buffer, out *length);
}
[CLSCompliant(false)]
public static unsafe void PrintBegin(out char * buffer, out int length)
{
DebugStub.PrintBegin(out buffer, out length);
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static unsafe void PrintComplete(char * buffer, int used)
{
DebugStub.PrintComplete(buffer, used);
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static unsafe void Print(char * buffer)
{
DebugStub.Print(buffer);
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static unsafe void Print(char * buffer, int length)
{
DebugStub.Print(buffer, length);
}
[ExternalEntryPoint]
public static void Print(bool value)
{
DebugStub.Print("{0}", __arglist(value));
}
[ExternalEntryPoint]
public static void Print(char value)
{
DebugStub.Print("{0}", __arglist(value));
}
[ExternalEntryPoint]
public static void Print(byte value)
{
DebugStub.Print("{0}", __arglist(value));
}
[ExternalEntryPoint]
public static void Print(int value)
{
DebugStub.Print("{0}", __arglist(value));
}
[CLSCompliant(false)]
[ExternalEntryPoint]
public static void Print(uint value)
{
DebugStub.Print("{0}", __arglist(value));
}
[ExternalEntryPoint]
public static void Print(long value)
{
DebugStub.Print("{0}", __arglist(value));
}
[CLSCompliant(false)]
[ExternalEntryPoint]
public static void Print(ulong value)
{
DebugStub.Print("{0}", __arglist(value));
}
[ExternalEntryPoint]
public static void Break()
{
Tracing.Log(Tracing.Warning, "DebugService.Break()");
DebugStub.Print("DebugService.Break()\n");
DebugStub.Break();
}
[ExternalEntryPoint]
public static void WalkStack()
{
2008-11-17 18:29:00 -05:00
Stacks.WalkStack(Isa.GetFramePointer());
2008-03-05 09:52:00 -05:00
}
[ExternalEntryPoint]
public static bool IsDebuggerPresent()
{
return DebugStub.IsDebuggerPresent();
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static ulong ReadPerfCounter(uint which)
{
switch (which) {
case 0: return DebugStub.perfCounter0;
case 1: return DebugStub.perfCounter1;
case 2: return DebugStub.perfCounter2;
case 3: return DebugStub.perfCounter3;
case 4: return DebugStub.perfCounter4;
case 5: return DebugStub.perfCounter5;
case 6: return DebugStub.perfCounter6;
case 7: return DebugStub.perfCounter7;
case 8: return DebugStub.perfCounter8;
case 9: return DebugStub.perfCounter9;
case 10: return DebugStub.perfCounter10;
case 11: return DebugStub.perfCounter11;
case 12: return DebugStub.perfCounter12;
case 13: return DebugStub.perfCounter13;
case 14: return DebugStub.perfCounter14;
case 15: return DebugStub.perfCounter15;
default: return 0;
}
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static bool WritePerfCounter(uint which, ulong value)
{
switch (which) {
case 0: DebugStub.perfCounter0 = value; return true;
case 1: DebugStub.perfCounter1 = value; return true;
case 2: DebugStub.perfCounter2 = value; return true;
case 3: DebugStub.perfCounter3 = value; return true;
case 4: DebugStub.perfCounter4 = value; return true;
case 5: DebugStub.perfCounter5 = value; return true;
case 6: DebugStub.perfCounter6 = value; return true;
case 7: DebugStub.perfCounter7 = value; return true;
case 8: DebugStub.perfCounter8 = value; return true;
case 9: DebugStub.perfCounter9 = value; return true;
case 10: DebugStub.perfCounter10 = value; return true;
case 11: DebugStub.perfCounter11 = value; return true;
case 12: DebugStub.perfCounter12 = value; return true;
case 13: DebugStub.perfCounter13 = value; return true;
case 14: DebugStub.perfCounter14 = value; return true;
case 15: DebugStub.perfCounter15 = value; return true;
default: return false;
}
}
[ExternalEntryPoint]
[CLSCompliant(false)]
public static bool AddToPerfCounter(uint which, ulong value)
{
switch (which) {
case 0: Interlocked.Add(ref DebugStub.perfCounter0, value); return true;
case 1: Interlocked.Add(ref DebugStub.perfCounter1, value); return true;
case 2: Interlocked.Add(ref DebugStub.perfCounter2, value); return true;
case 3: Interlocked.Add(ref DebugStub.perfCounter3, value); return true;
case 4: Interlocked.Add(ref DebugStub.perfCounter4, value); return true;
case 5: Interlocked.Add(ref DebugStub.perfCounter5, value); return true;
case 6: Interlocked.Add(ref DebugStub.perfCounter6, value); return true;
case 7: Interlocked.Add(ref DebugStub.perfCounter7, value); return true;
case 8: Interlocked.Add(ref DebugStub.perfCounter8, value); return true;
case 9: Interlocked.Add(ref DebugStub.perfCounter9, value); return true;
case 10: Interlocked.Add(ref DebugStub.perfCounter10, value); return true;
case 11: Interlocked.Add(ref DebugStub.perfCounter11, value); return true;
case 12: Interlocked.Add(ref DebugStub.perfCounter12, value); return true;
case 13: Interlocked.Add(ref DebugStub.perfCounter13, value); return true;
case 14: Interlocked.Add(ref DebugStub.perfCounter14, value); return true;
case 15: Interlocked.Add(ref DebugStub.perfCounter15, value); return true;
default: return false;
}
}
}
}