X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fmain.c;h=cbe0ac1f376563f510d3b07bfb238ef95ef1a6d0;hb=1501fe53f7cc9d2d7bcb30abac636a8afbee2f8b;hp=8363ce6955f65c396538e9412e55d9ff1f42e055;hpb=717454930aa0e255517c68c837927deac49bd78e;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/main.c b/AcessNative/ld-acess_src/main.c index 8363ce69..cbe0ac1f 100644 --- a/AcessNative/ld-acess_src/main.c +++ b/AcessNative/ld-acess_src/main.c @@ -6,6 +6,10 @@ #include #include +// === IMPORTS === +extern int giSyscall_ClientID; +extern void acess__exit(int Status); + // === PROTOTYPES === void CallUser(void *Entry, int argc, char *argv[], char **envp) __attribute__((noreturn)); @@ -16,15 +20,16 @@ int main(int argc, char *argv[], char **envp) int appArgc; char **appArgv; char *appPath = NULL; - int (*appMain)(int, char *[], char **); + int (*appMain)(int, char *[], char **) __attribute__((cdecl)); void *base; + int rv; - int syscall_handle = -1; +// int syscall_handle = -1; for( i = 1; i < argc; i ++ ) { if(strcmp(argv[i], "--key") == 0) { - syscall_handle = atoi(argv[++i]); + giSyscall_ClientID = atoi(argv[++i]); continue ; } @@ -61,48 +66,44 @@ int main(int argc, char *argv[], char **envp) appArgc = argc - i; appArgv = &argv[i]; - printf("Exectutable Path: '%s'\n", appPath); - printf("Executable argc = %i\n", appArgc); +// printf("Exectutable Path: '%s'\n", appPath); +// printf("Executable argc = %i\n", appArgc); base = Binary_Load(appPath, (uintptr_t*)&appMain); - printf("base = %p\n", base); + printf("[DEBUG %i] base = %p\n", giSyscall_ClientID, base); if( !base ) return 127; printf("==============================\n"); - printf("%i %p ", appArgc, appArgv); + printf("[DEBUG %i] %i %p ", giSyscall_ClientID, appArgc, appArgv); for(i = 0; i < appArgc; i ++) printf("\"%s\" ", appArgv[i]); printf("\n"); - printf("appMain = %p\n", appMain); - #if 0 - __asm__ __volatile__ ( - "push %0;\n\t" - "push %1;\n\t" - "push %2;\n\t" - "jmp *%3;\n\t" - : : "r" (envp), "r" (appArgv), "r" (appArgc), "r" (appMain) ); - return -1; - #elif 1 - CallUser(appMain, appArgc, appArgv, envp); - #else - return appMain(appArgc, appArgv, NULL); - #endif + printf("[DEBUG %i] appMain = %p\n", giSyscall_ClientID, appMain); +// CallUser(appMain, appArgc, appArgv, envp); + rv = appMain(appArgc, appArgv, envp); + acess__exit(rv); + return rv; } void CallUser(void *Entry, int argc, char *argv[], char **envp) { + #if 0 __asm__ __volatile__ ( - "mov %1, %%esp;\n\t" - "jmp *%0" - : : "r" (Entry), "r" (&argc) + "push %3;\n\t" + "push %2;\n\t" + "push %1;\n\t" + "call *%0" + : : "r" (Entry), "r" (argc), "r" (argv), "r" (envp) ); + #else + #endif for(;;); } void Warning(const char *Format, ...) { va_list args; - printf("Warning: "); + printf("[WARN %i] ", giSyscall_ClientID); va_start(args, Format); vprintf(Format, args); va_end(args); @@ -112,7 +113,17 @@ void Warning(const char *Format, ...) void Notice(const char *Format, ...) { va_list args; - printf("Notice: "); + printf("[NOTICE %i] ", giSyscall_ClientID); + va_start(args, Format); + vprintf(Format, args); + va_end(args); + printf("\n"); +} + +void Debug(const char *Format, ...) +{ + va_list args; + printf("[DEBUG %i] ", giSyscall_ClientID); va_start(args, Format); vprintf(Format, args); va_end(args);