Cleanup and Bugfixes
[tpg/acess2.git] / Kernel / bin / elf.c
index dcfe35c..745c2c7 100644 (file)
@@ -277,6 +277,7 @@ int Elf_Relocate(void *Base)
        Elf32_Dyn       *dynamicTab = NULL;     // Dynamic Table Pointer\r
        char    *dynstrtab = NULL;      // .dynamic String Table\r
        Elf32_Sym       *dynsymtab = NULL;\r
+        int    bFailed = 0;\r
        \r
        ENTER("pBase", Base);\r
        \r
@@ -393,8 +394,7 @@ int Elf_Relocate(void *Base)
                {\r
                        ptr = (void*)(iBaseDiff + rel[i].r_offset);\r
                        if( !Elf_Int_DoRelocate(rel[i].r_info, ptr, *ptr, dynsymtab, (Uint)Base) ) {\r
-                               LEAVE('x', 0);\r
-                               return 0;\r
+                               bFailed = 1;\r
                        }\r
                }\r
        }\r
@@ -406,8 +406,7 @@ int Elf_Relocate(void *Base)
                {\r
                        ptr = (void*)(iBaseDiff + rela[i].r_offset);\r
                        if( !Elf_Int_DoRelocate(rel[i].r_info, ptr, rela[i].r_addend, dynsymtab, (Uint)Base) ) {\r
-                               LEAVE('x', 0);\r
-                               return 0;\r
+                               bFailed = 1;\r
                        }\r
                }\r
        }\r
@@ -423,8 +422,7 @@ int Elf_Relocate(void *Base)
                        {\r
                                ptr = (void*)(iBaseDiff + pltRel[i].r_offset);\r
                                if( !Elf_Int_DoRelocate(pltRel[i].r_info, ptr, *ptr, dynsymtab, (Uint)Base) ) {\r
-                                       LEAVE('x', 0);\r
-                                       return 0;\r
+                                       bFailed = 1;\r
                                }\r
                        }\r
                }\r
@@ -436,13 +434,17 @@ int Elf_Relocate(void *Base)
                        {\r
                                ptr = (void*)((Uint)Base + pltRela[i].r_offset);\r
                                if( !Elf_Int_DoRelocate(pltRela[i].r_info, ptr, pltRela[i].r_addend, dynsymtab, (Uint)Base) ) {\r
-                                       LEAVE('x', 0);\r
-                                       return 0;\r
+                                       bFailed = 1;\r
                                }\r
                        }\r
                }\r
        }\r
        \r
+       if(bFailed) {\r
+               LEAVE('i', 0);\r
+               return 0;\r
+       }\r
+       \r
        LEAVE('x', hdr->entrypoint);\r
        return hdr->entrypoint;\r
 }\r

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