diff -r ae86f772d46f -r 4606525a4be1 src/base/loader/elf_object.hh --- a/src/base/loader/elf_object.hh Fri Aug 13 11:41:00 2010 -0500 +++ b/src/base/loader/elf_object.hh Fri Aug 13 11:41:11 2010 -0500 @@ -50,7 +50,7 @@ std::set sectionNames; /// Helper functions for loadGlobalSymbols() and loadLocalSymbols(). - bool loadSomeSymbols(SymbolTable *symtab, int binding); + bool loadSomeSymbols(SymbolTable *symtab, int binding, Addr mask); ElfObject(const std::string &_filename, int _fd, size_t _len, uint8_t *_data, diff -r ae86f772d46f -r 4606525a4be1 src/base/loader/elf_object.cc --- a/src/base/loader/elf_object.cc Fri Aug 13 11:41:00 2010 -0500 +++ b/src/base/loader/elf_object.cc Fri Aug 13 11:41:11 2010 -0500 @@ -335,7 +335,7 @@ bool -ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding) +ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding, Addr mask) { Elf *elf; int sec_idx = 1; // there is a 0 but it is nothing, go figure @@ -375,7 +375,7 @@ for (ii = 0; ii < count; ++ii) { gelf_getsym(data, ii, &sym); if (GELF_ST_BIND(sym.st_info) == binding) { - symtab->insert(sym.st_value, + symtab->insert(sym.st_value & mask, elf_strptr(elf, shdr.sh_link, sym.st_name)); } } @@ -392,13 +392,13 @@ bool ElfObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask) { - return loadSomeSymbols(symtab, STB_GLOBAL); + return loadSomeSymbols(symtab, STB_GLOBAL, addrMask); } bool ElfObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask) { - return loadSomeSymbols(symtab, STB_LOCAL); + return loadSomeSymbols(symtab, STB_LOCAL, addrMask); } bool