summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-06-29 12:38:31 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-06-29 12:38:31 +0000
commit719dc7c4369f3e9eb38802d0d3f18dc365fc56cf (patch)
treebaad0c1b61800b2a3894743ec61d528e0a06d9c2 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent4a38b0b493643a5db66bd7c6eaf2a42f1a9f67bd (diff)
downloadbcm5719-llvm-719dc7c4369f3e9eb38802d0d3f18dc365fc56cf.tar.gz
bcm5719-llvm-719dc7c4369f3e9eb38802d0d3f18dc365fc56cf.zip
Remove Elf_Sym_Iter.
It was a fairly broken concept for an ELF only class. An ELF file can have two symbol tables, but they have exactly the same format. There is no concept of a dynamic or a static symbol. Storing this on the iterator also makes us do more work per symbol than necessary. To fetch a name we would: * Find if we had a static or a dynamic symbol. * Look at the corresponding symbol table and find the string table section. * Look at the string table section to fetch its contents. * Compute the name as a substring of the string table. All but the last step can be done per symbol table instead of per symbol. This is a step in that direction. llvm-svn: 240939
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 77c425d617e..610d54877ea 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -321,6 +321,10 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
const ELFFile<ELFT> &EF = *Obj->getELFFile();
const Elf_Shdr *sec = EF.getSection(Rel.d.a);
+ const Elf_Shdr *SymTab = EF.getSection(sec->sh_link);
+ assert(SymTab->sh_type == ELF::SHT_SYMTAB ||
+ SymTab->sh_type == ELF::SHT_DYNSYM);
+ const Elf_Shdr *StrTab = EF.getSection(SymTab->sh_link);
uint8_t type;
StringRef res;
int64_t addend = 0;
@@ -351,8 +355,7 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
return EC;
Target = *SecName;
} else {
- ErrorOr<StringRef> SymName =
- EF.getSymbolName(EF.getSection(sec->sh_link), symb);
+ ErrorOr<StringRef> SymName = EF.getSymbolName(StrTab, symb);
if (!SymName)
return SymName.getError();
Target = *SymName;
OpenPOWER on IntegriCloud