Usermode/ld-acess - Fixed lack of envp
authorJohn Hodge <[email protected]>
Thu, 3 Nov 2011 14:12:35 +0000 (22:12 +0800)
committerJohn Hodge <[email protected]>
Thu, 3 Nov 2011 14:12:35 +0000 (22:12 +0800)
Usermode/Libraries/ld-acess.so_src/_stublib.c
Usermode/Libraries/ld-acess.so_src/arch/armv7.S.h
Usermode/Libraries/ld-acess.so_src/loadlib.c
Usermode/Libraries/ld-acess.so_src/main.c

index 347b32f..abf8043 100644 (file)
@@ -22,3 +22,5 @@ int32_t __modsi3(int32_t Num, int32_t Den){return 0;}
 uint32_t __udivsi3(uint32_t Num, uint32_t Den){return 0;}
 uint32_t __umodsi3(uint32_t Num, uint32_t Den){return 0;}
 
+void   *_crt0_exit_handler;
+
index d8823d7..a1c973b 100644 (file)
@@ -8,6 +8,7 @@
 .extern SoMain
 _start:
        pop {r0}
+       ldm sp, {r1,r2,r3}
        bl SoMain
        
        mov r4, r0
index eec3dee..3f8e674 100644 (file)
@@ -23,6 +23,7 @@ extern const struct {
        char    *Name;
 }      caLocalExports[];
 extern const int       ciNumLocalExports;
+extern char    **gEnvP;
 
 // === GLOABLS ===
 tLoadedLib     gLoadedLibraries[MAX_LOADED_LIBRARIES];
@@ -90,7 +91,7 @@ void *LoadLibrary(const char *SoName, const char *SearchDir, char **envp)
        
        // Call Entrypoint
        DEBUGS(" LoadLibrary: '%s' Entry %p", SoName, fEntry);
-       fEntry(base, 0, NULL, envp);
+       fEntry(base, 0, NULL, gEnvP);
        
        DEBUGS("LoadLibrary: RETURN 1");
        return base;
index ff715bb..59b7ef1 100644 (file)
@@ -13,6 +13,7 @@ void  *DoRelocate(void *base, char **envp, const char *Filename);
 // === Imports ===\r
 extern char    gLinkedBase[];\r
 extern tLoadedLib      gLoadedLibraries[];\r
+char   **gEnvP;\r
  \r
 // === CODE ===\r
 /**\r
@@ -20,10 +21,12 @@ extern tLoadedLib   gLoadedLibraries[];
  \brief Library entry point\r
  \note This is the entrypoint for the library\r
 */\r
-void *SoMain(void *base)\r
+void *SoMain(void *base, int argc, char **argv, char **envp)\r
 {\r
        void    *ret;\r
         \r
+       gEnvP = envp;\r
+\r
        // - Assume that the file pointer will be less than 4096\r
        if((intptr_t)base < 0x1000) {\r
                SysDebug("ld-acess - SoMain: Passed file pointer %i\n", base);\r

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