X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fmain.c;h=8f24db8ace48f759c3368d000eef4e348e8f4e8b;hb=5a66c3a4a2019a7ddea8931c8476bb64f4d29079;hp=598055f426687940a3f8d9d2d0affa21c9879807;hpb=a6f11cb266052c58ae7e2d6d6e8abd34a9e93214;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/main.c b/AcessNative/ld-acess_src/main.c index 598055f4..8f24db8a 100644 --- a/AcessNative/ld-acess_src/main.c +++ b/AcessNative/ld-acess_src/main.c @@ -7,11 +7,18 @@ #include // === IMPORTS === +extern int gSocket; extern int giSyscall_ClientID; +extern int gbSyscallDebugEnabled; +extern void acess__exit(int Status); +extern void Request_Preinit(void); // === PROTOTYPES === void CallUser(void *Entry, int argc, char *argv[], char **envp) __attribute__((noreturn)); +// === GLOBALS === +char **gEnvP; + // === CODE === int main(int argc, char *argv[], char **envp) { @@ -21,7 +28,12 @@ int main(int argc, char *argv[], char **envp) char *appPath = NULL; int (*appMain)(int, char *[], char **); void *base; + int rv; + + gEnvP = envp; + Request_Preinit(); + // int syscall_handle = -1; for( i = 1; i < argc; i ++ ) @@ -30,6 +42,11 @@ int main(int argc, char *argv[], char **envp) giSyscall_ClientID = atoi(argv[++i]); continue ; } + + if(strcmp(argv[i], "--socket") == 0) { + gSocket = atoi(argv[++i]); + continue ; + } if(strcmp(argv[i], "--binary") == 0) { appPath = argv[++i]; @@ -37,12 +54,16 @@ int main(int argc, char *argv[], char **envp) } if(strcmp(argv[i], "--open") == 0) { - if( acess_open(argv[++i], 6) == -1 ) { // Read/Write + if( acess__SysOpen(argv[++i], 6) == -1 ) { // Read/Write fprintf(stderr, "Unable to open '%s'\n", argv[i]); exit(1); } continue ; } + if( strcmp(argv[i], "--trace") == 0 ) { + gbSyscallDebugEnabled = 1; + continue ; + } if( argv[i][0] != '-' ) break; } @@ -69,36 +90,35 @@ int main(int argc, char *argv[], char **envp) base = Binary_Load(appPath, (uintptr_t*)&appMain); printf("[DEBUG %i] base = %p\n", giSyscall_ClientID, base); - if( !base ) return 127; + if( !base ) { + *((char*)NULL) = 0; + return 127; + } printf("==============================\n"); - printf("[DEBUG %i] %i %p ", giSyscall_ClientID, appArgc, appArgv); + printf("[DEBUG %i] %i ", giSyscall_ClientID, appArgc); for(i = 0; i < appArgc; i ++) printf("\"%s\" ", appArgv[i]); printf("\n"); printf("[DEBUG %i] appMain = %p\n", giSyscall_ClientID, 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 +// 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(;;); } @@ -125,7 +145,8 @@ void Notice(const char *Format, ...) void Debug(const char *Format, ...) { va_list args; - printf("[DEBUG %i] ", giSyscall_ClientID); + printf("[DEBUG "); + printf("%2i] ", giSyscall_ClientID); va_start(args, Format); vprintf(Format, args); va_end(args);