100 lines
3.3 KiB
Plaintext
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|