From ed6fa44f236c4cbdb4a63e0953e4801e5f10a55b Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 29 May 2019 06:18:34 +0000 Subject: [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 --- llvm/tools/llvm-readobj/ARMEHABIPrinter.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'llvm/tools/llvm-readobj/ARMEHABIPrinter.h') 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 ErrorOr PrinterContext::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::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); } } } -- cgit v1.2.3