X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstub.c;h=3cab984df2eea9bc15d8a3561e6151704bb31210;hb=2f9415b7b804073b0365781ad4f05a7306b6c890;hp=0233b977d9e9674591f6c9eb38dc3b6a3e00aee2;hpb=5fc81fa5e050f48374a6aff5636f3e60313dfc78;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/stub.c b/Usermode/Libraries/libc.so_src/stub.c index 0233b977..3cab984d 100644 --- a/Usermode/Libraries/libc.so_src/stub.c +++ b/Usermode/Libraries/libc.so_src/stub.c @@ -3,9 +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; @@ -14,7 +31,9 @@ extern struct sFILE *stdin; extern struct sFILE *stdout; extern struct sFILE *stderr; // --- CPU Features --- +#if USE_CPUID tCPUID gCPU_Features; +#endif // === CODE === /** @@ -38,19 +57,37 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp) stderr = &_iob[2]; stderr->FD = 2; stderr->Flags = FILE_FLAG_MODE_WRITE; - /* + #if USE_CPUID { uint32_t ecx, edx; cpuid(1, NULL, NULL, &edx, &ecx); gCPU_Features.SSE = edx & (1 << 25); // SSE gCPU_Features.SSE2 = edx & (1 << 26); // SSE2 } - */ + #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"); + exit(-1); + return -1; +} +#if USE_CPUID /** * \brief Call the CPUID opcode */ @@ -69,3 +106,4 @@ static void cpuid(uint32_t Num, uint32_t *EAX, uint32_t *EBX, uint32_t *EDX, uin if(EDX) *EDX = edx; if(ECX) *ECX = ecx; } +#endif