X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fmain.c;h=cd2b81581ec866e4940bd0e643298256213dbfee;hb=3d9c87713549b06c4505b15f37ef8e9785d0ab0d;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..cd2b8158 100644 --- a/AcessNative/ld-acess_src/main.c +++ b/AcessNative/ld-acess_src/main.c @@ -8,6 +8,7 @@ // === IMPORTS === extern int giSyscall_ClientID; +extern void acess__exit(int Status); // === PROTOTYPES === void CallUser(void *Entry, int argc, char *argv[], char **envp) __attribute__((noreturn)); @@ -21,6 +22,7 @@ int main(int argc, char *argv[], char **envp) char *appPath = NULL; int (*appMain)(int, char *[], char **); void *base; + int rv; // int syscall_handle = -1; @@ -77,28 +79,24 @@ int main(int argc, char *argv[], char **envp) 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(;;); }