Usermode/ld-acess - Bugfix and extra syscall
authorJohn Hodge <[email protected]>
Fri, 26 Apr 2013 05:20:52 +0000 (13:20 +0800)
committerJohn Hodge <[email protected]>
Fri, 26 Apr 2013 05:20:52 +0000 (13:20 +0800)
- Fixes when programs are linked against ld-acess.so instead of libld-acess.so
- SYS_COPYFD added
- Cleaned up twiddling loaded library list from main()
 > Now hardcoded check in IsLoaded is used for *ld-acess.so

Usermode/Libraries/ld-acess.so_src/arch/syscalls.s.h
Usermode/Libraries/ld-acess.so_src/loadlib.c
Usermode/Libraries/ld-acess.so_src/main.c

index 78d34bf..c7a7215 100644 (file)
@@ -42,6 +42,7 @@ SYSCALL3(_SysSetMemFlags, SYS_SETFLAGS)       // uint32_t SysSetMemFlags(uint addr, ui
 SYSCALL2(_SysOpen, SYS_OPEN)   // char*, int
 SYSCALL3(_SysOpenChild, SYS_OPENCHILD) // int, char*, int
 SYSCALL3(_SysReopen, SYS_REOPEN)       // int, char*, int
+SYSCALL2(_SysCopyFD, SYS_COPYFD)       // int, int
 SYSCALL1(_SysClose, SYS_CLOSE) // int
 SYSCALL3(_SysRead, SYS_READ)   // int, uint, void*
 SYSCALL3(_SysWrite, SYS_WRITE) // int, uint, void*
index dcacd8a..5307301 100644 (file)
@@ -24,6 +24,7 @@ extern const struct {
 }      caLocalExports[];
 extern const int       ciNumLocalExports;
 extern char    **gEnvP;
+extern char    gLinkedBase[];
 
 // === GLOABLS ===
 tLoadedLib     gLoadedLibraries[MAX_LOADED_LIBRARIES];
@@ -108,6 +109,15 @@ void *IsFileLoaded(const char *file)
 {
         int    i;
        DEBUGS("IsFileLoaded: (file='%s')", file);
+
+       // Applications link against either libld-acess.so or ld-acess.so
+       if( strcmp(file, "/Acess/Libs/libld-acess.so") == 0
+        || strcmp(file, "/Acess/Libs/ld-acess.so") == 0 )
+       {
+               DEBUGS("IsFileLoaded: Found local (%p)", &gLinkedBase);
+               return &gLinkedBase;
+       }
+
        for( i = 0; i < MAX_LOADED_LIBRARIES; i++ )
        {
                if(gLoadedLibraries[i].Base == 0)       break;  // Last entry has Base set to NULL
@@ -217,7 +227,7 @@ int GetSymbol(const char *name, void **Value, size_t *Size)
        }
        
        // Entry 0 is ld-acess, ignore it
-       for(i = 1; i < MAX_LOADED_LIBRARIES; i ++)
+       for(i = 0; i < MAX_LOADED_LIBRARIES; i ++)
        {
                if(gLoadedLibraries[i].Base == 0)
                        break;
index 985f9c8..e379a70 100644 (file)
@@ -12,7 +12,6 @@ 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
  \r
@@ -41,10 +40,6 @@ 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

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