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