diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -530,10 +530,10 @@ // If the symbol name is empty use the section name. if ((*SymOrErr)->getType() == ELF::STT_SECTION) { - if (Expected SecOrErr = getSymbolSection(Sym)) { - consumeError(Name.takeError()); + if (Expected SecOrErr = getSymbolSection(Sym)) return (*SecOrErr)->getName(); - } + else + return SecOrErr.takeError(); } return Name; } diff --git a/llvm/test/tools/llvm-objdump/ELF/section-no-symbol-name.test b/llvm/test/tools/llvm-objdump/ELF/section-no-symbol-name.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-objdump/ELF/section-no-symbol-name.test @@ -0,0 +1,18 @@ +# RUN: yaml2obj %s -o %t.o +# RUN: not llvm-cm %t.o 2>&1 | FileCheck %s + +# CHECK: error: failed to get symbol name + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .foo + Type: SHT_PROGBITS +Symbols: + - Name: "" + Index: 0x43 ## Invalid section index + Type: STT_SECTION