diff --git a/llvm/test/tools/llvm-objdump/ELF/AArch64/plt.test b/llvm/test/tools/llvm-objdump/ELF/AArch64/plt.test --- a/llvm/test/tools/llvm-objdump/ELF/AArch64/plt.test +++ b/llvm/test/tools/llvm-objdump/ELF/AArch64/plt.test @@ -18,6 +18,12 @@ # CHECK-BTI-NEXT: bti c # CHECK-BTI-NEXT: adrp x16, {{.*}} +# RUN: yaml2obj -D SYM=0 %s -o %t.warn +# RUN: llvm-objdump -d %t.warn 2>&1 | FileCheck %s --check-prefix=INVALID -DFILE=%t.warn + +# INVALID: warning: '[[FILE]]': PLT entry at 0x210030 references an invalid symbol +# INVALID: Disassembly of section .text: + --- !ELF FileHeader: Class: ELFCLASS64 @@ -32,7 +38,7 @@ Info: .got.plt Relocations: - Offset: 0x0000000000230018 - Symbol: f1 + Symbol: [[SYM=f1]] Type: R_AARCH64_JUMP_SLOT - Offset: 0x0000000000230020 Symbol: f2 diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1396,11 +1396,17 @@ for (auto PltEntry : ElfObj->getPltAddresses()) { SymbolRef Symbol(PltEntry.first, ElfObj); uint8_t SymbolType = getElfSymbolType(Obj, Symbol); - - StringRef Name = unwrapOrError(Symbol.getName(), Obj->getFileName()); - if (!Name.empty()) - AllSymbols[*Plt].emplace_back( - PltEntry.second, Saver.save((Name + "@plt").str()), SymbolType); + if (Expected NameOrErr = Symbol.getName()) { + if (!NameOrErr->empty()) + AllSymbols[*Plt].emplace_back(PltEntry.second, + Saver.save((*NameOrErr + "@plt").str()), + SymbolType); + } else { + consumeError(NameOrErr.takeError()); + reportWarning("PLT entry at 0x" + Twine::utohexstr(PltEntry.second) + + " references an invalid symbol", + Obj->getFileName()); + } } } }