aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxetc
diff options
context:
space:
mode:
Diffstat (limited to 'libpsn00b/psxetc')
-rw-r--r--libpsn00b/psxetc/dl.c52
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);
}