diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2013-11-11 20:51:48 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2013-11-11 20:51:48 +0000 |
commit | fe9ce427d076627beed834d5c322e61323dfd1fc (patch) | |
tree | dd38939ddb8628d8118dee27921baa95eb3b3435 | |
parent | 2531651206a2d12d37ad93a6f9bc9f8762105b4e (diff) | |
download | external_llvm-fe9ce427d076627beed834d5c322e61323dfd1fc.zip external_llvm-fe9ce427d076627beed834d5c322e61323dfd1fc.tar.gz external_llvm-fe9ce427d076627beed834d5c322e61323dfd1fc.tar.bz2 |
Add support for DT_VERxxx and DT_MIPS_xxx .dynamic section entries to the
llvm-readobj.
The patch reviewed by Michael Spencer.
http://llvm-reviews.chandlerc.com/D2113
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194421 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/tools/llvm-readobj/Inputs/dynamic-table.c | 7 | ||||
-rw-r--r-- | test/tools/llvm-readobj/Inputs/dynamic-table.mips | bin | 0 -> 5395 bytes | |||
-rw-r--r-- | test/tools/llvm-readobj/dynamic.test | 33 | ||||
-rw-r--r-- | tools/llvm-readobj/ELFDumper.cpp | 22 |
4 files changed, 62 insertions, 0 deletions
diff --git a/test/tools/llvm-readobj/Inputs/dynamic-table.c b/test/tools/llvm-readobj/Inputs/dynamic-table.c new file mode 100644 index 0000000..6d36e8a --- /dev/null +++ b/test/tools/llvm-readobj/Inputs/dynamic-table.c @@ -0,0 +1,7 @@ +// clang -target mipsel-linux-gnu -shared -fPIC -lc dynamic-table.c \ +// -o dynamic-table.mips +int puts(const char *); + +void foo(void) { + puts("Hello, World"); +} diff --git a/test/tools/llvm-readobj/Inputs/dynamic-table.mips b/test/tools/llvm-readobj/Inputs/dynamic-table.mips Binary files differnew file mode 100644 index 0000000..ab36cee --- /dev/null +++ b/test/tools/llvm-readobj/Inputs/dynamic-table.mips diff --git a/test/tools/llvm-readobj/dynamic.test b/test/tools/llvm-readobj/dynamic.test new file mode 100644 index 0000000..78a9b3b --- /dev/null +++ b/test/tools/llvm-readobj/dynamic.test @@ -0,0 +1,33 @@ +RUN: llvm-readobj -dynamic-table %p/Inputs/dynamic-table.mips \ +RUN: | FileCheck %s -check-prefix ELF-MIPS + +ELF-MIPS: Format: ELF32-mips +ELF-MIPS: Arch: mipsel +ELF-MIPS: AddressSize: 32bit +ELF-MIPS: LoadName: +ELF-MIPS: DynamicSection [ (23 entries) +ELF-MIPS: Tag Type Name/Value +ELF-MIPS: 0x00000001 NEEDED SharedLibrary (libc.so.6) +ELF-MIPS: 0x0000000C INIT 0x528 +ELF-MIPS: 0x0000000D FINI 0x860 +ELF-MIPS: 0x00000004 HASH 0x210 +ELF-MIPS: 0x00000005 STRTAB 0x3D8 +ELF-MIPS: 0x00000006 SYMTAB 0x2A8 +ELF-MIPS: 0x0000000A STRSZ 231 (bytes) +ELF-MIPS: 0x0000000B SYMENT 16 (bytes) +ELF-MIPS: 0x00000003 PLTGOT 0x108E0 +ELF-MIPS: 0x00000011 REL 0x518 +ELF-MIPS: 0x00000012 RELSZ 16 (bytes) +ELF-MIPS: 0x00000013 RELENT 8 (bytes) +ELF-MIPS: 0x70000001 MIPS_RLD_VERSION 1 +ELF-MIPS: 0x70000005 MIPS_FLAGS 0x2 +ELF-MIPS: 0x70000006 MIPS_BASE_ADDRESS 0x0 +ELF-MIPS: 0x7000000A MIPS_LOCAL_GOTNO 10 +ELF-MIPS: 0x70000011 MIPS_SYMTABNO 19 +ELF-MIPS: 0x70000012 MIPS_UNREFEXTNO 26 +ELF-MIPS: 0x70000013 MIPS_GOTSYM 0xD +ELF-MIPS: 0x6FFFFFFE VERNEED 0x4E8 +ELF-MIPS: 0x6FFFFFFF VERNEEDNUM 1 +ELF-MIPS: 0x6FFFFFF0 VERSYM 0x4C0 +ELF-MIPS: 0x00000000 NULL 0x0 +ELF-MIPS: ] diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index f384824..07a9083 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -683,6 +683,16 @@ static const char *getTypeString(uint64_t Type) { LLVM_READOBJ_TYPE_CASE(SYMENT); LLVM_READOBJ_TYPE_CASE(SYMTAB); LLVM_READOBJ_TYPE_CASE(TEXTREL); + LLVM_READOBJ_TYPE_CASE(VERNEED); + LLVM_READOBJ_TYPE_CASE(VERNEEDNUM); + LLVM_READOBJ_TYPE_CASE(VERSYM); + LLVM_READOBJ_TYPE_CASE(MIPS_RLD_VERSION); + LLVM_READOBJ_TYPE_CASE(MIPS_FLAGS); + LLVM_READOBJ_TYPE_CASE(MIPS_BASE_ADDRESS); + LLVM_READOBJ_TYPE_CASE(MIPS_LOCAL_GOTNO); + LLVM_READOBJ_TYPE_CASE(MIPS_SYMTABNO); + LLVM_READOBJ_TYPE_CASE(MIPS_UNREFEXTNO); + LLVM_READOBJ_TYPE_CASE(MIPS_GOTSYM); default: return "unknown"; } } @@ -715,9 +725,21 @@ static void printValue(const ELFFile<ELFT> *O, uint64_t Type, uint64_t Value, case DT_FINI_ARRAY: case DT_PREINIT_ARRAY: case DT_DEBUG: + case DT_VERNEED: + case DT_VERSYM: case DT_NULL: + case DT_MIPS_FLAGS: + case DT_MIPS_BASE_ADDRESS: + case DT_MIPS_GOTSYM: OS << format("0x%" PRIX64, Value); break; + case DT_VERNEEDNUM: + case DT_MIPS_RLD_VERSION: + case DT_MIPS_LOCAL_GOTNO: + case DT_MIPS_SYMTABNO: + case DT_MIPS_UNREFEXTNO: + OS << Value; + break; case DT_PLTRELSZ: case DT_RELASZ: case DT_RELAENT: |