diff options
author | Max Horn | 2010-11-05 01:20:34 +0000 |
---|---|---|
committer | Max Horn | 2010-11-05 01:20:34 +0000 |
commit | 7ace85e63646d3fd4843e7f45595bc04f3b2c7dc (patch) | |
tree | 31fb058c695dab2969f5bf6a4f33db6973c20a33 /backends/plugins/elf/elf-loader.cpp | |
parent | 102e7ee88cf04fa470ec372a1ac38846d278d463 (diff) | |
download | scummvm-rg350-7ace85e63646d3fd4843e7f45595bc04f3b2c7dc.tar.gz scummvm-rg350-7ace85e63646d3fd4843e7f45595bc04f3b2c7dc.tar.bz2 scummvm-rg350-7ace85e63646d3fd4843e7f45595bc04f3b2c7dc.zip |
PLUGINS: Simplify ELF plugin providers & DLObject subclasses
* Remove DLObject virtual methods allocSegment and freeSegment.
As long as all DLObject implementations use memalign + free to
allocate/release segments, there is no point in wrapping those.
This enables further simplifications.
* Add TemplatedELFPlugin template class. Use this instead of explicit
ELFPlugin subclasses.
* Rename DLObject::discard_symtab to discardSymtab
svn-id: r54082
Diffstat (limited to 'backends/plugins/elf/elf-loader.cpp')
-rw-r--r-- | backends/plugins/elf/elf-loader.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp index 24a4fda703..f7b151ecee 100644 --- a/backends/plugins/elf/elf-loader.cpp +++ b/backends/plugins/elf/elf-loader.cpp @@ -34,6 +34,8 @@ #include "common/fs.h" #include "common/ptr.h" +#include <malloc.h> // for memalign() + DLObject::DLObject() : _file(0), _segment(0), @@ -49,10 +51,13 @@ DLObject::DLObject() : } DLObject::~DLObject() { + discardSymtab(); + free(_segment); + _segment = 0; } // Expel the symbol table from memory -void DLObject::discard_symtab() { +void DLObject::discardSymtab() { free(_symtab); _symtab = 0; @@ -64,9 +69,9 @@ void DLObject::discard_symtab() { // Unload all objects from memory void DLObject::unload() { - discard_symtab(); + discardSymtab(); - freeSegment(_segment); + free(_segment); _segment = 0; _segmentSize = 0; @@ -160,7 +165,7 @@ bool DLObject::readProgramHeaders(Elf32_Ehdr *ehdr, Elf32_Phdr *phdr, Elf32_Half } bool DLObject::loadSegment(Elf32_Phdr *phdr) { - _segment = (byte *)allocSegment(phdr->p_align, phdr->p_memsz); + _segment = (byte *)memalign(phdr->p_align, phdr->p_memsz); if (!_segment) { warning("elfloader: Out of memory."); |