singrdk/base/Applications/NullTest/nullstart.cpp

125 lines
3.2 KiB
C++

//////////////////////////////////////////////////////////////////////////////
//
// ilstart.cpp - Singularity Hardware Abstraction Layer
//
// Copyright Microsoft Corporation.
//
typedef unsigned short bartok_char;
typedef signed short int16;
typedef signed int int32;
typedef __int64 int64;
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
typedef unsigned __int64 uint64;
struct Struct_System_ObjectHeader
{
int32 syncBlockValue;
};
struct Class_System_Object
{
void * f_vtable;
};
struct Class_System_VTable : Class_System_Object
{
};
struct Class_System_String : public Class_System_Object
{
static int32 _vtable;
int32 f_arrayLength;
int32 f_stringLength;
bartok_char chars[1];
};
struct Struct_Microsoft_Singularity_V1_Services_DebugService
{
static void g_Break();
static void g_Print(bool);
static void g_Print(bartok_char);
static void g_Print(Class_System_String *);
static void g_Print(int32);
static void g_Print(int64);
static void g_Print(uint32);
static void g_Print(uint64);
static void g_Print(uint8);
};
struct ClassVector_Class_System_String : Class_System_Object
{
int32 length;
Class_System_String * strings[1];
};
//////////////////////////////////////////////////////////////////////////////
//
int32 Class_System_String::_vtable = 0;
#define MAKE_STRING(s,v) \
struct _##s \
{ \
Struct_System_ObjectHeader header; \
union \
{ \
struct \
{ \
Class_System_VTable * vable; \
int32 arrayLength; \
int32 stringLength; \
wchar_t chars[sizeof(v)]; \
}; \
Class_System_String string; \
}; \
} s = { \
{}, \
(Class_System_VTable *)&Class_System_String::_vtable, \
sizeof(v), \
sizeof(v) - 1, \
L##v \
}
static MAKE_STRING(sHelloWorld, "Hello World!\n");
static MAKE_STRING(sExceptionThrown, "Exception Thrown!\n");
static MAKE_STRING(sLine, "..................................................\n");
//////////////////////////////////////////////////////////////////////////////
//
struct Class_Microsoft_Singularity_Nulltest
{
static int g_Main();
static int g_ThreadMain(int threadIndex);
};
extern "C" void __cdecl _throwDispatcherExplicitAddrAfter()
{
// ecx = exception
// dex = throw addr
Struct_Microsoft_Singularity_V1_Services_DebugService::g_Print(&sExceptionThrown.string);
}
extern "C" int32 __fastcall IlStart(int32 threadIndex)
{
Struct_Microsoft_Singularity_V1_Services_DebugService::g_Print(&sLine.string);
Struct_Microsoft_Singularity_V1_Services_DebugService::g_Print(&sHelloWorld.string);
Struct_Microsoft_Singularity_V1_Services_DebugService::g_Print(&sLine.string);
if (threadIndex == -1) {
return Class_Microsoft_Singularity_Nulltest::g_Main();
}
else {
return Class_Microsoft_Singularity_Nulltest::g_ThreadMain(threadIndex);
}
}
extern "C" void __cdecl _pushStackMark()
{
}
extern "C" void __cdecl _popStackMark()
{
}