X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstub.c;h=2494fc2800b148373d4adb2853d4fddd02d5cb8d;hb=58716e08fd3ce62861636a300879e10e930b177b;hp=55f4ca66f7f50c5badeaf9eb657001896bba9703;hpb=814b2d0009da73b56c6def5d70a9dd97c7b17e2e;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/stub.c b/Usermode/Libraries/libc.so_src/stub.c index 55f4ca66..2494fc28 100644 --- a/Usermode/Libraries/libc.so_src/stub.c +++ b/Usermode/Libraries/libc.so_src/stub.c @@ -8,11 +8,21 @@ #define USE_CPUID 0 +// === TYPES === +typedef struct { + intptr_t Base; + char *Name; +} tLoadedLib; + // === PROTOTYPES === #if USE_CPUID static void cpuid(uint32_t Num, uint32_t *EAX, uint32_t *EBX, uint32_t *EDX, uint32_t *ECX); #endif -void ErrorHandler(int Fault); + int ErrorHandler(int Fault); + +// === IMPORTS === +extern tLoadedLib gLoadedLibraries[64]; +extern int _SysSetFaultHandler(int (*Handler)(int)); // === GLOBALS === extern char **_envp; @@ -38,6 +48,18 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp) { // Init for env.c _envp = envp; + + #if 0 + { + int i = 0; + char **tmp; + _SysDebug("envp = %p", envp); + for(tmp = envp; *tmp; tmp++,i++) + { + _SysDebug("envp[%i] = '%s'", i, *tmp); + } + } + #endif // Init FileIO Pointers stdin = &_iob[0]; @@ -56,14 +78,25 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp) } #endif + // Set Error handler _SysSetFaultHandler(ErrorHandler); return 1; } -void ErrorHandler(int Fault) +int ErrorHandler(int Fault) { - fprintf(stderr, "Fault = %i\n", Fault); + int i; + fprintf(stderr, "ErrorHandler: (Fault = %i)\n", Fault); + fprintf(stderr, "Loaded Libraries:\n"); + for( i = 0; i < 64; i ++ ) + { + //if(gLoadedLibraries[i].Base == 0) continue; + // fprintf(stderr, "%02i: %p %s\n", i, gLoadedLibraries[i].Base, gLoadedLibraries[i].Name); + } + fprintf(stderr, "\n"); + exit(-1); + return -1; } #if USE_CPUID