From ad720cfde49de50a7d9c721ce4d12a1e13208fdc Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Sat, 5 Jul 2014 19:28:49 +0000 Subject: [PATCH] [llvm-readobj] Fix output of MIPS GOT without local and global entries. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212374 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm-readobj/Inputs/got-empty.exe.mipsel | Bin 0 -> 9400 bytes test/tools/llvm-readobj/mips-got.test | 25 ++++++++++++++++++ tools/llvm-readobj/ELFDumper.cpp | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100755 test/tools/llvm-readobj/Inputs/got-empty.exe.mipsel diff --git a/test/tools/llvm-readobj/Inputs/got-empty.exe.mipsel b/test/tools/llvm-readobj/Inputs/got-empty.exe.mipsel new file mode 100755 index 0000000000000000000000000000000000000000..b57874557c8795bb79faf8d44399d9d538ac3b9e GIT binary patch literal 9400 zcmeHNJ#Q015FN*agpddmA_yoF2c$>=mk&aVF2M5@jmHkD#E0e*nKAytn6d%qayO&5ZOiGdr_0doSy1=gmfKvs5aHlMxvgdLK)H ztU`ajDKc7-WK}#FlLeWQ2|0^(##V(nf&73?i~{388JIzl8Pp)A;1g#6)+TZZpaOY3 zA{N{)m3|yrDuD%S66`yOd$7I0!luG?ag>uIG&w?V;vIZ~{TUkrSm(6*%vo&5jm37; z&-VOfrk4BQ-jlO4a=N%2*1C*t)J~>pR9B?BET)~^x$B!&W_;60(2b#SeA6NtO;Wo; z2O_ikjN%($&+X^mGLLT~X9k+zUWJ~3z6zWN_=(p5%3QAGBJ=_Bcn-!d0pu2~61GFV zgx`sJ3I8{!XMOBT%2-Ff)wIb!_gFsZt0)7?fHI&ACv+L#J^Yb%u~{amhv3jg)mOqW>9FbkjGzON1@fwlFfNo+ge|%gLaqPGW&M_Sn!*f#G^zZ{Yr8 I&55h`2fOU*e*gdg literal 0 HcmV?d00001 diff --git a/test/tools/llvm-readobj/mips-got.test b/test/tools/llvm-readobj/mips-got.test index 76db3c845eb..20215871ef0 100644 --- a/test/tools/llvm-readobj/mips-got.test +++ b/test/tools/llvm-readobj/mips-got.test @@ -6,6 +6,8 @@ RUN: llvm-readobj -mips-plt-got %p/Inputs/dynamic-table-so.mips | \ RUN: FileCheck %s -check-prefix GOT-SO RUN: llvm-readobj -mips-plt-got %p/Inputs/got-tls.so.elf-mips64el | \ RUN: FileCheck %s -check-prefix GOT-TLS +RUN: llvm-readobj -mips-plt-got %p/Inputs/got-empty.exe.mipsel | \ +RUN: FileCheck %s -check-prefix GOT-EMPTY GOT-OBJ: Cannot find PLTGOT dynamic table tag. @@ -304,3 +306,26 @@ GOT-TLS-NEXT: } GOT-TLS-NEXT: ] GOT-TLS-NEXT: Number of TLS and multi-GOT entries: 4 GOT-TLS-NEXT: } + +GOT-EMPTY: Primary GOT { +GOT-EMPTY-NEXT: Canonical gp value: 0x409FF0 +GOT-EMPTY-NEXT: Reserved entries [ +GOT-EMPTY-NEXT: Entry { +GOT-EMPTY-NEXT: Address: 0x402000 +GOT-EMPTY-NEXT: Access: -32752 +GOT-EMPTY-NEXT: Initial: 0x0 +GOT-EMPTY-NEXT: Purpose: Lazy resolver +GOT-EMPTY-NEXT: } +GOT-EMPTY-NEXT: Entry { +GOT-EMPTY-NEXT: Address: 0x402004 +GOT-EMPTY-NEXT: Access: -32748 +GOT-EMPTY-NEXT: Initial: 0x80000000 +GOT-EMPTY-NEXT: Purpose: Module pointer (GNU extension) +GOT-EMPTY-NEXT: } +GOT-EMPTY-NEXT: ] +GOT-EMPTY-NEXT: Local entries [ +GOT-EMPTY-NEXT: ] +GOT-EMPTY-NEXT: Global entries [ +GOT-EMPTY-NEXT: ] +GOT-EMPTY-NEXT: Number of TLS and multi-GOT entries: 2 +GOT-EMPTY-NEXT: } diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 502c7197ddb..5df51e250d2 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -1087,7 +1087,7 @@ void MipsGOTParser::parseGOT(const Elf_Shdr &GOTShdr) { Elf_Sym_Iter DynSymEnd = Obj->end_dynamic_symbols(); std::size_t DynSymTotal = std::size_t(std::distance(DynSymBegin, DynSymEnd)); - if (DtGotSym + 1 > DynSymTotal) { + if (DtGotSym > DynSymTotal) { W.startLine() << "MIPS_GOTSYM exceeds a number of dynamic symbols.\n"; return; }