singrdk/base/Kernel/Singularity.Stress/StressDirect.sg

100 lines
3.3 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: StressDirect.sg
// Note: Kernel diagnostics (testing and debugging)
//
// (non-shipping extensions to kernel ABI, for testing and debugging)
using System.Threading;
using Microsoft.SingSharp;
using Microsoft.Singularity;
using Microsoft.Singularity.Channels;
using Microsoft.Singularity.Memory;
using Microsoft.Singularity.Stress.Contracts;
using Microsoft.Singularity.Directory;
using System.Runtime.CompilerServices;
using System;
using Microsoft.Singularity.V1.Services;
namespace Microsoft.Singularity.Stress
{
public class StressDirect
{
private static string[]! GetArgs(ArgList* in ExHeap exArgs, int count)
{
if(exArgs == null)
{
return new string[count];
}
else
{
expose(exArgs)
{
char[] in ExHeap exArg = exArgs->arg;
ArgList* in ExHeap next = exArgs->next;
string[]! args = GetArgs(next, count + 1);
args[count] = Bitter.ToString(exArg);
return args;
}
}
}
public static unsafe uint KPTest(SharedHeap.Allocation* sharedArgs, int i)
{
ArgList* in ExHeap exArgs = (ArgList* in ExHeap) sharedArgs;
string[]! args = GetArgs(exArgs, 0);
if(exArgs != null) delete exArgs;
return new KPTestKernel().Go(args, i);
/*
if(exArgs != null) delete exArgs;
return 0;
char[][]! in ExHeap exArgs = (char[][]! in ExHeap) sharedArgs;
string[]! args = new string[exArgs.Length];
for (int j = 0; j < args.Length; j++)
{
// SharedHeapService.Allocation* sharedArg = (SharedHeapService.Allocation*) (exArgs[j]);
char[]! in ExHeap exArg = (char[]! in ExHeap) (exArgs[j]);
args[j] = Bitter.ToString(exArg);
delete exArg;
}
delete exArgs;
return new KPTestKernel().Go(args, i);
SharedHeapService.Allocation*[]! in ExHeap exArgs = (SharedHeapService.Allocation*[]! in ExHeap) sharedArgs;
string[]! args = new string[exArgs.Length];
for (int j = 0; j < args.Length; j++)
{
SharedHeapService.Allocation* sharedArg = (SharedHeapService.Allocation*) (exArgs[j]);
char[]! in ExHeap exArg = (char[]! in ExHeap) (sharedArg);
args[j] = Bitter.ToString(exArg);
// delete exArg;
}
delete exArgs;
return new KPTestKernel().Go(args, i);
*/
}
}
class KPTestKernel : KPTestBase
{
public override uint Go(string[]! args, int i)
{
if (i >= ((!) args).Length) return 0x87654321;
string arg = args[i];
if (arg == "throwstop")
{
throw new ProcessStopException("ProcessStopException");
}
else
{
return base.Go(args, i);
}
}
}
}