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 <nilay@cs.wisc.edu>
This commit is contained in:
parent
3ff091bdf4
commit
b54e118628
@@ -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)
|
||||
{
|
||||
|
||||
@@ -71,6 +71,8 @@ class ElfObject : public ObjectFile
|
||||
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"); }
|
||||
|
||||
@@ -89,6 +89,9 @@ class ObjectFile
|
||||
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; }
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user