changeset 2285b98847d7 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=2285b98847d7
description:
        base: load weak symbols from object file
        Without loading weak symbols into gem5, some function names and the 
given PC
        cannot correspond correctly, because the binding attributes of unction 
names
        in an ELF file are not only STB_GLOBAL or STB_LOCAL, but also STB_WEAK. 
This
        patch adds a function for loading weak symbols.

        Committed by: Nilay Vaish <[email protected]>

diffstat:

 src/base/loader/elf_object.cc  |  6 ++++++
 src/base/loader/elf_object.hh  |  2 ++
 src/base/loader/object_file.hh |  3 +++
 src/sim/process.cc             |  3 ++-
 4 files changed, 13 insertions(+), 1 deletions(-)

diffs (54 lines):

diff -r 35198406dd72 -r 2285b98847d7 src/base/loader/elf_object.cc
--- a/src/base/loader/elf_object.cc     Wed Apr 17 16:07:10 2013 -0500
+++ b/src/base/loader/elf_object.cc     Wed Apr 17 16:07:19 2013 -0500
@@ -415,6 +415,12 @@
 }
 
 bool
+ElfObject::loadWeakSymbols(SymbolTable *symtab, Addr addrMask)
+{
+    return loadSomeSymbols(symtab, STB_WEAK, addrMask);
+}
+
+bool
 ElfObject::loadSections(PortProxy& memProxy, Addr addrMask)
 {
     if (!ObjectFile::loadSections(memProxy, addrMask))
diff -r 35198406dd72 -r 2285b98847d7 src/base/loader/elf_object.hh
--- a/src/base/loader/elf_object.hh     Wed Apr 17 16:07:10 2013 -0500
+++ b/src/base/loader/elf_object.hh     Wed Apr 17 16:07:19 2013 -0500
@@ -71,6 +71,8 @@
             std::numeric_limits<Addr>::max());
     virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
             std::numeric_limits<Addr>::max());
+    virtual bool loadWeakSymbols(SymbolTable *symtab, Addr addrMask =
+            std::numeric_limits<Addr>::max());
 
     virtual bool isDynamic() { return sectionExists(".interp"); }
     virtual bool hasTLS() { return sectionExists(".tbss"); }
diff -r 35198406dd72 -r 2285b98847d7 src/base/loader/object_file.hh
--- a/src/base/loader/object_file.hh    Wed Apr 17 16:07:10 2013 -0500
+++ b/src/base/loader/object_file.hh    Wed Apr 17 16:07:19 2013 -0500
@@ -89,6 +89,9 @@
             std::numeric_limits<Addr>::max()) = 0;
     virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
             std::numeric_limits<Addr>::max()) = 0;
+    virtual bool loadWeakSymbols(SymbolTable *symtab, Addr addrMask =
+            std::numeric_limits<Addr>::max())
+    { return false; }
 
     virtual bool isDynamic() { return false; }
     virtual bool hasTLS() { return false; }
diff -r 35198406dd72 -r 2285b98847d7 src/sim/process.cc
--- a/src/sim/process.cc        Wed Apr 17 16:07:10 2013 -0500
+++ b/src/sim/process.cc        Wed Apr 17 16:07:19 2013 -0500
@@ -574,7 +574,8 @@
     if (!debugSymbolTable) {
         debugSymbolTable = new SymbolTable();
         if (!objFile->loadGlobalSymbols(debugSymbolTable) ||
-            !objFile->loadLocalSymbols(debugSymbolTable)) {
+            !objFile->loadLocalSymbols(debugSymbolTable) ||
+            !objFile->loadWeakSymbols(debugSymbolTable)) {
             // didn't load any symbols
             delete debugSymbolTable;
             debugSymbolTable = NULL;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to