diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/test/tools/llvm-readobj/many-sections2.s | 24 | ||||
| -rw-r--r-- | llvm/tools/llvm-readobj/ELFDumper.cpp | 7 |
2 files changed, 28 insertions, 3 deletions
diff --git a/llvm/test/tools/llvm-readobj/many-sections2.s b/llvm/test/tools/llvm-readobj/many-sections2.s new file mode 100644 index 00000000000..60c42faea39 --- /dev/null +++ b/llvm/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/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 2cf2496435b..addebf5c6d4 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -2961,9 +2961,10 @@ std::string GNUStyle<ELFT>::getSymbolSectionNdx(const ELFO *Obj, case ELF::SHN_COMMON: return "COM"; case ELF::SHN_XINDEX: - SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>( - Symbol, FirstSym, this->dumper()->getShndxTable())); - LLVM_FALLTHROUGH; + return to_string( + format_decimal(unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>( + Symbol, FirstSym, this->dumper()->getShndxTable())), + 3)); default: // Find if: // Processor specific |

