X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstub.c;h=fbdf30d085d62b6fef52690a9b945b7faf19069a;hb=71b1271511ad01f042d2e51673dd57cce1b0fd9c;hp=9f629ba409502479ab23ecdd2d1421ba3fe9d63f;hpb=47e9dfd89189fc6b150bd6b20229cb047c7e0858;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/stub.c b/Usermode/Libraries/libc.so_src/stub.c index 9f629ba4..fbdf30d0 100644 --- a/Usermode/Libraries/libc.so_src/stub.c +++ b/Usermode/Libraries/libc.so_src/stub.c @@ -3,13 +3,26 @@ */ #include "stdio_int.h" #include "lib.h" +#include +#include #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 + int ErrorHandler(int Fault); + +// === IMPORTS === +extern tLoadedLib gLoadedLibraries[64]; +extern int _SysSetFaultHandler(int (*Handler)(int)); // === GLOBALS === extern char **_envp; @@ -53,9 +66,25 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp) } #endif + // Set Error handler + _SysSetFaultHandler(ErrorHandler); + return 1; } +int ErrorHandler(int 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"); + return -1; +} #if USE_CPUID /**