summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2019-09-02 14:57:35 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2019-09-02 14:57:35 +0000
commit78e8011a29d8c38af35da8e74c9d9ceaf2b0d1dd (patch)
tree9d1e32ccb2781ac18f963b786fdb95b0312b3060
parent4e54cf3e0e71b38b2fde1a815e8460b14026762a (diff)
downloadbcm5719-llvm-78e8011a29d8c38af35da8e74c9d9ceaf2b0d1dd.tar.gz
bcm5719-llvm-78e8011a29d8c38af35da8e74c9d9ceaf2b0d1dd.zip
Recommit r370661 "[llvm-nm] - Add a test case for case when we dump a symbol that belongs to a section with a broken sh_name."
Fix: add a 'consumeError()' call to ObjectFile.cpp. This error was never checked. Original commit message: It adds a test case for a problem fixed by D66976 <https://reviews.llvm.org/D66976>. It was introduced by me in D66089 <https://reviews.llvm.org/D66089>. The error reported was never consumed because of a wrong variable name used, so it could fail when LLVM_ENABLE_ABI_BREAKING_CHECKS is used. Differential revision: https://reviews.llvm.org/D67002 llvm-svn: 370669
-rw-r--r--llvm/lib/Object/ObjectFile.cpp4
-rw-r--r--llvm/test/tools/llvm-nm/format-sysv-section.test30
2 files changed, 30 insertions, 4 deletions
diff --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp
index 79812e3a10b..bcc44cd6ce3 100644
--- a/llvm/lib/Object/ObjectFile.cpp
+++ b/llvm/lib/Object/ObjectFile.cpp
@@ -67,8 +67,10 @@ Error ObjectFile::printSymbolName(raw_ostream &OS, DataRefImpl Symb) const {
uint32_t ObjectFile::getSymbolAlignment(DataRefImpl DRI) const { return 0; }
bool ObjectFile::isSectionBitcode(DataRefImpl Sec) const {
- if (Expected<StringRef> NameOrErr = getSectionName(Sec))
+ Expected<StringRef> NameOrErr = getSectionName(Sec);
+ if (NameOrErr)
return *NameOrErr == ".llvmbc";
+ consumeError(NameOrErr.takeError());
return false;
}
diff --git a/llvm/test/tools/llvm-nm/format-sysv-section.test b/llvm/test/tools/llvm-nm/format-sysv-section.test
index 1ebfa93d141..67ed1a8f7db 100644
--- a/llvm/test/tools/llvm-nm/format-sysv-section.test
+++ b/llvm/test/tools/llvm-nm/format-sysv-section.test
@@ -1,7 +1,7 @@
-# RUN: yaml2obj %s > %t.o
-# RUN: llvm-nm %t.o --format=sysv | FileCheck %s
+# RUN: yaml2obj --docnum=1 %s > %t1.o
+# RUN: llvm-nm %t1.o --format=sysv | FileCheck %s
-!ELF
+--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
@@ -33,3 +33,27 @@ Symbols:
# CHECK-NEXT: symbol_absolute {{.*}}| |*ABS*
# CHECK-NEXT: symbol_common {{.*}}| |*COM*
# CHECK-NEXT: symbol_undefined {{.*}}| |*UND*
+
+## Here we have a symbol that belongs to a section with a broken name
+## (sh_name offset goes past the end of the sections name string table).
+## We test that we can still print a reasonable output and don't crash/assert.
+
+# RUN: yaml2obj --docnum=2 %s > %t2.o
+# RUN: llvm-nm %t2.o --format=sysv | FileCheck %s --check-prefix=ERR
+
+# ERR: foo |0000000000000000| ? | NOTYPE|0000000000000000| |
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .broken
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ ShName: 0xffff
+Symbols:
+ - Name: foo
+ Section: .broken
OpenPOWER on IntegriCloud