diff options
Diffstat (limited to 'libpsn00b/psxetc')
| -rw-r--r-- | libpsn00b/psxetc/dl.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/libpsn00b/psxetc/dl.c b/libpsn00b/psxetc/dl.c index b85a7df..51c1d2d 100644 --- a/libpsn00b/psxetc/dl.c +++ b/libpsn00b/psxetc/dl.c @@ -23,14 +23,16 @@ * of entries */ +#define SDK_LIBRARY_NAME "psxetc/dl" + #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> +#include <assert.h> #include <elf.h> #include <dlfcn.h> #include <string.h> -#include <psxetc.h> #include <psxapi.h> /* Compile options */ @@ -87,7 +89,7 @@ void *_dl_resolve_helper(DLL *dll, uint32_t index) { address = DL_GetSymbolByName(_name); if (!address) { - _sdk_log("psxetc: FATAL! can't resolve %s, locking up\n", _name); + _sdk_log("FATAL! can't resolve %s, locking up\n", _name); while (1) __asm__ volatile("nop"); } @@ -128,7 +130,7 @@ static uint32_t _elf_hash(const char *str) { static uint8_t *_dl_load_file(const char *filename, size_t *size_output) { int32_t fd = open(filename, 1); if (fd < 0) { - _sdk_log("psxetc: can't open %s, error = %d\n", filename, fd); + _sdk_log("can't open %s, error = %d\n", filename, fd); _ERROR(RTLD_E_FILE_OPEN, 0); } @@ -139,11 +141,11 @@ static uint8_t *_dl_load_file(const char *filename, size_t *size_output) { uint8_t *buffer = malloc(size); if (!buffer) { - _sdk_log("psxetc: unable to allocate %d bytes for %s\n", size, filename); + _sdk_log("unable to allocate %d bytes for %s\n", size, filename); _ERROR(RTLD_E_FILE_ALLOC, 0); } - //_sdk_log("psxetc: loading %s (%d bytes)..", filename, size); + //_sdk_log("loading %s (%d bytes)..", filename, size); for (uint32_t offset = 0; offset < size; ) { int32_t length = read(fd, &(buffer[offset]), 0x800); @@ -188,7 +190,7 @@ int32_t DL_ParseSymbolMap(const char *ptr, size_t size) { _symbol_map.nbucket = entries; _symbol_map.nchain = entries; _sdk_log( - "psxetc: allocating nbucket = %d, nchain = %d\n", + "allocating nbucket = %d, nchain = %d\n", _symbol_map.nbucket, entries ); @@ -200,7 +202,7 @@ int32_t DL_ParseSymbolMap(const char *ptr, size_t size) { _symbol_map.chain = malloc(sizeof(uint32_t) * entries); if (!_symbol_map.entries || !_symbol_map.bucket || !_symbol_map.chain) { - _sdk_log("psxetc: unable to allocate symbol map table\n"); + _sdk_log("unable to allocate symbol map table\n"); _ERROR(RTLD_E_MAP_ALLOC, -1); } @@ -244,7 +246,7 @@ int32_t DL_ParseSymbolMap(const char *ptr, size_t size) { (_type == 'B') // .bss )) { //_sdk_log( - //"psxetc: map sym: %08x,%08x [%c %s]\n", + //"map sym: %08x,%08x [%c %s]\n", //address, _size, _type, name //); @@ -269,7 +271,7 @@ int32_t DL_ParseSymbolMap(const char *ptr, size_t size) { pos++; } - _sdk_log("psxetc: parsed %d symbols\n", entries); + _sdk_log("parsed %d symbols\n", entries); if (!entries) _ERROR(RTLD_E_NO_SYMBOLS, -1); @@ -302,7 +304,7 @@ void DL_UnloadSymbolMap(void) { void *DL_GetSymbolByName(const char *name) { if (!_symbol_map.entries) { - _sdk_log("psxetc: attempted lookup with no map loaded\n"); + _sdk_log("attempted lookup with no map loaded\n"); _ERROR(RTLD_E_NO_MAP, 0); } @@ -315,7 +317,7 @@ void *DL_GetSymbolByName(const char *name) { for (uint32_t i = _symbol_map.bucket[hash_mod]; i != 0xffffffff;) { if (i >= _symbol_map.nchain) { _sdk_log( - "psxetc: GetSymbolByName() index out of bounds (%d >= %d)\n", + "GetSymbolByName() index out of bounds (%d >= %d)\n", i, _symbol_map.nchain ); _ERROR(RTLD_E_HASH_LOOKUP, 0); @@ -324,14 +326,14 @@ void *DL_GetSymbolByName(const char *name) { MapEntry *entry = &(_symbol_map.entries[i]); if (hash == entry->hash) { - //_sdk_log("psxetc: map lookup [%s = %08x]\n", name, entry->ptr); + //_sdk_log("map lookup [%s = %08x]\n", name, entry->ptr); return entry->ptr; } i = _symbol_map.chain[i]; } - _sdk_log("psxetc: map lookup [%s not found]\n", name); + _sdk_log("map lookup [%s not found]\n", name); _ERROR(RTLD_E_MAP_SYMBOL, 0); } @@ -347,14 +349,14 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { DLL *dll = malloc(sizeof(DLL)); if (!dll) { - _sdk_log("psxetc: unable to allocate DLL struct\n"); + _sdk_log("unable to allocate DLL struct\n"); _ERROR(RTLD_E_DLL_ALLOC, 0); } dll->ptr = ptr; dll->malloc_ptr = (mode & RTLD_FREE_ON_DESTROY) ? ptr : 0; dll->size = size; - _sdk_log("psxetc: initializing DLL at %08x\n", ptr); + _sdk_log("initializing DLL at %08x\n", ptr); // Interpret the key-value pairs in the .dynamic section to obtain info // about all the other sections. The pairs are null-terminated, which makes @@ -363,7 +365,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { uint32_t first_got_sym = 0; for (Elf32_Dyn *dyn = (Elf32_Dyn *) ptr; dyn->d_tag; dyn++) { - //_sdk_log("psxetc: .dynamic %08x=%08x ", dyn->d_tag, dyn->d_un.d_val); + //_sdk_log(".dynamic %08x=%08x ", dyn->d_tag, dyn->d_un.d_val); switch (dyn->d_tag) { // Offset of .got section @@ -407,7 +409,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { if (dyn->d_un.d_val != sizeof(Elf32_Sym)) { free(dll); - _sdk_log("psxetc: invalid DLL symtab entry size %d\n", dyn->d_un.d_val); + _sdk_log("invalid DLL symtab entry size %d\n", dyn->d_un.d_val); _ERROR(RTLD_E_DLL_FORMAT, 0); } break; @@ -420,7 +422,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { if (dyn->d_un.d_val != 1) { free(dll); - _sdk_log("psxetc: invalid DLL version %d\n", dyn->d_un.d_val); + _sdk_log("invalid DLL version %d\n", dyn->d_un.d_val); _ERROR(RTLD_E_DLL_FORMAT, 0); } break; @@ -433,7 +435,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { if (dyn->d_un.d_val & RHF_QUICKSTART) { free(dll); - _sdk_log("psxetc: invalid DLL flags\n"); + _sdk_log("invalid DLL flags\n"); _ERROR(RTLD_E_DLL_FORMAT, 0); } break; @@ -454,7 +456,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { if (dyn->d_un.d_val) { free(dll); - _sdk_log("psxetc: invalid DLL base address %08x\n", dyn->d_un.d_val); + _sdk_log("invalid DLL base address %08x\n", dyn->d_un.d_val); _ERROR(RTLD_E_DLL_FORMAT, 0); } break; @@ -497,7 +499,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { dll->got_length = local_got_len + (dll->symbol_count - first_got_sym) - 2; _sdk_log( - "psxetc: %d symbols, %d GOT entries\n", + "%d symbols, %d GOT entries\n", dll->symbol_count, dll->got_length ); @@ -526,7 +528,7 @@ DLL *DL_CreateDLL(void *ptr, size_t size, DL_ResolveMode mode) { sym->st_value += (uint32_t) ptr; //_sdk_log( - //"psxetc: DLL sym: %08x,%08x [%s]\n", + //"DLL sym: %08x,%08x [%s]\n", //sym->st_value, sym->st_size, _name //); @@ -636,7 +638,7 @@ void *DL_GetDLLSymbol(const DLL *dll, const char *name) { // provided. for (uint32_t i = bucket[hash_mod]; i != 0xffffffff;) { if (i >= nchain) { - _sdk_log("psxetc: DL_GetDLLSymbol() index out of bounds (%d >= %d)\n", i, nchain); + _sdk_log("DL_GetDLLSymbol() index out of bounds (%d >= %d)\n", i, nchain); _ERROR(RTLD_E_HASH_LOOKUP, 0); } @@ -644,14 +646,14 @@ void *DL_GetDLLSymbol(const DLL *dll, const char *name) { const char *_name = &(dll->strtab[sym->st_name]); if (!strcmp(name, _name)) { - //_sdk_log("psxetc: DLL lookup [%s = %08x]\n", name, sym->st_value); + //_sdk_log("DLL lookup [%s = %08x]\n", name, sym->st_value); return sym->st_value; } i = chain[i]; } - _sdk_log("psxetc: DLL lookup [%s not found]\n", name); + _sdk_log("DLL lookup [%s not found]\n", name); _ERROR(RTLD_E_DLL_SYMBOL, 0); } |
