AcessNative - Fixing crashes
[tpg/acess2.git] / AcessNative / ld-acess_src / main.c
index 8363ce6..0c9b743 100644 (file)
@@ -6,9 +6,18 @@
 #include <stdarg.h>
 #include <string.h>
 
+// === IMPORTS ===
+extern int     gSocket;
+extern int     giSyscall_ClientID;
+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)
 {
@@ -18,13 +27,23 @@ int main(int argc, char *argv[], char **envp)
        char    *appPath = NULL;
         int    (*appMain)(int, char *[], char **);
        void    *base;
+        int    rv;
+
+       gEnvP = envp;
        
-        int    syscall_handle = -1;
+       Request_Preinit();
+
+//      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 ;
+               }
+
+               if(strcmp(argv[i], "--socket") == 0) {
+                       gSocket = atoi(argv[++i]);
                        continue ;
                }
                
@@ -61,48 +80,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 ", giSyscall_ClientID, appArgc);
        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 +127,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);

UCC git Repository :: git.ucc.asn.au