diff options
author | Fangrui Song <maskray@google.com> | 2019-05-29 06:18:34 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-05-29 06:18:34 +0000 |
commit | ed6fa44f236c4cbdb4a63e0953e4801e5f10a55b (patch) | |
tree | 052573fcd977b4891f74fea659e1a573feb13981 /llvm/tools/llvm-readobj/ARMEHABIPrinter.h | |
parent | b3bcbb5b6608043645219e6b9f0af76f5c8d0890 (diff) | |
download | bcm5719-llvm-ed6fa44f236c4cbdb4a63e0953e4801e5f10a55b.tar.gz bcm5719-llvm-ed6fa44f236c4cbdb4a63e0953e4801e5f10a55b.zip |
[llvm-readobj] -u: don't crash when dumping SHT_ARM_EXIDX if .symtab doesn't exist
Reviewed By: kongyi
Differential Revision: https://reviews.llvm.org/D62567
llvm-svn: 361929
Diffstat (limited to 'llvm/tools/llvm-readobj/ARMEHABIPrinter.h')
-rw-r--r-- | llvm/tools/llvm-readobj/ARMEHABIPrinter.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h index f847041a6ae..11f9d6166a5 100644 --- a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h +++ b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h @@ -365,6 +365,8 @@ template <typename ET> ErrorOr<StringRef> PrinterContext<ET>::FunctionAtAddress(unsigned Section, uint64_t Address) const { + if (!Symtab) + return readobj_error::unknown_symbol; auto StrTableOrErr = ELF->getStringTableForSymtab(*Symtab); if (!StrTableOrErr) error(StrTableOrErr.takeError()); @@ -550,13 +552,15 @@ void PrinterContext<ET>::PrintIndexTable(unsigned SectionIndex, const Elf_Shdr *EHT = FindExceptionTable(SectionIndex, Entry * IndexTableEntrySize + 4); - if (auto Name = ELF->getSectionName(EHT)) - SW.printString("ExceptionHandlingTable", *Name); + if (EHT) + if (auto Name = ELF->getSectionName(EHT)) + SW.printString("ExceptionHandlingTable", *Name); uint64_t TableEntryOffset = PREL31(Word1, IT->sh_addr); SW.printHex("TableEntryOffset", TableEntryOffset); - PrintExceptionTable(IT, EHT, TableEntryOffset); + if (EHT) + PrintExceptionTable(IT, EHT, TableEntryOffset); } } } |