125 lines
3.2 KiB
C++
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()
|
|
{
|
|
}
|