diff options
author | Tony Puccinelli | 2010-06-22 17:51:47 +0000 |
---|---|---|
committer | Tony Puccinelli | 2010-06-22 17:51:47 +0000 |
commit | 8ec2c0714607ada24ace8f547c320155b4120678 (patch) | |
tree | f5d747f02efc05b356f99021d01d4e7ecdd34e46 /backends/platform/gp2xwiz | |
parent | fd507fdba08bb196d2b8430511aaf7cb6bc0c066 (diff) | |
download | scummvm-rg350-8ec2c0714607ada24ace8f547c320155b4120678.tar.gz scummvm-rg350-8ec2c0714607ada24ace8f547c320155b4120678.tar.bz2 scummvm-rg350-8ec2c0714607ada24ace8f547c320155b4120678.zip |
modified formatting to match ScummVM Code Formatting Conventions
svn-id: r50156
Diffstat (limited to 'backends/platform/gp2xwiz')
-rw-r--r-- | backends/platform/gp2xwiz/gp2xwiz-loader.cpp | 310 |
1 files changed, 149 insertions, 161 deletions
diff --git a/backends/platform/gp2xwiz/gp2xwiz-loader.cpp b/backends/platform/gp2xwiz/gp2xwiz-loader.cpp index bc2fd5df6e..2da2ee44bc 100644 --- a/backends/platform/gp2xwiz/gp2xwiz-loader.cpp +++ b/backends/platform/gp2xwiz/gp2xwiz-loader.cpp @@ -32,7 +32,7 @@ #include <malloc.h> #include <unistd.h> -#include "gp2xwiz-loader.h" +#include "backends/platform/gp2xwiz/gp2xwiz-loader.h" #ifdef __WIZ_DEBUG_PLUGINS__ #define DBG(x) printf(x, ## __VA_ARGS__) @@ -43,21 +43,19 @@ #define seterror(x,...) fprintf(stderr,x, ## __VA_ARGS__) // Expel the symbol table from memory -void DLObject::discard_symtab() -{ - free(_symtab); - free(_strtab); - _symtab = NULL; - _strtab = NULL; - _symbol_cnt = 0; +void DLObject::discard_symtab() { + free(_symtab); + free(_strtab); + _symtab = NULL; + _strtab = NULL; + _symbol_cnt = 0; } // Unload all objects from memory -void DLObject::unload() -{ - discard_symtab(); - free(_segment); - segment = NULL; +void DLObject::unload() { + discard_symtab(); + free(_segment); + segment = NULL; } /** @@ -68,188 +66,178 @@ void DLObject::unload() * @param size Size of relocation section * */ -bool DLObject::relocate(int fd, unsigned long offset, unsigned long size) -{ - Elf32_Rela *rela; //relocation entry - - // Allocate memory for relocation table - if (!(rela = (Elf32_Rela *)malloc(size))) { - seterror("Out of memory."); - return false; - } - - // Read in our relocation table - if (lseek(fd, offset, SEEK_SET)<0 || - read(fd, rela, size) != (ssize_t)size) { - seterror("Relocation table load failed."); - free(rela); - return false; - } - - // Treat each relocation entry. Loop over all of them - int cnt = size / sizeof(*rela); - - // TODO: Loop over relocation entries - for (int i=0; i<cnt; i++) { - - Elf32_Sym *sym = ???; - - void *target = ???; - - switch(/*relocation type*/) { - case ???: - //TODO: Cases for each relocation type. - break; - default: - seterror("Unknown relocation type %d.", ???); - free(rela); - return false; - } - - } - - free(rela); - return true; +bool DLObject::relocate(int fd, unsigned long offset, unsigned long size) { + Elf32_Rela *rela; //relocation entry + + // Allocate memory for relocation table + if (!(rela = (Elf32_Rela *)malloc(size))) { + seterror("Out of memory."); + return false; + } + + // Read in our relocation table + if (lseek(fd, offset, SEEK_SET) < 0 || + read(fd, rela, size) != (ssize_t)size) { + seterror("Relocation table load failed."); + free(rela); + return false; + } + + // Treat each relocation entry. Loop over all of them + int cnt = size / sizeof(*rela); + + // TODO: Loop over relocation entries + for (int i = 0; i < cnt; i++) { + + //Elf32_Sym *sym = ???; + + //void *target = ???; + + switch (/*relocation type*/) { + //case ??? : + //TODO: Cases for each relocation type. + //break; + default: + seterror("Unknown relocation type %d.", ?? ?); + free(rela); + return false; + } + + } + + free(rela); + return true; } -bool DLObject::load(int fd) -{ - Elf32_Ehdr ehdr; // ELF header - Elf32_Phdr phdr; // Program header - Elf32_Shdr *shdr; // Section header +bool DLObject::load(int fd) { + Elf32_Ehdr ehdr; // ELF header + Elf32_Phdr phdr; // Program header + Elf32_Shdr *shdr; // Section header - //TODO: fill this out! + //TODO: fill this out! - free(shdr); + free(shdr); - return true; + return true; } -bool DLObject::open(const char *path) -{ - int fd; - void *ctors_start, *ctors_end; +bool DLObject::open(const char *path) { + int fd; + void *ctors_start, *ctors_end; - DBG(("open(\"%s\")\n", path)); + DBG(("open(\"%s\")\n", path)); - if ((fd = ::open(path, O_RDONLY))<0) { - seterror("%s not found.", path); - return false; - } + if ((fd = ::open(path, O_RDONLY)) < 0) { + seterror("%s not found.", path); + return false; + } - // Try to load and relocate - if (!load(fd)) { - ::close(fd); - unload(); - return false; - } + // Try to load and relocate + if (!load(fd)) { + ::close(fd); + unload(); + return false; + } - ::close(fd); + ::close(fd); - //TODO: flush data cache + //TODO: flush data cache - ctors_start = symbol("___plugin_ctors"); - ctors_end = symbol("___plugin_ctors_end"); - _dtors_start = symbol("___plugin_dtors"); - _dtors_end = symbol("___plugin_dtors_end"); + ctors_start = symbol("___plugin_ctors"); + ctors_end = symbol("___plugin_ctors_end"); + _dtors_start = symbol("___plugin_dtors"); + _dtors_end = symbol("___plugin_dtors_end"); - if (ctors_start == NULL || ctors_end == NULL || _dtors_start == NULL || - _dtors_end == NULL) { - seterror("Missing ctors/dtors."); - _dtors_start = _dtors_end = NULL; - unload(); - return false; - } + if (ctors_start == NULL || ctors_end == NULL || _dtors_start == NULL || + _dtors_end == NULL) { + seterror("Missing ctors/dtors."); + _dtors_start = _dtors_end = NULL; + unload(); + return false; + } - DBG(("Calling constructors.\n")); - for (void (**f)(void) = (void (**)(void))ctors_start; f != ctors_end; f++) - (**f)(); + DBG(("Calling constructors.\n")); + for (void (**f)(void) = (void (**)(void))ctors_start; f != ctors_end; f++) + (**f)(); - DBG(("%s opened ok.\n", path)); - return true; + DBG(("%s opened ok.\n", path)); + return true; } -bool DLObject::close() -{ - if (_dtors_start != NULL && _dtors_end != NULL) - for (void (**f)(void) = (void (**)(void))_dtors_start; f != _dtors_end; f++) - (**f)(); - _dtors_start = _dtors_end = NULL; - unload(); - return true; +bool DLObject::close() { + if (_dtors_start != NULL && _dtors_end != NULL) + for (void (**f)(void) = (void (**)(void))_dtors_start; f != _dtors_end; f++) + (**f)(); + _dtors_start = _dtors_end = NULL; + unload(); + return true; } -void *DLObject::symbol(const char *name) -{ - DBG(("symbol(\"%s\")\n", name)); - - if (_symtab == NULL || _strtab == NULL || _symbol_cnt < 1) { - seterror("No symbol table loaded."); - return NULL; - } - - Elf32_Sym *s = (Elf32_Sym *)_symtab; - for (int c = symbol_cnt; c--; s++) - - //TODO: Figure out which symbols should be detected here - if ((s->st_info>>4 == 1 || s->st_info>>4 == 2) && - strtab[s->st_name] == '_' && !strcmp(name, strtab+s->st_name+1)) { - - // We found the symbol - DBG(("=> %p\n", (void*)s->st_value)); - return (void*)s->st_value; - } - - // We didn't find the symbol - seterror("Symbol \"%s\" not found.", name); - return NULL; +void *DLObject::symbol(const char *name) { + DBG(("symbol(\"%s\")\n", name)); + + if (_symtab == NULL || _strtab == NULL || _symbol_cnt < 1) { + seterror("No symbol table loaded."); + return NULL; + } + + Elf32_Sym *s = (Elf32_Sym *)_symtab; + for (int c = symbol_cnt; c--; s++) + + //TODO: Figure out which symbols should be detected here + if ((s->st_info >> 4 == 1 || s->st_info >> 4 == 2) && + strtab[s->st_name] == '_' && !strcmp(name, strtab + s->st_name + 1)) { + + // We found the symbol + DBG(("=> %p\n", (void*)s->st_value)); + return (void*)s->st_value; + } + + // We didn't find the symbol + seterror("Symbol \"%s\" not found.", name); + return NULL; } static char dlerr[MAXDLERRLEN]; -void *dlopen(const char *filename, int flags) -{ - DLObject *obj = new DLObject(dlerr); - if (obj->open(filename)) - return (void *)obj; - delete obj; - return NULL; +void *dlopen(const char *filename, int flags) { + DLObject *obj = new DLObject(dlerr); + if (obj->open(filename)) + return (void *)obj; + delete obj; + return NULL; } -int dlclose(void *handle) -{ - DLObject *obj = (DLObject *)handle; - if (obj == NULL) { - strcpy(dlerr, "Handle is NULL."); - return -1; - } - if (obj->close()) { - delete obj; - return 0; - } - return -1; +int dlclose(void *handle) { + DLObject *obj = (DLObject *)handle; + if (obj == NULL) { + strcpy(dlerr, "Handle is NULL."); + return -1; + } + if (obj->close()) { + delete obj; + return 0; + } + return -1; } -void *dlsym(void *handle, const char *symbol) -{ - if (handle == NULL) { - strcpy(dlerr, "Handle is NULL."); - return NULL; - } - return ((DLObject *)handle)->symbol(symbol); +void *dlsym(void *handle, const char *symbol) { + if (handle == NULL) { + strcpy(dlerr, "Handle is NULL."); + return NULL; + } + return ((DLObject *)handle)->symbol(symbol); } -const char *dlerror() -{ - return dlerr; +const char *dlerror() { + return dlerr; } -void dlforgetsyms(void *handle) -{ - if (handle != NULL) - ((DLObject *)handle)->discard_symtab(); +void dlforgetsyms(void *handle) { + if (handle != NULL) + ((DLObject *)handle)->discard_symtab(); } #endif /* DYNAMIC_MODULES && GP2X__WIZ */ |