summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp6
-rw-r--r--llvm/tools/llvm-readobj/ELFDumper.cpp7
-rw-r--r--llvm/tools/obj2yaml/elf2yaml.cpp12
3 files changed, 20 insertions, 5 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 610d54877ea..33308234e7d 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -324,7 +324,11 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj,
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);
+ const Elf_Shdr *StrTabSec = EF.getSection(SymTab->sh_link);
+ ErrorOr<StringRef> StrTabOrErr = EF.getStringTable(StrTabSec);
+ if (std::error_code EC = StrTabOrErr.getError())
+ return EC;
+ StringRef StrTab = *StrTabOrErr;
uint8_t type;
StringRef res;
int64_t addend = 0;
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 76b71c517fd..b1ba0906f69 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -757,8 +757,11 @@ void ELFDumper<ELFT>::printRelocation(const Elf_Shdr *Sec,
TargetName = SecName.get();
} else if (Sym.first) {
const Elf_Shdr *SymTable = Sym.first;
- const Elf_Shdr *StrTable = Obj->getSection(SymTable->sh_link);
- TargetName = errorOrDefault(Obj->getSymbolName(StrTable, Sym.second));
+ const Elf_Shdr *StrTableSec = Obj->getSection(SymTable->sh_link);
+ ErrorOr<StringRef> StrTableOrErr = Obj->getStringTable(StrTableSec);
+ if (!error(StrTableOrErr.getError()))
+ TargetName =
+ errorOrDefault(Obj->getSymbolName(*StrTableOrErr, Sym.second));
}
if (opts::ExpandRelocs) {
diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp
index db29d2db390..73c83d897d9 100644
--- a/llvm/tools/obj2yaml/elf2yaml.cpp
+++ b/llvm/tools/obj2yaml/elf2yaml.cpp
@@ -183,7 +183,11 @@ std::error_code ELFDumper<ELFT>::dumpRelocation(const Elf_Shdr *Shdr,
return obj2yaml_error::success;
const Elf_Shdr *SymTab = NamePair.first;
- const Elf_Shdr *StrTab = Obj.getSection(SymTab->sh_link);
+ const Elf_Shdr *StrTabSec = Obj.getSection(SymTab->sh_link);
+ ErrorOr<StringRef> StrTabOrErr = Obj.getStringTable(StrTabSec);
+ if (std::error_code EC = StrTabOrErr.getError())
+ return EC;
+ StringRef StrTab = *StrTabOrErr;
ErrorOr<StringRef> NameOrErr = Obj.getSymbolName(StrTab, NamePair.second);
if (std::error_code EC = NameOrErr.getError())
@@ -302,7 +306,11 @@ ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) {
// Get sh_info which is the signature.
const Elf_Sym *symbol = Obj.getSymbol(Shdr->sh_info);
const Elf_Shdr *symtab = Obj.getSection(Shdr->sh_link);
- const Elf_Shdr *StrTab = Obj.getSection(symtab->sh_link);
+ const Elf_Shdr *StrTabSec = Obj.getSection(symtab->sh_link);
+ ErrorOr<StringRef> StrTabOrErr = Obj.getStringTable(StrTabSec);
+ if (std::error_code EC = StrTabOrErr.getError())
+ return EC;
+ StringRef StrTab = *StrTabOrErr;
auto sectionContents = Obj.getSectionContents(Shdr);
if (std::error_code ec = sectionContents.getError())
return ec;
OpenPOWER on IntegriCloud