Updated the build files to use $(xCP), allows use of mcopy to a mtools disk
[tpg/acess2.git] / Kernel / bin / elf.c
index dcfe35c..2f37739 100644 (file)
@@ -1,26 +1,14 @@
 /*\r
-Acess v0.1\r
-ELF Executable Loader Code\r
-*/\r
+ * Acess v0.1\r
+ * ELF Executable Loader Code\r
+ */\r
+#define DEBUG  0\r
 #include <common.h>\r
 #include <binary.h>\r
-#include "bin_elf.h"\r
+#include "elf.h"\r
 \r
-#define DEBUG  0\r
 #define DEBUG_WARN     1\r
 \r
-#if DEBUG\r
-# define DEBUGS(v...)  Log(v)\r
-#else\r
-# define DEBUGS(v...)\r
-# undef ENTER\r
-# undef LOG\r
-# undef LEAVE\r
-# define ENTER(...)\r
-# define LOG(...)\r
-# define LEAVE(...)\r
-#endif\r
-\r
 \r
 // === PROTOTYPES ===\r
 tBinary        *Elf_Load(int fp);\r
@@ -277,6 +265,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 +382,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 +394,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 +410,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 +422,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