Loader: Use address mask provided to load*Symbols when loading the symbols from the...
authorAli Saidi <Ali.Saidi@arm.com>
Mon, 23 Aug 2010 16:18:39 +0000 (11:18 -0500)
committerAli Saidi <Ali.Saidi@arm.com>
Mon, 23 Aug 2010 16:18:39 +0000 (11:18 -0500)
src/base/loader/elf_object.cc
src/base/loader/elf_object.hh

index 6096cb2e3665c80264f13796bfa0e661b73a5e1a..9d9109ab46b504fce703e3a635482fc55ac6ec77 100644 (file)
@@ -335,7 +335,7 @@ ElfObject::ElfObject(const string &_filename, int _fd,
 
 
 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 @@ ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding)
             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 @@ ElfObject::loadSomeSymbols(SymbolTable *symtab, int binding)
 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
index 5c5f6907deaddafc5d2735abbdf7463d7fefa76c..a19e82b28f877938b6bc5c2f953f3141d671cc23 100644 (file)
@@ -50,7 +50,7 @@ class ElfObject : public ObjectFile
     std::set<std::string> 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,