From: Eugene Leviant Date: Mon, 15 Apr 2019 11:21:47 +0000 (+0000) Subject: [llvm-readelf] Correctly dump symbols whose section id is SHN_XINDEX X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6085833aa63befeaa40d3deb2bb5d53e85ffea80;p=llvm [llvm-readelf] Correctly dump symbols whose section id is SHN_XINDEX Differential revision: https://reviews.llvm.org/D60614 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358396 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/llvm-readobj/many-sections2.s b/test/tools/llvm-readobj/many-sections2.s new file mode 100644 index 00000000000..60c42faea39 --- /dev/null +++ b/test/tools/llvm-readobj/many-sections2.s @@ -0,0 +1,24 @@ +# Tests that symbols whose section index is SHN_XINDEX are displayed +# correctly. They should not be treated as processor/OS specific or +# reserved. +# REQUIRES: x86-registered-target +# RUN: llvm-mc %s -filetype=obj -triple=x86_64-pc-linux -o %t +# RUN: llvm-readelf -s %t | FileCheck %s + +.irp i, 0, 1, 2, 3, 4, 5, 6, + .irp j, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + .irp k, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + .irp l, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + .irp q, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + .section sec_\i\j\k\l\q + .globl sym_\i\j\k\l\q + sym_\i\j\k\l\q: + .endr + .endr + .endr + .endr +.endr + +# CHECK: 65278: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 65280 sym_65277 +# CHECK: 65310: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 65312 sym_65309 +# CHECK: 65342: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 65344 sym_65341 diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 2cf2496435b..addebf5c6d4 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -2961,9 +2961,10 @@ std::string GNUStyle::getSymbolSectionNdx(const ELFO *Obj, case ELF::SHN_COMMON: return "COM"; case ELF::SHN_XINDEX: - SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex( - Symbol, FirstSym, this->dumper()->getShndxTable())); - LLVM_FALLTHROUGH; + return to_string( + format_decimal(unwrapOrError(object::getExtendedSymbolTableIndex( + Symbol, FirstSym, this->dumper()->getShndxTable())), + 3)); default: // Find if: // Processor specific