base: Fix multiple names to one address bug in SymbolTable
The SymbolTable class currently assumes that at most one symbol can point to a given address. If multiple symbols point to the same address, only the first one gets added to the internal symbol table since there is already a match in the address table. This changeset converts the address table from a map into a multimap to be able to handle cases where an address maps to multiple symbols. Additionally, the insert method is changed to not fail if there is a match in the address table. Change-Id: I6b4f1d5560c21e49a4af33220efb2a8302961768 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Andreas Hansson <andreas.hansson@arm.com> Reviewed-by: Gabor Dozsa <gabor.dozsa@arm.com>
This commit is contained in:
parent
bb9033c26b
commit
60fb5e79f3
2 changed files with 7 additions and 4 deletions
|
@ -56,12 +56,13 @@ SymbolTable::insert(Addr address, string symbol)
|
|||
if (symbol.empty())
|
||||
return false;
|
||||
|
||||
if (!addrTable.insert(make_pair(address, symbol)).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;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
class SymbolTable
|
||||
{
|
||||
public:
|
||||
typedef std::map<Addr, std::string> ATable;
|
||||
typedef std::multimap<Addr, std::string> ATable;
|
||||
typedef std::map<std::string, Addr> STable;
|
||||
|
||||
private:
|
||||
|
@ -87,6 +87,8 @@ class SymbolTable
|
|||
if (i == addrTable.end())
|
||||
return false;
|
||||
|
||||
// There are potentially multiple symbols that map to the same
|
||||
// address. For simplicity, just return the first one.
|
||||
symbol = (*i).second;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue