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 00000000000..6d36e8a7118 --- /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 new file mode 100644 index 00000000000..ab36ceeb5a0 Binary files /dev/null and b/test/tools/llvm-readobj/Inputs/dynamic-table.mips differ diff --git a/test/tools/llvm-readobj/dynamic.test b/test/tools/llvm-readobj/dynamic.test new file mode 100644 index 00000000000..78a9b3bd937 --- /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 f384824d5ed..07a9083f3c8 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 *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: