X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Fbinary.c;h=08ae6e9e0956598b960c11db7382c53759a12955;hb=a4d8188f730bcc25cd4a6f4799ac7d65eb707cf2;hp=6439fb962594abcec450977196fae7f4da55dc97;hpb=3764c294f21229bdf700f436fa4884f5e76e0d3a;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/binary.c b/AcessNative/ld-acess_src/binary.c index 6439fb96..08ae6e9e 100644 --- a/AcessNative/ld-acess_src/binary.c +++ b/AcessNative/ld-acess_src/binary.c @@ -6,7 +6,7 @@ #include #include -#define LIBRARY_PATH "$$$$../Usermode/Output/i386/Libs" +#define LIBRARY_PATH "$$$$../Usermode/Output/x86/Libs" // === TYPES === typedef struct sBinary { @@ -19,8 +19,8 @@ typedef struct sBinary { // === IMPORTS === extern void *Elf_Load(int fd); -extern uintptr_t Elf_Relocate(void *Base); -extern int Elf_GetSymbol(void *Base, char *Name, uintptr_t *ret); +extern uintptr_t ElfRelocate(void *Base); +extern int ElfGetSymbol(void *Base, char *Name, uintptr_t *ret, size_t *size); extern int ciNumBuiltinSymbols; extern tSym caBuiltinSymbols[]; @@ -33,8 +33,8 @@ tBinFmt gElf_FormatDef = { // .Magic = "\x7F""ELF", .Name = "ELF32", .Load = Elf_Load, - .Relocate = Elf_Relocate, - .GetSymbol = Elf_GetSymbol + .Relocate = ElfRelocate, + .GetSymbol = ElfGetSymbol }; tBinary *gLoadedBinaries; @@ -96,7 +96,7 @@ void *Binary_LoadLibrary(const char *Name) { char *path; void *ret; - int (*entry)(int,char*[],char**) = NULL; + int (*entry)(void *,int,char*[],char**) = NULL; // Find File path = Binary_LocateLibrary(Name); @@ -108,6 +108,7 @@ void *Binary_LoadLibrary(const char *Name) } ret = Binary_Load(path, (uintptr_t*)&entry); + printf("LOADED '%s' to %p (Entry=%p)\n", path, ret, entry); free(path); #if DEBUG @@ -118,7 +119,7 @@ void *Binary_LoadLibrary(const char *Name) #if DEBUG printf("Calling '%s' entry point %p\n", Name, entry); #endif - entry(0, argv, NULL); + entry(ret, 0, argv, NULL); } return ret; @@ -155,7 +156,7 @@ void *Binary_Load(const char *Filename, uintptr_t *EntryPoint) return NULL; } - acess_read(fd, 4, &dword); + acess_read(fd, &dword, 4); acess_seek(fd, 0, ACESS_SEEK_SET); if( memcmp(&dword, "\x7F""ELF", 4) == 0 ) { @@ -220,7 +221,7 @@ void Binary_SetReadyToUse(void *Base) } } -int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) +int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value, size_t *Size) { int i; tBinary *bin; @@ -235,6 +236,7 @@ int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) { if( strcmp(caBuiltinSymbols[i].Name, SymbolName) == 0 ) { *Value = (uintptr_t)caBuiltinSymbols[i].Value; + if(Size) *Size = 0; return 1; } } @@ -244,7 +246,7 @@ int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value) { if( !bin->Ready ) continue; //printf(" Binary_GetSymbol: bin = %p{%p, %s}\n", bin, bin->Base, bin->Path); - if( bin->Format->GetSymbol(bin->Base, (char*)SymbolName, Value) ) + if( bin->Format->GetSymbol(bin->Base, (char*)SymbolName, Value, Size) ) return 1; }