diff -r 790fee3b44a8 -r a1b6bb4bac2f src/base/loader/symtab.hh --- a/src/base/loader/symtab.hh Fri May 27 14:56:22 2016 +0100 +++ b/src/base/loader/symtab.hh Fri May 27 14:56:24 2016 +0100 @@ -42,7 +42,7 @@ class SymbolTable { public: - typedef std::map ATable; + typedef std::multimap ATable; typedef std::map STable; private: diff -r 790fee3b44a8 -r a1b6bb4bac2f src/base/loader/symtab.cc --- a/src/base/loader/symtab.cc Fri May 27 14:56:22 2016 +0100 +++ b/src/base/loader/symtab.cc Fri May 27 14:56:24 2016 +0100 @@ -56,11 +56,12 @@ if (symbol.empty()) return false; - if (!addrTable.insert(make_pair(address, symbol)).second) + if (!symbolTable.insert(make_pair(symbol, address)).second) return false; - if (!symbolTable.insert(make_pair(symbol, address)).second) - return false; + // There can be multiple symbols for the same address, so always + // update the addrTable multimap when we see a new symbol name. + addrTable.insert(make_pair(address, symbol)); return true; }