diff options
Diffstat (limited to 'backends/plugins')
-rw-r--r-- | backends/plugins/arm-loader.cpp | 9 | ||||
-rw-r--r-- | backends/plugins/ds/ds-provider.cpp | 7 | ||||
-rw-r--r-- | backends/plugins/ds/ds-provider.h | 3 | ||||
-rw-r--r-- | backends/plugins/elf-loader.h | 22 | ||||
-rw-r--r-- | backends/plugins/elf-provider.cpp | 33 | ||||
-rw-r--r-- | backends/plugins/elf-provider.h | 6 |
6 files changed, 22 insertions, 58 deletions
diff --git a/backends/plugins/arm-loader.cpp b/backends/plugins/arm-loader.cpp index 8ceccfb7e8..61d7c73236 100644 --- a/backends/plugins/arm-loader.cpp +++ b/backends/plugins/arm-loader.cpp @@ -23,9 +23,12 @@ * */ +#if defined(DYNAMIC_MODULES) && defined(ARM) + #include "backends/fs/ds/ds-fs.h" #include "elf-loader.h" #include "dsmain.h" +#include "arm-loader.h" #define __DEBUG_PLUGINS__ @@ -45,7 +48,7 @@ * @param size Size of relocation section * */ -bool DLObject::relocate(Common::SeekableReadStream* DLFile, unsigned long offset, unsigned long size, void *relSegment) { +bool ARMDLObject::relocate(Common::SeekableReadStream* DLFile, unsigned long offset, unsigned long size, void *relSegment) { Elf32_Rel *rel = NULL; //relocation entry // Allocate memory for relocation table @@ -135,7 +138,7 @@ bool DLObject::relocate(Common::SeekableReadStream* DLFile, unsigned long offset return true; } -bool DLObject::relocateRels(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) { +bool ARMDLObject::relocateRels(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) { // Loop over sections, finding relocation sections for (int i = 0; i < ehdr->e_shnum; i++) { @@ -162,3 +165,5 @@ bool DLObject::relocateRels(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr return true; } + +#endif /* defined(DYNAMIC_MODULES) && defined(ARM) */ diff --git a/backends/plugins/ds/ds-provider.cpp b/backends/plugins/ds/ds-provider.cpp index 999781754b..c83f198b5e 100644 --- a/backends/plugins/ds/ds-provider.cpp +++ b/backends/plugins/ds/ds-provider.cpp @@ -23,15 +23,18 @@ * */ +#if defined(DYNAMIC_MODULES) && defined(__DS__) + /*#include "base/plugins.h" #include "backends/plugins/dynamic-plugin.h" #include "common/fs.h" #include "backends/plugins/elf-loader.h"*/ +#include "backends/plugins/arm-loader.h" #include "backends/plugins/elf-provider.h" #include "backends/plugins/ds/ds-provider.h" -#if defined(DYNAMIC_MODULES) && defined(__DS__) + class DSPlugin : public ELFPlugin { public: @@ -50,7 +53,7 @@ public: bool DSPlugin::loadPlugin() { assert(!_dlHandle); - DLObject *obj = new DLObject(NULL); + DLObject *obj = new ARMDLObject(); if (obj->open(_filename.c_str())) { _dlHandle = obj; } else { diff --git a/backends/plugins/ds/ds-provider.h b/backends/plugins/ds/ds-provider.h index d9b1ee9cf4..462c3e3b63 100644 --- a/backends/plugins/ds/ds-provider.h +++ b/backends/plugins/ds/ds-provider.h @@ -25,11 +25,8 @@ #include "backends/plugins/elf-provider.h" -#if defined(DYNAMIC_MODULES) && defined(ELF_LOADER_TARGET) - class DSPluginProvider : public ELFPluginProvider { Plugin* createPlugin(const Common::FSNode &node) const; }; -#endif // defined(DYNAMIC_MODULES) && defined(ELF_LOADER_TARGET) diff --git a/backends/plugins/elf-loader.h b/backends/plugins/elf-loader.h index 0a84d9c0b9..423a97bc42 100644 --- a/backends/plugins/elf-loader.h +++ b/backends/plugins/elf-loader.h @@ -28,6 +28,7 @@ #include "elf32.h" #include "common/stream.h" +#include "backends/plugins/dynamic-plugin.h" #if defined(__PLAYSTATION2__) || defined(__PSP__) #define MIPS_TARGET @@ -38,12 +39,8 @@ #define ARM_TARGET #endif -#define MAXDLERRLEN 80 - class DLObject { protected: - char *_errbuf; /* For error messages, at least MAXDLERRLEN in size */ - void *_segment, *_symtab; char *_strtab; int _symbol_cnt; @@ -57,9 +54,9 @@ protected: unsigned int _gpVal; // Value of Global Pointer #endif - void seterror(const char *fmt, ...); + //void seterror(const char *fmt, ...); void unload(); - virtual bool relocate(Common::SeekableReadStream* DLFile, unsigned long offset, unsigned long size, void *relSegment); + virtual bool relocate(Common::SeekableReadStream* DLFile, unsigned long offset, unsigned long size, void *relSegment) = 0; bool load(Common::SeekableReadStream* DLFile); bool readElfHeader(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr); @@ -69,7 +66,7 @@ protected: int loadSymbolTable(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr, Elf32_Shdr *shdr); bool loadStringTable(Common::SeekableReadStream* DLFile, Elf32_Shdr *shdr); void relocateSymbols(Elf32_Addr offset); - virtual bool relocateRels(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr, Elf32_Shdr *shdr); + virtual bool relocateRels(Common::SeekableReadStream* DLFile, Elf32_Ehdr *ehdr, Elf32_Shdr *shdr) = 0; public: bool open(const char *path); @@ -77,15 +74,6 @@ public: void *symbol(const char *name); void discard_symtab(); - DLObject(char *errbuf = NULL) : _errbuf(errbuf), _segment(NULL), _symtab(NULL), - _strtab(NULL), _symbol_cnt(0), _symtab_sect(-1), _dtors_start(NULL), _dtors_end(NULL), - _segmentSize(0) { -#ifdef MIPS_TARGET - _shortsSegment = NULL; - _gpVal = 0; -#endif - } - }; -#endif /* LOADER_H */ +#endif /* ELF_LOADER_H */ diff --git a/backends/plugins/elf-provider.cpp b/backends/plugins/elf-provider.cpp index 22e365130b..03218130fb 100644 --- a/backends/plugins/elf-provider.cpp +++ b/backends/plugins/elf-provider.cpp @@ -23,14 +23,14 @@ * */ +#if defined(DYNAMIC_MODULES) && defined(ELF_LOADER_TARGET) + #include "backends/plugins/elf-provider.h" #include "backends/plugins/dynamic-plugin.h" #include "common/fs.h" #include "backends/plugins/elf-loader.h" -#if defined(DYNAMIC_MODULES) && defined(ELF_LOADER_TARGET) - DynamicPlugin::VoidFunc ELFPlugin::findSymbol(const char *symbol) { void *func; bool handleNull; @@ -58,30 +58,6 @@ DynamicPlugin::VoidFunc ELFPlugin::findSymbol(const char *symbol) { return tmp; } -bool ELFPlugin::loadPlugin() { - assert(!_dlHandle); - DLObject *obj = new DLObject(NULL); - if (obj->open(_filename.c_str())) { - _dlHandle = obj; - } else { - delete obj; - _dlHandle = NULL; - } - - if (!_dlHandle) { - warning("Failed loading plugin '%s'", _filename.c_str()); - return false; - } - - bool ret = DynamicPlugin::loadPlugin(); - - if (ret && _dlHandle) { - _dlHandle->discard_symtab(); - } - - return ret; -} - void ELFPlugin::unloadPlugin() { DynamicPlugin::unloadPlugin(); if (_dlHandle) { @@ -93,11 +69,6 @@ void ELFPlugin::unloadPlugin() { } } - -Plugin* ELFPluginProvider::createPlugin(const Common::FSNode &node) const { - return new ELFPlugin(node.getPath()); -} - bool ELFPluginProvider::isPluginFilename(const Common::FSNode &node) const { // Check the plugin suffix Common::String filename = node.getName(); diff --git a/backends/plugins/elf-provider.h b/backends/plugins/elf-provider.h index eb0ea5d51d..fd047fd0d3 100644 --- a/backends/plugins/elf-provider.h +++ b/backends/plugins/elf-provider.h @@ -53,14 +53,14 @@ public: unloadPlugin(); } - virtual bool loadPlugin(); - virtual void unloadPlugin(); + virtual bool loadPlugin() = 0; + void unloadPlugin(); }; class ELFPluginProvider : public FilePluginProvider { protected: - virtual Plugin* createPlugin(const Common::FSNode &node) const; + virtual Plugin* createPlugin(const Common::FSNode &node) const = 0; bool isPluginFilename(const Common::FSNode &node) const; |