Usermode/ld-acess - Overhaul cleanup of ELF loader
[tpg/acess2.git] / Usermode / Libraries / ld-acess.so_src / main.c
index 49b2f86..976ceec 100644 (file)
@@ -5,6 +5,7 @@
 #include <stdint.h>\r
 #include <stddef.h>\r
 #include "common.h"\r
+#undef SoMain\r
 \r
 // === PROTOTYPES ===\r
 void   *DoRelocate(void *base, char **envp, const char *Filename);\r
@@ -12,9 +13,9 @@ void  *DoRelocate(void *base, char **envp, const char *Filename);
 \r
 // === Imports ===\r
 extern char    gLinkedBase[];\r
-extern tLoadedLib      gLoadedLibraries[];\r
 char   **gEnvP;\r
 extern int     memcmp(const void *m1, const void *m2, size_t size);\r
+extern void    CallQueuedEntrypoints(char **EnvP);\r
  \r
 // === CODE ===\r
 /**\r
@@ -41,12 +42,7 @@ void *SoMain(void *base, int argc, char **argv, char **envp)
                for(;;);\r
        }\r
 \r
-       gLoadedLibraries[0].Base = &gLinkedBase;\r
-       // 'libld-acess.so' because that is what applications link against\r
-       gLoadedLibraries[0].Name = "/Acess/Libs/libld-acess.so";\r
-       \r
        // Otherwise do relocations\r
-       //ret = DoRelocate( base, envp, "Executable" );\r
        ret = DoRelocate( base, NULL, "Executable" );\r
        if( ret == 0 ) {\r
                SysDebug("ld-acess - SoMain: Relocate failed, base=0x%x\n", base);\r
@@ -54,7 +50,10 @@ void *SoMain(void *base, int argc, char **argv, char **envp)
                for(;;);\r
        }\r
 \r
-       SysDebug("ld-acess - SoMain: ret = %p", ret);   \r
+       // Call queued entry points (from libraries)\r
+       CallQueuedEntrypoints(envp);\r
+\r
+       SysDebug("ld-acess - SoMain: Program entry %p", ret);   \r
        return ret;\r
 }\r
 \r
@@ -101,3 +100,13 @@ int CallUser(void *entry, void *sp)
        #endif\r
        for(;;);\r
 }\r
+\r
+void exit(int val)\r
+{\r
+       _exit(val);\r
+}\r
+\r
+void abort(void)\r
+{\r
+       _exit(-4);\r
+}\r

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