diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc index f6a18db8a3..b6253adbe1 100644 --- a/src/base/loader/elf_object.cc +++ b/src/base/loader/elf_object.cc @@ -414,6 +414,12 @@ ElfObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask) return loadSomeSymbols(symtab, STB_LOCAL, addrMask); } +bool +ElfObject::loadWeakSymbols(SymbolTable *symtab, Addr addrMask) +{ + return loadSomeSymbols(symtab, STB_WEAK, addrMask); +} + bool ElfObject::loadSections(PortProxy& memProxy, Addr addrMask) { diff --git a/src/base/loader/elf_object.hh b/src/base/loader/elf_object.hh index 350a80db15..d3d3e5197d 100644 --- a/src/base/loader/elf_object.hh +++ b/src/base/loader/elf_object.hh @@ -71,6 +71,8 @@ class ElfObject : public ObjectFile std::numeric_limits::max()); virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask = std::numeric_limits::max()); + virtual bool loadWeakSymbols(SymbolTable *symtab, Addr addrMask = + std::numeric_limits::max()); virtual bool isDynamic() { return sectionExists(".interp"); } virtual bool hasTLS() { return sectionExists(".tbss"); } diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh index 4a789d321b..bdc9a31a19 100644 --- a/src/base/loader/object_file.hh +++ b/src/base/loader/object_file.hh @@ -89,6 +89,9 @@ class ObjectFile std::numeric_limits::max()) = 0; virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask = std::numeric_limits::max()) = 0; + virtual bool loadWeakSymbols(SymbolTable *symtab, Addr addrMask = + std::numeric_limits::max()) + { return false; } virtual bool isDynamic() { return false; } virtual bool hasTLS() { return false; } diff --git a/src/sim/process.cc b/src/sim/process.cc index 22a8863032..1654ea5c58 100644 --- a/src/sim/process.cc +++ b/src/sim/process.cc @@ -574,7 +574,8 @@ LiveProcess::LiveProcess(LiveProcessParams * params, ObjectFile *_objFile) 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;