aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins/elf/elf-loader.cpp
diff options
context:
space:
mode:
authorMax Horn2010-11-05 01:20:34 +0000
committerMax Horn2010-11-05 01:20:34 +0000
commit7ace85e63646d3fd4843e7f45595bc04f3b2c7dc (patch)
tree31fb058c695dab2969f5bf6a4f33db6973c20a33 /backends/plugins/elf/elf-loader.cpp
parent102e7ee88cf04fa470ec372a1ac38846d278d463 (diff)
downloadscummvm-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.cpp13
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.");