diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-06-20 14:39:48 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2016-06-20 14:39:48 +0100 |
commit | 60fb5e79f358b7d0784e4cfae4df9ec196e47f19 (patch) | |
tree | 898306efa0d556951bb59001f50418836ed715c7 /src/base/loader/symtab.hh | |
parent | bb9033c26b6a84f4593c020a8078101e17a7b124 (diff) | |
download | gem5-60fb5e79f358b7d0784e4cfae4df9ec196e47f19.tar.xz |
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>
Diffstat (limited to 'src/base/loader/symtab.hh')
-rw-r--r-- | src/base/loader/symtab.hh | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/base/loader/symtab.hh b/src/base/loader/symtab.hh index 403cb13ac..bd0406b74 100644 --- a/src/base/loader/symtab.hh +++ b/src/base/loader/symtab.hh @@ -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; } |