From 9de1c5fcb4a4009ab83dd8e649da478634ec0de2 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Sun, 5 Jan 2014 13:40:27 +0000 Subject: [PATCH] [Mips] Add support for DT_MIPS_RLD_MAP and DT_MIPS_PLTGOT dynamic section tags to the llvm-readobj. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198561 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Inputs/dynamic-table-exe.mips | Bin 0 -> 6333 bytes .../tools/llvm-readobj/Inputs/dynamic-table.c | 4 +- test/tools/llvm-readobj/dynamic.test | 38 ++++++++++++++++++ tools/llvm-readobj/ELFDumper.cpp | 4 ++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100755 test/tools/llvm-readobj/Inputs/dynamic-table-exe.mips diff --git a/test/tools/llvm-readobj/Inputs/dynamic-table-exe.mips b/test/tools/llvm-readobj/Inputs/dynamic-table-exe.mips new file mode 100755 index 0000000000000000000000000000000000000000..28d8e33752c59b4067a16a43a1ef36f0f707833f GIT binary patch literal 6333 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 literal 0 HcmV?d00001 diff --git a/test/tools/llvm-readobj/Inputs/dynamic-table.c b/test/tools/llvm-readobj/Inputs/dynamic-table.c index cf815431340..6b01ba5388b 100644 --- a/test/tools/llvm-readobj/Inputs/dynamic-table.c +++ b/test/tools/llvm-readobj/Inputs/dynamic-table.c @@ -1,7 +1,9 @@ // clang -target mipsel-linux-gnu -shared -fPIC -lc dynamic-table.c \ // -o dynamic-table-so.mips +// clang -target mipsel-linux-gnu -lc dynamic-table.c \ +// -o dynamic-table-exe.mips int puts(const char *); -void foo(void) { +int main(void) { puts("Hello, World"); } diff --git a/test/tools/llvm-readobj/dynamic.test b/test/tools/llvm-readobj/dynamic.test index 56ed6cee24b..6a5fe95dff9 100644 --- a/test/tools/llvm-readobj/dynamic.test +++ b/test/tools/llvm-readobj/dynamic.test @@ -32,3 +32,41 @@ ELF-MIPS: 0x6FFFFFFF VERNEEDNUM 1 ELF-MIPS: 0x6FFFFFF0 VERSYM 0x4C0 ELF-MIPS: 0x00000000 NULL 0x0 ELF-MIPS: ] + +// Check dynamic section tags in case of non-pic executable file. +RUN: llvm-readobj -dynamic-table %p/Inputs/dynamic-table-exe.mips \ +RUN: | FileCheck %s -check-prefix ELF-MIPS-EXE + +ELF-MIPS-EXE: Format: ELF32-mips +ELF-MIPS-EXE: Arch: mipsel +ELF-MIPS-EXE: AddressSize: 32bit +ELF-MIPS-EXE: LoadName: +ELF-MIPS-EXE: DynamicSection [ (26 entries) +ELF-MIPS-EXE: Tag Type Name/Value +ELF-MIPS-EXE: 0x00000001 NEEDED SharedLibrary (libc.so.6) +ELF-MIPS-EXE: 0x0000000C INIT 0x400418 +ELF-MIPS-EXE: 0x0000000D FINI 0x4007B0 +ELF-MIPS-EXE: 0x00000004 HASH 0x4002B8 +ELF-MIPS-EXE: 0x00000005 STRTAB 0x40036C +ELF-MIPS-EXE: 0x00000006 SYMTAB 0x4002EC +ELF-MIPS-EXE: 0x0000000A STRSZ 107 (bytes) +ELF-MIPS-EXE: 0x0000000B SYMENT 16 (bytes) +ELF-MIPS-EXE: 0x70000016 MIPS_RLD_MAP 0x410880 +ELF-MIPS-EXE: 0x00000015 DEBUG 0x0 +ELF-MIPS-EXE: 0x00000003 PLTGOT 0x410890 +ELF-MIPS-EXE: 0x70000001 MIPS_RLD_VERSION 1 +ELF-MIPS-EXE: 0x70000005 MIPS_FLAGS 0x2 +ELF-MIPS-EXE: 0x70000006 MIPS_BASE_ADDRESS 0x400000 +ELF-MIPS-EXE: 0x7000000A MIPS_LOCAL_GOTNO 5 +ELF-MIPS-EXE: 0x70000011 MIPS_SYMTABNO 8 +ELF-MIPS-EXE: 0x70000012 MIPS_UNREFEXTNO 32 +ELF-MIPS-EXE: 0x70000013 MIPS_GOTSYM 0x7 +ELF-MIPS-EXE: 0x00000014 PLTREL REL +ELF-MIPS-EXE: 0x00000017 JMPREL 0x400408 +ELF-MIPS-EXE: 0x00000002 PLTRELSZ 16 (bytes) +ELF-MIPS-EXE: 0x70000032 MIPS_PLTGOT 0x410854 +ELF-MIPS-EXE: 0x6FFFFFFE VERNEED 0x4003E8 +ELF-MIPS-EXE: 0x6FFFFFFF VERNEEDNUM 1 +ELF-MIPS-EXE: 0x6FFFFFF0 VERSYM 0x4003D8 +ELF-MIPS-EXE: 0x00000000 NULL 0x0 +ELF-MIPS-EXE: ] diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 07a9083f3c8..0e0c0e08c09 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -693,6 +693,8 @@ static const char *getTypeString(uint64_t Type) { LLVM_READOBJ_TYPE_CASE(MIPS_SYMTABNO); LLVM_READOBJ_TYPE_CASE(MIPS_UNREFEXTNO); LLVM_READOBJ_TYPE_CASE(MIPS_GOTSYM); + LLVM_READOBJ_TYPE_CASE(MIPS_RLD_MAP); + LLVM_READOBJ_TYPE_CASE(MIPS_PLTGOT); default: return "unknown"; } } @@ -731,6 +733,8 @@ static void printValue(const ELFFile *O, uint64_t Type, uint64_t Value, case DT_MIPS_FLAGS: case DT_MIPS_BASE_ADDRESS: case DT_MIPS_GOTSYM: + case DT_MIPS_RLD_MAP: + case DT_MIPS_PLTGOT: OS << format("0x%" PRIX64, Value); break; case DT_VERNEEDNUM: -- 2.34.1