Index: llvm/lib/Object/ELF.cpp =================================================================== --- llvm/lib/Object/ELF.cpp +++ llvm/lib/Object/ELF.cpp @@ -477,7 +477,7 @@ #define PPC64_DYNAMIC_TAG(name, value) // Also ignore marker tags such as DT_HIOS (maps to DT_VERNEEDNUM), etc. #define DYNAMIC_TAG_MARKER(name, value) -#define DYNAMIC_TAG(name, value) DYNAMIC_STRINGIFY_ENUM(name, value) +#define DYNAMIC_TAG(name, value) case value: return #name; #include "llvm/BinaryFormat/DynamicTags.def" #undef DYNAMIC_TAG #undef AARCH64_DYNAMIC_TAG Index: llvm/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test =================================================================== --- llvm/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test +++ llvm/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test @@ -37,56 +37,54 @@ ## Case 2: Test that MIPS machine-specific tags can be dumped. # RUN: yaml2obj --docnum=2 -o %t.mips %s -# RUN: llvm-objdump -p %t.mips | FileCheck %s --check-prefix=MIPS +# RUN: llvm-objdump -p %t.mips | FileCheck %s --check-prefix=MIPS --strict-whitespace --match-full-lines -# MIPS: Dynamic Section: -# MIPS-NEXT: MIPS_RLD_VERSION 0x0000000012345678 -# MIPS-NEXT: MIPS_TIME_STAMP 0x0000000011223344 -# MIPS-NEXT: MIPS_ICHECKSUM 0x0000000011112222 -# MIPS-NEXT: MIPS_IVERSION 0x0000000000000001 -# MIPS-NEXT: MIPS_FLAGS 0x0000000011111111 -# MIPS-NEXT: MIPS_BASE_ADDRESS 0x0000000087654321 -# MIPS-NEXT: MIPS_MSYM 0x0000000000001000 -# MIPS-NEXT: MIPS_CONFLICT 0x0000000000001000 -# MIPS-NEXT: MIPS_LIBLIST 0x0000000000001000 -# MIPS-NEXT: MIPS_LOCAL_GOTNO 0x0000000000000001 -# MIPS-NEXT: MIPS_CONFLICTNO 0x0000000000000001 -# MIPS-NEXT: MIPS_LIBLISTNO 0x0000000000000001 -# MIPS-NEXT: MIPS_SYMTABNO 0x0000000000000001 -# MIPS-NEXT: MIPS_UNREFEXTNO 0x0000000000000000 -# MIPS-NEXT: MIPS_GOTSYM 0x0000000000000000 -# MIPS-NEXT: MIPS_HIPAGENO 0x0000000088776655 -# MIPS-NEXT: MIPS_RLD_MAP 0x0000000000001000 -# MIPS-NEXT: MIPS_DELTA_CLASS 0x0000000000001000 -# MIPS-NEXT: MIPS_DELTA_CLASS_NO 0x0000000000000001 -# MIPS-NEXT: MIPS_DELTA_INSTANCE 0x0000000000001000 -## FIXME: llvm-objdump does not print spaces after MIPS_DELTA_INSTANCE_NO, MIPS_PROTECTED_GOTIDX -## and other long tags. The output looks broken because of that. -# MIPS-NEXT: MIPS_DELTA_INSTANCE_NO0x0000000000000001 -# MIPS-NEXT: MIPS_DELTA_RELOC 0x0000000000001000 -# MIPS-NEXT: MIPS_DELTA_RELOC_NO 0x0000000000000001 -# MIPS-NEXT: MIPS_DELTA_SYM 0x0000000000001000 -# MIPS-NEXT: MIPS_DELTA_SYM_NO 0x0000000000000001 -# MIPS-NEXT: MIPS_DELTA_CLASSSYM 0x0000000000001000 -# MIPS-NEXT: MIPS_DELTA_CLASSSYM_NO0x0000000000000001 -# MIPS-NEXT: MIPS_CXX_FLAGS 0x0000000088887777 -# MIPS-NEXT: MIPS_PIXIE_INIT 0x0000000000001000 -# MIPS-NEXT: MIPS_LOCALPAGE_GOTIDX0x0000000000000001 -# MIPS-NEXT: MIPS_LOCAL_GOTIDX 0x0000000000000001 -# MIPS-NEXT: MIPS_HIDDEN_GOTIDX 0x0000000000000001 -# MIPS-NEXT: MIPS_PROTECTED_GOTIDX0x0000000000000001 -# MIPS-NEXT: MIPS_OPTIONS 0x0000000000001000 -# MIPS-NEXT: MIPS_INTERFACE 0x0000000000001000 -# MIPS-NEXT: MIPS_DYNSTR_ALIGN 0x0000000088888888 -# MIPS-NEXT: MIPS_INTERFACE_SIZE 0x0000000000000010 -# MIPS-NEXT: MIPS_RLD_TEXT_RESOLVE_ADDR0x0000000000000008 -# MIPS-NEXT: MIPS_PERF_SUFFIX 0x0000000000000000 -# MIPS-NEXT: MIPS_COMPACT_SIZE 0x0000000000000010 -# MIPS-NEXT: MIPS_GP_VALUE 0x0000000000000001 -# MIPS-NEXT: MIPS_AUX_DYNAMIC 0x0000000000001000 -# MIPS-NEXT: MIPS_PLTGOT 0x0000000000001000 -# MIPS-NEXT: MIPS_RWPLT 0x0000000000001000 -# MIPS-NEXT: MIPS_RLD_MAP_REL 0x0000000000001000 +# MIPS:Dynamic Section: +# MIPS-NEXT: MIPS_RLD_VERSION 0x0000000012345678 +# MIPS-NEXT: MIPS_TIME_STAMP 0x0000000011223344 +# MIPS-NEXT: MIPS_ICHECKSUM 0x0000000011112222 +# MIPS-NEXT: MIPS_IVERSION 0x0000000000000001 +# MIPS-NEXT: MIPS_FLAGS 0x0000000011111111 +# MIPS-NEXT: MIPS_BASE_ADDRESS 0x0000000087654321 +# MIPS-NEXT: MIPS_MSYM 0x0000000000001000 +# MIPS-NEXT: MIPS_CONFLICT 0x0000000000001000 +# MIPS-NEXT: MIPS_LIBLIST 0x0000000000001000 +# MIPS-NEXT: MIPS_LOCAL_GOTNO 0x0000000000000001 +# MIPS-NEXT: MIPS_CONFLICTNO 0x0000000000000001 +# MIPS-NEXT: MIPS_LIBLISTNO 0x0000000000000001 +# MIPS-NEXT: MIPS_SYMTABNO 0x0000000000000001 +# MIPS-NEXT: MIPS_UNREFEXTNO 0x0000000000000000 +# MIPS-NEXT: MIPS_GOTSYM 0x0000000000000000 +# MIPS-NEXT: MIPS_HIPAGENO 0x0000000088776655 +# MIPS-NEXT: MIPS_RLD_MAP 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_CLASS 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_CLASS_NO 0x0000000000000001 +# MIPS-NEXT: MIPS_DELTA_INSTANCE 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_INSTANCE_NO 0x0000000000000001 +# MIPS-NEXT: MIPS_DELTA_RELOC 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_RELOC_NO 0x0000000000000001 +# MIPS-NEXT: MIPS_DELTA_SYM 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_SYM_NO 0x0000000000000001 +# MIPS-NEXT: MIPS_DELTA_CLASSSYM 0x0000000000001000 +# MIPS-NEXT: MIPS_DELTA_CLASSSYM_NO 0x0000000000000001 +# MIPS-NEXT: MIPS_CXX_FLAGS 0x0000000088887777 +# MIPS-NEXT: MIPS_PIXIE_INIT 0x0000000000001000 +# MIPS-NEXT: MIPS_LOCALPAGE_GOTIDX 0x0000000000000001 +# MIPS-NEXT: MIPS_LOCAL_GOTIDX 0x0000000000000001 +# MIPS-NEXT: MIPS_HIDDEN_GOTIDX 0x0000000000000001 +# MIPS-NEXT: MIPS_PROTECTED_GOTIDX 0x0000000000000001 +# MIPS-NEXT: MIPS_OPTIONS 0x0000000000001000 +# MIPS-NEXT: MIPS_INTERFACE 0x0000000000001000 +# MIPS-NEXT: MIPS_DYNSTR_ALIGN 0x0000000088888888 +# MIPS-NEXT: MIPS_INTERFACE_SIZE 0x0000000000000010 +# MIPS-NEXT: MIPS_RLD_TEXT_RESOLVE_ADDR 0x0000000000000008 +# MIPS-NEXT: MIPS_PERF_SUFFIX 0x0000000000000000 +# MIPS-NEXT: MIPS_COMPACT_SIZE 0x0000000000000010 +# MIPS-NEXT: MIPS_GP_VALUE 0x0000000000000001 +# MIPS-NEXT: MIPS_AUX_DYNAMIC 0x0000000000001000 +# MIPS-NEXT: MIPS_PLTGOT 0x0000000000001000 +# MIPS-NEXT: MIPS_RWPLT 0x0000000000001000 +# MIPS-NEXT: MIPS_RLD_MAP_REL 0x0000000000001000 --- !ELF FileHeader: Index: llvm/test/tools/llvm-objdump/elf-dynamic-section.test =================================================================== --- llvm/test/tools/llvm-objdump/elf-dynamic-section.test +++ llvm/test/tools/llvm-objdump/elf-dynamic-section.test @@ -1,64 +1,67 @@ -# RUN: yaml2obj %s > %t -# RUN: llvm-objdump -p %t | FileCheck %s +# RUN: yaml2obj --docnum=1 %s > %t1 +# RUN: llvm-objdump -p %t1 | FileCheck %s --check-prefix=ELF64 --strict-whitespace --match-full-lines -# CHECK: Dynamic Section: -# CHECK-NEXT: NEEDED D -# CHECK-NEXT: PLTRELSZ 0x0000000000000010 -# CHECK-NEXT: PLTGOT 0x0000000000001000 -# CHECK-NEXT: HASH 0x0000000000001000 -# CHECK-NEXT: STRTAB 0x0000000000001000 -# CHECK-NEXT: SYMTAB 0x0000000000001000 -# CHECK-NEXT: RELA 0x0000000000001000 -# CHECK-NEXT: RELASZ 0x0000000000000010 -# CHECK-NEXT: RELAENT 0x0000000000000789 -# CHECK-NEXT: STRSZ 0x0000000000000010 -# CHECK-NEXT: SYMENT 0x0000000000000987 -# CHECK-NEXT: INIT 0x0000000000001000 -# CHECK-NEXT: FINI 0x0000000000001000 -# CHECK-NEXT: SONAME U -# CHECK-NEXT: RPATH f -# CHECK-NEXT: SYMBOLIC 0x1234567890abcdef -# CHECK-NEXT: REL 0x0000000000001000 -# CHECK-NEXT: RELSZ 0x0000000000000010 -# CHECK-NEXT: RELENT 0x0000000000000123 -# CHECK-NEXT: PLTREL 0x0000000000000007 -# CHECK-NEXT: DEBUG 0xfedcba0987654321 -# CHECK-NEXT: TEXTREL 0x1122334455667788 -# CHECK-NEXT: JMPREL 0x0000000000001000 -# CHECK-NEXT: BIND_NOW 0x8877665544332211 -# CHECK-NEXT: INIT_ARRAY 0x0000000000001000 -# CHECK-NEXT: FINI_ARRAY 0x0000000000001000 -# CHECK-NEXT: INIT_ARRAYSZ 0x0000000000000010 -# CHECK-NEXT: FINI_ARRAYSZ 0x0000000000000010 -# CHECK-NEXT: RUNPATH w -# CHECK-NEXT: FLAGS 0xaabbccddeeff9900 -# CHECK-NEXT: PREINIT_ARRAY 0x0000000000001000 -# CHECK-NEXT: PREINIT_ARRAYSZ 0x0000000000000010 -# CHECK-NEXT: SYMTAB_SHNDX 0x0000000000001000 -# CHECK-NEXT: RELRSZ 0x0000000000000010 -# CHECK-NEXT: RELR 0x0000000000001000 -# CHECK-NEXT: RELRENT 0x0000000000004321 -# CHECK-NEXT: ANDROID_REL 0x0000000000001000 -# CHECK-NEXT: ANDROID_RELSZ 0x0000000000000010 -# CHECK-NEXT: ANDROID_RELA 0x0000000000001000 -# CHECK-NEXT: ANDROID_RELASZ 0x0000000000000010 -# CHECK-NEXT: ANDROID_RELR 0x0000000000001000 -# CHECK-NEXT: ANDROID_RELRSZ 0x0000000000000010 -# CHECK-NEXT: ANDROID_RELRENT 0x0000000000001234 -# CHECK-NEXT: GNU_HASH 0x0000000000001000 -# CHECK-NEXT: TLSDESC_PLT 0x0000000000001000 -# CHECK-NEXT: TLSDESC_GOT 0x0000000000001000 -# CHECK-NEXT: RELACOUNT 0x0000000000000000 -# CHECK-NEXT: RELCOUNT 0x0000000000000000 -# CHECK-NEXT: FLAGS_1 0x0000000087654321 -# CHECK-NEXT: VERSYM 0x0000000000001000 -# CHECK-NEXT: VERDEF 0x0000000000001000 -# CHECK-NEXT: VERDEFNUM 0x0000000000000000 -# CHECK-NEXT: VERNEED 0x0000000000001000 -# CHECK-NEXT: VERNEEDNUM 0x0000000000000000 -# CHECK-NEXT: AUXILIARY D -# CHECK-NEXT: FILTER U -# CHECK-NEXT: 0x1234abcd 0x0000000000000001 +# ELF64:Dynamic Section: +# ELF64-NEXT: NEEDED D +# ELF64-NEXT: PLTRELSZ 0x0000000000000010 +# ELF64-NEXT: PLTGOT 0x0000000000001000 +# ELF64-NEXT: HASH 0x0000000000001000 +# ELF64-NEXT: STRTAB 0x0000000000001000 +# ELF64-NEXT: SYMTAB 0x0000000000001000 +# ELF64-NEXT: RELA 0x0000000000001000 +# ELF64-NEXT: RELASZ 0x0000000000000010 +# ELF64-NEXT: RELAENT 0x0000000000000789 +# ELF64-NEXT: STRSZ 0x0000000000000010 +# ELF64-NEXT: SYMENT 0x0000000000000987 +# ELF64-NEXT: INIT 0x0000000000001000 +# ELF64-NEXT: FINI 0x0000000000001000 +# ELF64-NEXT: SONAME U +# ELF64-NEXT: RPATH f +# ELF64-NEXT: SYMBOLIC 0x1234567890abcdef +# ELF64-NEXT: REL 0x0000000000001000 +# ELF64-NEXT: RELSZ 0x0000000000000010 +# ELF64-NEXT: RELENT 0x0000000000000123 +# ELF64-NEXT: PLTREL 0x0000000000000007 +# ELF64-NEXT: DEBUG 0xfedcba0987654321 +# ELF64-NEXT: TEXTREL 0x1122334455667788 +# ELF64-NEXT: JMPREL 0x0000000000001000 +# ELF64-NEXT: BIND_NOW 0x8877665544332211 +# ELF64-NEXT: INIT_ARRAY 0x0000000000001000 +# ELF64-NEXT: FINI_ARRAY 0x0000000000001000 +# ELF64-NEXT: INIT_ARRAYSZ 0x0000000000000010 +# ELF64-NEXT: FINI_ARRAYSZ 0x0000000000000010 +# ELF64-NEXT: RUNPATH w +# ELF64-NEXT: FLAGS 0xaabbccddeeff9900 +# ELF64-NEXT: PREINIT_ARRAY 0x0000000000001000 +# ELF64-NEXT: PREINIT_ARRAYSZ 0x0000000000000010 +# ELF64-NEXT: SYMTAB_SHNDX 0x0000000000001000 +# ELF64-NEXT: RELRSZ 0x0000000000000010 +# ELF64-NEXT: RELR 0x0000000000001000 +# ELF64-NEXT: RELRENT 0x0000000000004321 +# ELF64-NEXT: ANDROID_REL 0x0000000000001000 +# ELF64-NEXT: ANDROID_RELSZ 0x0000000000000010 +# ELF64-NEXT: ANDROID_RELA 0x0000000000001000 +# ELF64-NEXT: ANDROID_RELASZ 0x0000000000000010 +# ELF64-NEXT: ANDROID_RELR 0x0000000000001000 +# ELF64-NEXT: ANDROID_RELRSZ 0x0000000000000010 +# ELF64-NEXT: ANDROID_RELRENT 0x0000000000001234 +# ELF64-NEXT: GNU_HASH 0x0000000000001000 +# ELF64-NEXT: TLSDESC_PLT 0x0000000000001000 +# ELF64-NEXT: TLSDESC_GOT 0x0000000000001000 +# ELF64-NEXT: RELACOUNT 0x0000000000000000 +# ELF64-NEXT: RELCOUNT 0x0000000000000000 +# ELF64-NEXT: FLAGS_1 0x0000000087654321 +# ELF64-NEXT: VERSYM 0x0000000000001000 +# ELF64-NEXT: VERDEF 0x0000000000001000 +# ELF64-NEXT: VERDEFNUM 0x0000000000000000 +# ELF64-NEXT: VERNEED 0x0000000000001000 +# ELF64-NEXT: VERNEEDNUM 0x0000000000000000 +# ELF64-NEXT: AUXILIARY D +# ELF64-NEXT: FILTER U +# ELF64-NEXT: 0x12345678 0x8765432187654321 +# ELF64-NEXT: 0x6abcdef0 0x9988776655443322 +# ELF64-NEXT: 0x76543210 0x5555666677778888 +# ELF64-NOT:{{.}} --- !ELF FileHeader: @@ -189,8 +192,232 @@ Value: 0x1 - Tag: DT_FILTER Value: 0x3 - - Tag: 0x1234abcd +## Show behaviour for unknown values in special and un-marked ranges. +## An arbitrary unknown value outside of the special ranges. + - Tag: 0x12345678 + Value: 0x8765432187654321 +## An OS specific tag. + - Tag: 0x6abcdef0 + Value: 0x9988776655443322 +## A processor specific tags. + - Tag: 0x76543210 + Value: 0x5555666677778888 + - Tag: DT_NULL + Value: 0x0 +ProgramHeaders: + - Type: PT_LOAD + VAddr: 0x1000 + Sections: + - Section: .dynstr + - Section: .dynamic + - Type: PT_DYNAMIC + VAddr: 0x1010 + Sections: + - Section: .dynamic + +# RUN: yaml2obj --docnum=2 %s > %t2 +# RUN: llvm-objdump -p %t2 | FileCheck %s --check-prefix=ELF32 --strict-whitespace --match-full-lines + +# ELF32:Dynamic Section: +# ELF32-NEXT: NEEDED D +# ELF32-NEXT: PLTRELSZ 0x00000010 +# ELF32-NEXT: PLTGOT 0x00001000 +# ELF32-NEXT: HASH 0x00001000 +# ELF32-NEXT: STRTAB 0x00001000 +# ELF32-NEXT: SYMTAB 0x00001000 +# ELF32-NEXT: RELA 0x00001000 +# ELF32-NEXT: RELASZ 0x00000010 +# ELF32-NEXT: RELAENT 0x00000789 +# ELF32-NEXT: STRSZ 0x00000010 +# ELF32-NEXT: SYMENT 0x00000987 +# ELF32-NEXT: INIT 0x00001000 +# ELF32-NEXT: FINI 0x00001000 +# ELF32-NEXT: SONAME U +# ELF32-NEXT: RPATH f +# ELF32-NEXT: SYMBOLIC 0x12345678 +# ELF32-NEXT: REL 0x00001000 +# ELF32-NEXT: RELSZ 0x00000010 +# ELF32-NEXT: RELENT 0x00000123 +# ELF32-NEXT: PLTREL 0x00000007 +# ELF32-NEXT: DEBUG 0xfedcba09 +# ELF32-NEXT: TEXTREL 0x11223344 +# ELF32-NEXT: JMPREL 0x00001000 +# ELF32-NEXT: BIND_NOW 0x88776655 +# ELF32-NEXT: INIT_ARRAY 0x00001000 +# ELF32-NEXT: FINI_ARRAY 0x00001000 +# ELF32-NEXT: INIT_ARRAYSZ 0x00000010 +# ELF32-NEXT: FINI_ARRAYSZ 0x00000010 +# ELF32-NEXT: RUNPATH w +# ELF32-NEXT: FLAGS 0xaabbccdd +# ELF32-NEXT: PREINIT_ARRAY 0x00001000 +# ELF32-NEXT: PREINIT_ARRAYSZ 0x00000010 +# ELF32-NEXT: SYMTAB_SHNDX 0x00001000 +# ELF32-NEXT: RELRSZ 0x00000010 +# ELF32-NEXT: RELR 0x00001000 +# ELF32-NEXT: RELRENT 0x00004321 +# ELF32-NEXT: ANDROID_REL 0x00001000 +# ELF32-NEXT: ANDROID_RELSZ 0x00000010 +# ELF32-NEXT: ANDROID_RELA 0x00001000 +# ELF32-NEXT: ANDROID_RELASZ 0x00000010 +# ELF32-NEXT: ANDROID_RELR 0x00001000 +# ELF32-NEXT: ANDROID_RELRSZ 0x00000010 +# ELF32-NEXT: ANDROID_RELRENT 0x00001234 +# ELF32-NEXT: GNU_HASH 0x00001000 +# ELF32-NEXT: TLSDESC_PLT 0x00001000 +# ELF32-NEXT: TLSDESC_GOT 0x00001000 +# ELF32-NEXT: RELACOUNT 0x00000000 +# ELF32-NEXT: RELCOUNT 0x00000000 +# ELF32-NEXT: FLAGS_1 0x87654321 +# ELF32-NEXT: VERSYM 0x00001000 +# ELF32-NEXT: VERDEF 0x00001000 +# ELF32-NEXT: VERDEFNUM 0x00000000 +# ELF32-NEXT: VERNEED 0x00001000 +# ELF32-NEXT: VERNEEDNUM 0x00000000 +# ELF32-NEXT: AUXILIARY D +# ELF32-NEXT: FILTER U +# ELF32-NEXT: 0x12345678 0x87654321 +# ELF32-NEXT: 0x6abcdef0 0x99887766 +# ELF32-NEXT: 0x76543210 0x55556666 + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_386 +Sections: + - Name: .dynstr + Type: SHT_STRTAB + Address: 0x1000 + Size: 0x10 + Content: "004400550066007700" + - Name: .dynamic + Type: SHT_DYNAMIC + Address: 0x1010 + Link: 1 + Entries: + - Tag: DT_NEEDED Value: 0x1 + - Tag: DT_PLTRELSZ + Value: 0x10 + - Tag: DT_PLTGOT + Value: 0x1000 + - Tag: DT_HASH + Value: 0x1000 + - Tag: DT_STRTAB + Value: 0x1000 + - Tag: DT_SYMTAB + Value: 0x1000 + - Tag: DT_RELA + Value: 0x1000 + - Tag: DT_RELASZ + Value: 0x10 + - Tag: DT_RELAENT + Value: 0x789 + - Tag: DT_STRSZ + Value: 0x10 + - Tag: DT_SYMENT + Value: 0x987 + - Tag: DT_INIT + Value: 0x1000 + - Tag: DT_FINI + Value: 0x1000 + - Tag: DT_SONAME + Value: 0x3 + - Tag: DT_RPATH + Value: 0x5 + - Tag: DT_SYMBOLIC + Value: 0x12345678 + - Tag: DT_REL + Value: 0x1000 + - Tag: DT_RELSZ + Value: 0x10 + - Tag: DT_RELENT + Value: 0x123 + - Tag: DT_PLTREL + Value: 0x7 + - Tag: DT_DEBUG + Value: 0xfedcba09 + - Tag: DT_TEXTREL + Value: 0x11223344 + - Tag: DT_JMPREL + Value: 0x1000 + - Tag: DT_BIND_NOW + Value: 0x88776655 + - Tag: DT_INIT_ARRAY + Value: 0x1000 + - Tag: DT_FINI_ARRAY + Value: 0x1000 + - Tag: DT_INIT_ARRAYSZ + Value: 0x10 + - Tag: DT_FINI_ARRAYSZ + Value: 0x10 + - Tag: DT_RUNPATH + Value: 0x7 + - Tag: DT_FLAGS + Value: 0xaabbccdd + - Tag: DT_PREINIT_ARRAY + Value: 0x1000 + - Tag: DT_PREINIT_ARRAYSZ + Value: 0x10 + - Tag: DT_SYMTAB_SHNDX + Value: 0x1000 + - Tag: DT_RELRSZ + Value: 0x10 + - Tag: DT_RELR + Value: 0x1000 + - Tag: DT_RELRENT + Value: 0x4321 + - Tag: DT_ANDROID_REL + Value: 0x1000 + - Tag: DT_ANDROID_RELSZ + Value: 0x10 + - Tag: DT_ANDROID_RELA + Value: 0x1000 + - Tag: DT_ANDROID_RELASZ + Value: 0x10 + - Tag: DT_ANDROID_RELR + Value: 0x1000 + - Tag: DT_ANDROID_RELRSZ + Value: 0x10 + - Tag: DT_ANDROID_RELRENT + Value: 0x1234 + - Tag: DT_GNU_HASH + Value: 0x1000 + - Tag: DT_TLSDESC_PLT + Value: 0x1000 + - Tag: DT_TLSDESC_GOT + Value: 0x1000 + - Tag: DT_RELACOUNT + Value: 0x0 + - Tag: DT_RELCOUNT + Value: 0x0 + - Tag: DT_FLAGS_1 + Value: 0x87654321 + - Tag: DT_VERSYM + Value: 0x1000 + - Tag: DT_VERDEF + Value: 0x1000 + - Tag: DT_VERDEFNUM + Value: 0x0 + - Tag: DT_VERNEED + Value: 0x1000 + - Tag: DT_VERNEEDNUM + Value: 0x0 + - Tag: DT_AUXILIARY + Value: 0x1 + - Tag: DT_FILTER + Value: 0x3 +## Show behaviour for unknown values in special and un-marked ranges. +## An arbitrary unknown value outside of the special ranges. + - Tag: 0x12345678 + Value: 0x87654321 +## An OS specific tag. + - Tag: 0x6abcdef0 + Value: 0x99887766 +## A processor specific tags. + - Tag: 0x76543210 + Value: 0x55556666 - Tag: DT_NULL Value: 0x0 ProgramHeaders: Index: llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test =================================================================== --- llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test +++ llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test @@ -48,111 +48,111 @@ ## Case 2: Test that MIPS machine-specific tags can be dumped. # RUN: yaml2obj --docnum=2 %s -o %t.mips -# RUN: llvm-readobj --dynamic-table %t.mips | FileCheck %s --check-prefix=LLVM-MIPS -# RUN: llvm-readelf --dynamic-table %t.mips | FileCheck %s --check-prefix=GNU-MIPS +# RUN: llvm-readobj --dynamic-table %t.mips \ +# RUN: | FileCheck %s --check-prefix=LLVM-MIPS --strict-whitespace --match-full-lines +# RUN: llvm-readelf --dynamic-table %t.mips \ +# RUN: | FileCheck %s --check-prefix=GNU-MIPS --strict-whitespace --match-full-lines -# LLVM-MIPS: DynamicSection [ (47 entries) -# LLVM-MIPS-NEXT: Tag Type Name/Value -# LLVM-MIPS-NEXT: 0x0000000000000004 HASH 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 305419896 -# LLVM-MIPS-NEXT: 0x0000000070000002 MIPS_TIME_STAMP 0x11223344 -# LLVM-MIPS-NEXT: 0x0000000070000003 MIPS_ICHECKSUM 0x11112222 -# LLVM-MIPS-NEXT: 0x0000000070000004 MIPS_IVERSION 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000005 MIPS_FLAGS QUICKSTART SGI_ONLY PIXIE CORD -# LLVM-MIPS-NEXT: 0x0000000070000006 MIPS_BASE_ADDRESS 0x87654321 -# LLVM-MIPS-NEXT: 0x0000000070000007 MIPS_MSYM 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000008 MIPS_CONFLICT 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000009 MIPS_LIBLIST 0x1000 -# LLVM-MIPS-NEXT: 0x000000007000000A MIPS_LOCAL_GOTNO 1 -# LLVM-MIPS-NEXT: 0x000000007000000B MIPS_CONFLICTNO 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000010 MIPS_LIBLISTNO 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000011 MIPS_SYMTABNO 1 -# LLVM-MIPS-NEXT: 0x0000000070000012 MIPS_UNREFEXTNO 0 -# LLVM-MIPS-NEXT: 0x0000000070000013 MIPS_GOTSYM 0x0 -# LLVM-MIPS-NEXT: 0x0000000070000014 MIPS_HIPAGENO 0x88776655 -# LLVM-MIPS-NEXT: 0x0000000070000016 MIPS_RLD_MAP 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000017 MIPS_DELTA_CLASS 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000018 MIPS_DELTA_CLASS_NO 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000019 MIPS_DELTA_INSTANCE 0x1000 -## FIXME: llvm-readobj does not print spaces after MIPS_DELTA_INSTANCE_NO, MIPS_PROTECTED_GOTIDX -## and other long tags. The output looks broken because of that. -# LLVM-MIPS-NEXT: 0x000000007000001A MIPS_DELTA_INSTANCE_NO0x1 -# LLVM-MIPS-NEXT: 0x000000007000001B MIPS_DELTA_RELOC 0x1000 -# LLVM-MIPS-NEXT: 0x000000007000001C MIPS_DELTA_RELOC_NO 0x1 -# LLVM-MIPS-NEXT: 0x000000007000001D MIPS_DELTA_SYM 0x1000 -# LLVM-MIPS-NEXT: 0x000000007000001E MIPS_DELTA_SYM_NO 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000020 MIPS_DELTA_CLASSSYM 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000021 MIPS_DELTA_CLASSSYM_NO0x1 -# LLVM-MIPS-NEXT: 0x0000000070000022 MIPS_CXX_FLAGS 0x88887777 -# LLVM-MIPS-NEXT: 0x0000000070000023 MIPS_PIXIE_INIT 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000025 MIPS_LOCALPAGE_GOTIDX0x1 -# LLVM-MIPS-NEXT: 0x0000000070000026 MIPS_LOCAL_GOTIDX 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000027 MIPS_HIDDEN_GOTIDX 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000028 MIPS_PROTECTED_GOTIDX0x1 -# LLVM-MIPS-NEXT: 0x0000000070000029 MIPS_OPTIONS 0x1000 -# LLVM-MIPS-NEXT: 0x000000007000002A MIPS_INTERFACE 0x1000 -# LLVM-MIPS-NEXT: 0x000000007000002B MIPS_DYNSTR_ALIGN 0x88888888 -# LLVM-MIPS-NEXT: 0x000000007000002C MIPS_INTERFACE_SIZE 0x10 -# LLVM-MIPS-NEXT: 0x000000007000002D MIPS_RLD_TEXT_RESOLVE_ADDR0x8 -# LLVM-MIPS-NEXT: 0x000000007000002E MIPS_PERF_SUFFIX 0x0 -# LLVM-MIPS-NEXT: 0x000000007000002F MIPS_COMPACT_SIZE 0x10 -# LLVM-MIPS-NEXT: 0x0000000070000030 MIPS_GP_VALUE 0x1 -# LLVM-MIPS-NEXT: 0x0000000070000031 MIPS_AUX_DYNAMIC 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000032 MIPS_PLTGOT 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000034 MIPS_RWPLT 0x1000 -# LLVM-MIPS-NEXT: 0x0000000070000035 MIPS_RLD_MAP_REL 0x1000 -# LLVM-MIPS-NEXT: 0x0000000000000000 NULL 0x0 -# LLVM-MIPS-NEXT: ] +# LLVM-MIPS:DynamicSection [ (47 entries) +# LLVM-MIPS-NEXT: Tag Type Name/Value +# LLVM-MIPS-NEXT: 0x0000000000000004 HASH 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 305419896 +# LLVM-MIPS-NEXT: 0x0000000070000002 MIPS_TIME_STAMP 0x11223344 +# LLVM-MIPS-NEXT: 0x0000000070000003 MIPS_ICHECKSUM 0x11112222 +# LLVM-MIPS-NEXT: 0x0000000070000004 MIPS_IVERSION 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000005 MIPS_FLAGS QUICKSTART SGI_ONLY PIXIE CORD +# LLVM-MIPS-NEXT: 0x0000000070000006 MIPS_BASE_ADDRESS 0x87654321 +# LLVM-MIPS-NEXT: 0x0000000070000007 MIPS_MSYM 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000008 MIPS_CONFLICT 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000009 MIPS_LIBLIST 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000000A MIPS_LOCAL_GOTNO 1 +# LLVM-MIPS-NEXT: 0x000000007000000B MIPS_CONFLICTNO 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000010 MIPS_LIBLISTNO 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000011 MIPS_SYMTABNO 1 +# LLVM-MIPS-NEXT: 0x0000000070000012 MIPS_UNREFEXTNO 0 +# LLVM-MIPS-NEXT: 0x0000000070000013 MIPS_GOTSYM 0x0 +# LLVM-MIPS-NEXT: 0x0000000070000014 MIPS_HIPAGENO 0x88776655 +# LLVM-MIPS-NEXT: 0x0000000070000016 MIPS_RLD_MAP 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000017 MIPS_DELTA_CLASS 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000018 MIPS_DELTA_CLASS_NO 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000019 MIPS_DELTA_INSTANCE 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000001A MIPS_DELTA_INSTANCE_NO 0x1 +# LLVM-MIPS-NEXT: 0x000000007000001B MIPS_DELTA_RELOC 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000001C MIPS_DELTA_RELOC_NO 0x1 +# LLVM-MIPS-NEXT: 0x000000007000001D MIPS_DELTA_SYM 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000001E MIPS_DELTA_SYM_NO 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000020 MIPS_DELTA_CLASSSYM 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000021 MIPS_DELTA_CLASSSYM_NO 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000022 MIPS_CXX_FLAGS 0x88887777 +# LLVM-MIPS-NEXT: 0x0000000070000023 MIPS_PIXIE_INIT 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000025 MIPS_LOCALPAGE_GOTIDX 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000026 MIPS_LOCAL_GOTIDX 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000027 MIPS_HIDDEN_GOTIDX 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000028 MIPS_PROTECTED_GOTIDX 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000029 MIPS_OPTIONS 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000002A MIPS_INTERFACE 0x1000 +# LLVM-MIPS-NEXT: 0x000000007000002B MIPS_DYNSTR_ALIGN 0x88888888 +# LLVM-MIPS-NEXT: 0x000000007000002C MIPS_INTERFACE_SIZE 0x10 +# LLVM-MIPS-NEXT: 0x000000007000002D MIPS_RLD_TEXT_RESOLVE_ADDR 0x8 +# LLVM-MIPS-NEXT: 0x000000007000002E MIPS_PERF_SUFFIX 0x0 +# LLVM-MIPS-NEXT: 0x000000007000002F MIPS_COMPACT_SIZE 0x10 +# LLVM-MIPS-NEXT: 0x0000000070000030 MIPS_GP_VALUE 0x1 +# LLVM-MIPS-NEXT: 0x0000000070000031 MIPS_AUX_DYNAMIC 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000032 MIPS_PLTGOT 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000034 MIPS_RWPLT 0x1000 +# LLVM-MIPS-NEXT: 0x0000000070000035 MIPS_RLD_MAP_REL 0x1000 +# LLVM-MIPS-NEXT: 0x0000000000000000 NULL 0x0 +# LLVM-MIPS-NEXT:] -# GNU-MIPS: Dynamic section at offset {{.*}} contains 47 entries: -# GNU-MIPS-NEXT: Tag Type Name/Value -# GNU-MIPS-NEXT: 0x0000000000000004 (HASH) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000001 (MIPS_RLD_VERSION) 305419896 -# GNU-MIPS-NEXT: 0x0000000070000002 (MIPS_TIME_STAMP) 0x11223344 -# GNU-MIPS-NEXT: 0x0000000070000003 (MIPS_ICHECKSUM) 0x11112222 -# GNU-MIPS-NEXT: 0x0000000070000004 (MIPS_IVERSION) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000005 (MIPS_FLAGS) QUICKSTART SGI_ONLY PIXIE CORD -# GNU-MIPS-NEXT: 0x0000000070000006 (MIPS_BASE_ADDRESS) 0x87654321 -# GNU-MIPS-NEXT: 0x0000000070000007 (MIPS_MSYM) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000008 (MIPS_CONFLICT) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000009 (MIPS_LIBLIST) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000000a (MIPS_LOCAL_GOTNO) 1 -# GNU-MIPS-NEXT: 0x000000007000000b (MIPS_CONFLICTNO) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000010 (MIPS_LIBLISTNO) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000011 (MIPS_SYMTABNO) 1 -# GNU-MIPS-NEXT: 0x0000000070000012 (MIPS_UNREFEXTNO) 0 -# GNU-MIPS-NEXT: 0x0000000070000013 (MIPS_GOTSYM) 0x0 -# GNU-MIPS-NEXT: 0x0000000070000014 (MIPS_HIPAGENO) 0x88776655 -# GNU-MIPS-NEXT: 0x0000000070000016 (MIPS_RLD_MAP) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000017 (MIPS_DELTA_CLASS) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000018 (MIPS_DELTA_CLASS_NO) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000019 (MIPS_DELTA_INSTANCE) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000001a (MIPS_DELTA_INSTANCE_NO) 0x1 -# GNU-MIPS-NEXT: 0x000000007000001b (MIPS_DELTA_RELOC) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000001c (MIPS_DELTA_RELOC_NO) 0x1 -# GNU-MIPS-NEXT: 0x000000007000001d (MIPS_DELTA_SYM) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000001e (MIPS_DELTA_SYM_NO) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000020 (MIPS_DELTA_CLASSSYM) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000021 (MIPS_DELTA_CLASSSYM_NO) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000022 (MIPS_CXX_FLAGS) 0x88887777 -# GNU-MIPS-NEXT: 0x0000000070000023 (MIPS_PIXIE_INIT) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000025 (MIPS_LOCALPAGE_GOTIDX) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000026 (MIPS_LOCAL_GOTIDX) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000027 (MIPS_HIDDEN_GOTIDX) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000028 (MIPS_PROTECTED_GOTIDX) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000029 (MIPS_OPTIONS) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000002a (MIPS_INTERFACE) 0x1000 -# GNU-MIPS-NEXT: 0x000000007000002b (MIPS_DYNSTR_ALIGN) 0x88888888 -# GNU-MIPS-NEXT: 0x000000007000002c (MIPS_INTERFACE_SIZE) 0x10 -# GNU-MIPS-NEXT: 0x000000007000002d (MIPS_RLD_TEXT_RESOLVE_ADDR) 0x8 -# GNU-MIPS-NEXT: 0x000000007000002e (MIPS_PERF_SUFFIX) 0x0 -# GNU-MIPS-NEXT: 0x000000007000002f (MIPS_COMPACT_SIZE) 0x10 -# GNU-MIPS-NEXT: 0x0000000070000030 (MIPS_GP_VALUE) 0x1 -# GNU-MIPS-NEXT: 0x0000000070000031 (MIPS_AUX_DYNAMIC) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000032 (MIPS_PLTGOT) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000034 (MIPS_RWPLT) 0x1000 -# GNU-MIPS-NEXT: 0x0000000070000035 (MIPS_RLD_MAP_REL) 0x1000 -# GNU-MIPS-NEXT: 0x0000000000000000 (NULL) 0x0 +# GNU-MIPS:Dynamic section at offset {{.*}} contains 47 entries: +# GNU-MIPS-NEXT: Tag Type Name/Value +# GNU-MIPS-NEXT: 0x0000000000000004 (HASH) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000001 (MIPS_RLD_VERSION) 305419896 +# GNU-MIPS-NEXT: 0x0000000070000002 (MIPS_TIME_STAMP) 0x11223344 +# GNU-MIPS-NEXT: 0x0000000070000003 (MIPS_ICHECKSUM) 0x11112222 +# GNU-MIPS-NEXT: 0x0000000070000004 (MIPS_IVERSION) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000005 (MIPS_FLAGS) QUICKSTART SGI_ONLY PIXIE CORD +# GNU-MIPS-NEXT: 0x0000000070000006 (MIPS_BASE_ADDRESS) 0x87654321 +# GNU-MIPS-NEXT: 0x0000000070000007 (MIPS_MSYM) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000008 (MIPS_CONFLICT) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000009 (MIPS_LIBLIST) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000000a (MIPS_LOCAL_GOTNO) 1 +# GNU-MIPS-NEXT: 0x000000007000000b (MIPS_CONFLICTNO) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000010 (MIPS_LIBLISTNO) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000011 (MIPS_SYMTABNO) 1 +# GNU-MIPS-NEXT: 0x0000000070000012 (MIPS_UNREFEXTNO) 0 +# GNU-MIPS-NEXT: 0x0000000070000013 (MIPS_GOTSYM) 0x0 +# GNU-MIPS-NEXT: 0x0000000070000014 (MIPS_HIPAGENO) 0x88776655 +# GNU-MIPS-NEXT: 0x0000000070000016 (MIPS_RLD_MAP) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000017 (MIPS_DELTA_CLASS) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000018 (MIPS_DELTA_CLASS_NO) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000019 (MIPS_DELTA_INSTANCE) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000001a (MIPS_DELTA_INSTANCE_NO) 0x1 +# GNU-MIPS-NEXT: 0x000000007000001b (MIPS_DELTA_RELOC) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000001c (MIPS_DELTA_RELOC_NO) 0x1 +# GNU-MIPS-NEXT: 0x000000007000001d (MIPS_DELTA_SYM) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000001e (MIPS_DELTA_SYM_NO) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000020 (MIPS_DELTA_CLASSSYM) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000021 (MIPS_DELTA_CLASSSYM_NO) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000022 (MIPS_CXX_FLAGS) 0x88887777 +# GNU-MIPS-NEXT: 0x0000000070000023 (MIPS_PIXIE_INIT) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000025 (MIPS_LOCALPAGE_GOTIDX) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000026 (MIPS_LOCAL_GOTIDX) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000027 (MIPS_HIDDEN_GOTIDX) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000028 (MIPS_PROTECTED_GOTIDX) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000029 (MIPS_OPTIONS) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000002a (MIPS_INTERFACE) 0x1000 +# GNU-MIPS-NEXT: 0x000000007000002b (MIPS_DYNSTR_ALIGN) 0x88888888 +# GNU-MIPS-NEXT: 0x000000007000002c (MIPS_INTERFACE_SIZE) 0x10 +# GNU-MIPS-NEXT: 0x000000007000002d (MIPS_RLD_TEXT_RESOLVE_ADDR) 0x8 +# GNU-MIPS-NEXT: 0x000000007000002e (MIPS_PERF_SUFFIX) 0x0 +# GNU-MIPS-NEXT: 0x000000007000002f (MIPS_COMPACT_SIZE) 0x10 +# GNU-MIPS-NEXT: 0x0000000070000030 (MIPS_GP_VALUE) 0x1 +# GNU-MIPS-NEXT: 0x0000000070000031 (MIPS_AUX_DYNAMIC) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000032 (MIPS_PLTGOT) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000034 (MIPS_RWPLT) 0x1000 +# GNU-MIPS-NEXT: 0x0000000070000035 (MIPS_RLD_MAP_REL) 0x1000 +# GNU-MIPS-NEXT: 0x0000000000000000 (NULL) 0x0 --- !ELF FileHeader: Index: llvm/test/tools/llvm-readobj/ELF/dynamic-tags.test =================================================================== --- llvm/test/tools/llvm-readobj/ELF/dynamic-tags.test +++ llvm/test/tools/llvm-readobj/ELF/dynamic-tags.test @@ -1,140 +1,143 @@ ## Show that all non-machine specific tags can be read and printed correctly. ## Also show that -d is an alias for --dynamic-table. -# RUN: yaml2obj %s -o %t -# RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=LLVM -# RUN: llvm-readobj -d %t | FileCheck %s --check-prefix=LLVM -# RUN: llvm-readelf --dynamic-table %t | FileCheck %s --check-prefix=GNU -# RUN: llvm-readelf -d %t | FileCheck %s --check-prefix=GNU +# RUN: yaml2obj %s --docnum=1 -o %t1 +# RUN: llvm-readobj --dynamic-table %t1 \ +# RUN: | FileCheck %s --check-prefix=LLVM64 --strict-whitespace --match-full-lines +# RUN: llvm-readobj -d %t1 | FileCheck %s --check-prefix=LLVM64 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --dynamic-table %t1 \ +# RUN: | FileCheck %s --check-prefix=GNU64 --strict-whitespace --match-full-lines +# RUN: llvm-readelf -d %t1 | FileCheck %s --check-prefix=GNU64 --strict-whitespace --match-full-lines -# LLVM: DynamicSection [ (61 entries) -# LLVM-NEXT: Tag Type Name/Value -# LLVM-NEXT: 0x0000000000000001 NEEDED Shared library: [D] -# LLVM-NEXT: 0x0000000000000002 PLTRELSZ 16 (bytes) -# LLVM-NEXT: 0x0000000000000003 PLTGOT 0x1000 -# LLVM-NEXT: 0x0000000000000004 HASH 0x1000 -# LLVM-NEXT: 0x0000000000000005 STRTAB 0x1000 -# LLVM-NEXT: 0x0000000000000006 SYMTAB 0x1000 -# LLVM-NEXT: 0x0000000000000007 RELA 0x1000 -# LLVM-NEXT: 0x0000000000000008 RELASZ 16 (bytes) -# LLVM-NEXT: 0x0000000000000009 RELAENT 1929 (bytes) -# LLVM-NEXT: 0x000000000000000A STRSZ 16 (bytes) -# LLVM-NEXT: 0x000000000000000B SYMENT 2439 (bytes) -# LLVM-NEXT: 0x000000000000000C INIT 0x1000 -# LLVM-NEXT: 0x000000000000000D FINI 0x1000 -# LLVM-NEXT: 0x000000000000000E SONAME Library soname: [U] -# LLVM-NEXT: 0x000000000000000F RPATH Library rpath: [f] -# LLVM-NEXT: 0x0000000000000010 SYMBOLIC 0x1234567890ABCDEF -# LLVM-NEXT: 0x0000000000000011 REL 0x1000 -# LLVM-NEXT: 0x0000000000000012 RELSZ 16 (bytes) -# LLVM-NEXT: 0x0000000000000013 RELENT 291 (bytes) -# LLVM-NEXT: 0x0000000000000014 PLTREL RELA -# LLVM-NEXT: 0x0000000000000015 DEBUG 0xFEDCBA0987654321 -# LLVM-NEXT: 0x0000000000000016 TEXTREL 0x1122334455667788 -# LLVM-NEXT: 0x0000000000000017 JMPREL 0x1000 -# LLVM-NEXT: 0x0000000000000018 BIND_NOW 0x8877665544332211 -# LLVM-NEXT: 0x0000000000000019 INIT_ARRAY 0x1000 -# LLVM-NEXT: 0x000000000000001A FINI_ARRAY 0x1000 -# LLVM-NEXT: 0x000000000000001B INIT_ARRAYSZ 16 (bytes) -# LLVM-NEXT: 0x000000000000001C FINI_ARRAYSZ 16 (bytes) -# LLVM-NEXT: 0x000000000000001D RUNPATH Library runpath: [w] -# LLVM-NEXT: 0x000000000000001E FLAGS ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} -# LLVM-NEXT: 0x0000000000000020 PREINIT_ARRAY 0x1000 -# LLVM-NEXT: 0x0000000000000021 PREINIT_ARRAYSZ 16 (bytes) -# LLVM-NEXT: 0x0000000000000022 SYMTAB_SHNDX 0x1000 -# LLVM-NEXT: 0x0000000000000023 RELRSZ 0x10 -# LLVM-NEXT: 0x0000000000000024 RELR 0x1000 -# LLVM-NEXT: 0x0000000000000025 RELRENT 0x4321 -# LLVM-NEXT: 0x000000006000000F ANDROID_REL 0x1000 -# LLVM-NEXT: 0x0000000060000010 ANDROID_RELSZ 16 (bytes) -# LLVM-NEXT: 0x0000000060000011 ANDROID_RELA 0x1000 -# LLVM-NEXT: 0x0000000060000012 ANDROID_RELASZ 16 (bytes) -# LLVM-NEXT: 0x000000006FFFE000 ANDROID_RELR 0x1000 -# LLVM-NEXT: 0x000000006FFFE001 ANDROID_RELRSZ 0x10 -# LLVM-NEXT: 0x000000006FFFE003 ANDROID_RELRENT 0x1234 -# LLVM-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x1000 -# LLVM-NEXT: 0x000000006FFFFEF6 TLSDESC_PLT 0x1000 -# LLVM-NEXT: 0x000000006FFFFEF7 TLSDESC_GOT 0x1000 -# LLVM-NEXT: 0x000000006FFFFFF9 RELACOUNT 0 -# LLVM-NEXT: 0x000000006FFFFFFA RELCOUNT 0 -# LLVM-NEXT: 0x000000006FFFFFFB FLAGS_1 NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} -# LLVM-NEXT: 0x000000006FFFFFF0 VERSYM 0x1000 -# LLVM-NEXT: 0x000000006FFFFFFC VERDEF 0x1000 -# LLVM-NEXT: 0x000000006FFFFFFD VERDEFNUM 0 -# LLVM-NEXT: 0x000000006FFFFFFE VERNEED 0x1000 -# LLVM-NEXT: 0x000000006FFFFFFF VERNEEDNUM 0 -# LLVM-NEXT: 0x000000007FFFFFFD AUXILIARY Auxiliary library: [D] -# LLVM-NEXT: 0x000000007FFFFFFE USED Not needed object: [U] -# LLVM-NEXT: 0x000000007FFFFFFF FILTER Filter library: [U] -# LLVM-NEXT: 0x0000000012345678 unknown 0x8765432187654321 -# LLVM-NEXT: 0x000000006ABCDEF0 unknown 0x9988776655443322 -# LLVM-NEXT: 0x0000000076543210 unknown 0x5555666677778888 -# LLVM-NEXT: 0x0000000000000000 NULL 0x0 -# LLVM-NEXT: ] +# LLVM64:DynamicSection [ (61 entries) +# LLVM64-NEXT: Tag Type Name/Value +# LLVM64-NEXT: 0x0000000000000001 NEEDED Shared library: [D] +# LLVM64-NEXT: 0x0000000000000002 PLTRELSZ 16 (bytes) +# LLVM64-NEXT: 0x0000000000000003 PLTGOT 0x1000 +# LLVM64-NEXT: 0x0000000000000004 HASH 0x1000 +# LLVM64-NEXT: 0x0000000000000005 STRTAB 0x1000 +# LLVM64-NEXT: 0x0000000000000006 SYMTAB 0x1000 +# LLVM64-NEXT: 0x0000000000000007 RELA 0x1000 +# LLVM64-NEXT: 0x0000000000000008 RELASZ 16 (bytes) +# LLVM64-NEXT: 0x0000000000000009 RELAENT 1929 (bytes) +# LLVM64-NEXT: 0x000000000000000A STRSZ 16 (bytes) +# LLVM64-NEXT: 0x000000000000000B SYMENT 2439 (bytes) +# LLVM64-NEXT: 0x000000000000000C INIT 0x1000 +# LLVM64-NEXT: 0x000000000000000D FINI 0x1000 +# LLVM64-NEXT: 0x000000000000000E SONAME Library soname: [U] +# LLVM64-NEXT: 0x000000000000000F RPATH Library rpath: [f] +# LLVM64-NEXT: 0x0000000000000010 SYMBOLIC 0x1234567890ABCDEF +# LLVM64-NEXT: 0x0000000000000011 REL 0x1000 +# LLVM64-NEXT: 0x0000000000000012 RELSZ 16 (bytes) +# LLVM64-NEXT: 0x0000000000000013 RELENT 291 (bytes) +# LLVM64-NEXT: 0x0000000000000014 PLTREL RELA +# LLVM64-NEXT: 0x0000000000000015 DEBUG 0xFEDCBA0987654321 +# LLVM64-NEXT: 0x0000000000000016 TEXTREL 0x1122334455667788 +# LLVM64-NEXT: 0x0000000000000017 JMPREL 0x1000 +# LLVM64-NEXT: 0x0000000000000018 BIND_NOW 0x8877665544332211 +# LLVM64-NEXT: 0x0000000000000019 INIT_ARRAY 0x1000 +# LLVM64-NEXT: 0x000000000000001A FINI_ARRAY 0x1000 +# LLVM64-NEXT: 0x000000000000001B INIT_ARRAYSZ 16 (bytes) +# LLVM64-NEXT: 0x000000000000001C FINI_ARRAYSZ 16 (bytes) +# LLVM64-NEXT: 0x000000000000001D RUNPATH Library runpath: [w] +# LLVM64-NEXT: 0x000000000000001E FLAGS ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} +# LLVM64-NEXT: 0x0000000000000020 PREINIT_ARRAY 0x1000 +# LLVM64-NEXT: 0x0000000000000021 PREINIT_ARRAYSZ 16 (bytes) +# LLVM64-NEXT: 0x0000000000000022 SYMTAB_SHNDX 0x1000 +# LLVM64-NEXT: 0x0000000000000023 RELRSZ 0x10 +# LLVM64-NEXT: 0x0000000000000024 RELR 0x1000 +# LLVM64-NEXT: 0x0000000000000025 RELRENT 0x4321 +# LLVM64-NEXT: 0x000000006000000F ANDROID_REL 0x1000 +# LLVM64-NEXT: 0x0000000060000010 ANDROID_RELSZ 16 (bytes) +# LLVM64-NEXT: 0x0000000060000011 ANDROID_RELA 0x1000 +# LLVM64-NEXT: 0x0000000060000012 ANDROID_RELASZ 16 (bytes) +# LLVM64-NEXT: 0x000000006FFFE000 ANDROID_RELR 0x1000 +# LLVM64-NEXT: 0x000000006FFFE001 ANDROID_RELRSZ 0x10 +# LLVM64-NEXT: 0x000000006FFFE003 ANDROID_RELRENT 0x1234 +# LLVM64-NEXT: 0x000000006FFFFEF5 GNU_HASH 0x1000 +# LLVM64-NEXT: 0x000000006FFFFEF6 TLSDESC_PLT 0x1000 +# LLVM64-NEXT: 0x000000006FFFFEF7 TLSDESC_GOT 0x1000 +# LLVM64-NEXT: 0x000000006FFFFFF9 RELACOUNT 0 +# LLVM64-NEXT: 0x000000006FFFFFFA RELCOUNT 0 +# LLVM64-NEXT: 0x000000006FFFFFFB FLAGS_1 NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} +# LLVM64-NEXT: 0x000000006FFFFFF0 VERSYM 0x1000 +# LLVM64-NEXT: 0x000000006FFFFFFC VERDEF 0x1000 +# LLVM64-NEXT: 0x000000006FFFFFFD VERDEFNUM 0 +# LLVM64-NEXT: 0x000000006FFFFFFE VERNEED 0x1000 +# LLVM64-NEXT: 0x000000006FFFFFFF VERNEEDNUM 0 +# LLVM64-NEXT: 0x000000007FFFFFFD AUXILIARY Auxiliary library: [D] +# LLVM64-NEXT: 0x000000007FFFFFFE USED Not needed object: [U] +# LLVM64-NEXT: 0x000000007FFFFFFF FILTER Filter library: [U] +# LLVM64-NEXT: 0x0000000012345678 0x12345678 0x8765432187654321 +# LLVM64-NEXT: 0x000000006ABCDEF0 0x6abcdef0 0x9988776655443322 +# LLVM64-NEXT: 0x0000000076543210 0x76543210 0x5555666677778888 +# LLVM64-NEXT: 0x0000000000000000 NULL 0x0 +# LLVM64-NEXT:] -# GNU: Dynamic section at offset {{.*}} contains 61 entries: -# GNU-NEXT: Tag Type Name/Value -# GNU-NEXT: 0x0000000000000001 (NEEDED) Shared library: [D] -# GNU-NEXT: 0x0000000000000002 (PLTRELSZ) 16 (bytes) -# GNU-NEXT: 0x0000000000000003 (PLTGOT) 0x1000 -# GNU-NEXT: 0x0000000000000004 (HASH) 0x1000 -# GNU-NEXT: 0x0000000000000005 (STRTAB) 0x1000 -# GNU-NEXT: 0x0000000000000006 (SYMTAB) 0x1000 -# GNU-NEXT: 0x0000000000000007 (RELA) 0x1000 -# GNU-NEXT: 0x0000000000000008 (RELASZ) 16 (bytes) -# GNU-NEXT: 0x0000000000000009 (RELAENT) 1929 (bytes) -# GNU-NEXT: 0x000000000000000a (STRSZ) 16 (bytes) -# GNU-NEXT: 0x000000000000000b (SYMENT) 2439 (bytes) -# GNU-NEXT: 0x000000000000000c (INIT) 0x1000 -# GNU-NEXT: 0x000000000000000d (FINI) 0x1000 -# GNU-NEXT: 0x000000000000000e (SONAME) Library soname: [U] -# GNU-NEXT: 0x000000000000000f (RPATH) Library rpath: [f] -# GNU-NEXT: 0x0000000000000010 (SYMBOLIC) 0x1234567890abcdef -# GNU-NEXT: 0x0000000000000011 (REL) 0x1000 -# GNU-NEXT: 0x0000000000000012 (RELSZ) 16 (bytes) -# GNU-NEXT: 0x0000000000000013 (RELENT) 291 (bytes) -# GNU-NEXT: 0x0000000000000014 (PLTREL) RELA -# GNU-NEXT: 0x0000000000000015 (DEBUG) 0xfedcba0987654321 -# GNU-NEXT: 0x0000000000000016 (TEXTREL) 0x1122334455667788 -# GNU-NEXT: 0x0000000000000017 (JMPREL) 0x1000 -# GNU-NEXT: 0x0000000000000018 (BIND_NOW) 0x8877665544332211 -# GNU-NEXT: 0x0000000000000019 (INIT_ARRAY) 0x1000 -# GNU-NEXT: 0x000000000000001a (FINI_ARRAY) 0x1000 -# GNU-NEXT: 0x000000000000001b (INIT_ARRAYSZ) 16 (bytes) -# GNU-NEXT: 0x000000000000001c (FINI_ARRAYSZ) 16 (bytes) -# GNU-NEXT: 0x000000000000001d (RUNPATH) Library runpath: [w] -# GNU-NEXT: 0x000000000000001e (FLAGS) ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} -# GNU-NEXT: 0x0000000000000020 (PREINIT_ARRAY) 0x1000 -# GNU-NEXT: 0x0000000000000021 (PREINIT_ARRAYSZ) 16 (bytes) -# GNU-NEXT: 0x0000000000000022 (SYMTAB_SHNDX) 0x1000 -# GNU-NEXT: 0x0000000000000023 (RELRSZ) 0x10 -# GNU-NEXT: 0x0000000000000024 (RELR) 0x1000 -# GNU-NEXT: 0x0000000000000025 (RELRENT) 0x4321 -# GNU-NEXT: 0x000000006000000f (ANDROID_REL) 0x1000 -# GNU-NEXT: 0x0000000060000010 (ANDROID_RELSZ) 16 (bytes) -# GNU-NEXT: 0x0000000060000011 (ANDROID_RELA) 0x1000 -# GNU-NEXT: 0x0000000060000012 (ANDROID_RELASZ) 16 (bytes) -# GNU-NEXT: 0x000000006fffe000 (ANDROID_RELR) 0x1000 -# GNU-NEXT: 0x000000006fffe001 (ANDROID_RELRSZ) 0x10 -# GNU-NEXT: 0x000000006fffe003 (ANDROID_RELRENT) 0x1234 -# GNU-NEXT: 0x000000006ffffef5 (GNU_HASH) 0x1000 -# GNU-NEXT: 0x000000006ffffef6 (TLSDESC_PLT) 0x1000 -# GNU-NEXT: 0x000000006ffffef7 (TLSDESC_GOT) 0x1000 -# GNU-NEXT: 0x000000006ffffff9 (RELACOUNT) 0 -# GNU-NEXT: 0x000000006ffffffa (RELCOUNT) 0 -# GNU-NEXT: 0x000000006ffffffb (FLAGS_1) NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} -# GNU-NEXT: 0x000000006ffffff0 (VERSYM) 0x1000 -# GNU-NEXT: 0x000000006ffffffc (VERDEF) 0x1000 -# GNU-NEXT: 0x000000006ffffffd (VERDEFNUM) 0 -# GNU-NEXT: 0x000000006ffffffe (VERNEED) 0x1000 -# GNU-NEXT: 0x000000006fffffff (VERNEEDNUM) 0 -# GNU-NEXT: 0x000000007ffffffd (AUXILIARY) Auxiliary library: [D] -# GNU-NEXT: 0x000000007ffffffe (USED) Not needed object: [U] -# GNU-NEXT: 0x000000007fffffff (FILTER) Filter library: [U] -# GNU-NEXT: 0x0000000012345678 (unknown) 0x8765432187654321 -# GNU-NEXT: 0x000000006abcdef0 (unknown) 0x9988776655443322 -# GNU-NEXT: 0x0000000076543210 (unknown) 0x5555666677778888 -# GNU-NEXT: 0x0000000000000000 (NULL) 0x0 +# GNU64:Dynamic section at offset {{.*}} contains 61 entries: +# GNU64-NEXT: Tag Type Name/Value +# GNU64-NEXT: 0x0000000000000001 (NEEDED) Shared library: [D] +# GNU64-NEXT: 0x0000000000000002 (PLTRELSZ) 16 (bytes) +# GNU64-NEXT: 0x0000000000000003 (PLTGOT) 0x1000 +# GNU64-NEXT: 0x0000000000000004 (HASH) 0x1000 +# GNU64-NEXT: 0x0000000000000005 (STRTAB) 0x1000 +# GNU64-NEXT: 0x0000000000000006 (SYMTAB) 0x1000 +# GNU64-NEXT: 0x0000000000000007 (RELA) 0x1000 +# GNU64-NEXT: 0x0000000000000008 (RELASZ) 16 (bytes) +# GNU64-NEXT: 0x0000000000000009 (RELAENT) 1929 (bytes) +# GNU64-NEXT: 0x000000000000000a (STRSZ) 16 (bytes) +# GNU64-NEXT: 0x000000000000000b (SYMENT) 2439 (bytes) +# GNU64-NEXT: 0x000000000000000c (INIT) 0x1000 +# GNU64-NEXT: 0x000000000000000d (FINI) 0x1000 +# GNU64-NEXT: 0x000000000000000e (SONAME) Library soname: [U] +# GNU64-NEXT: 0x000000000000000f (RPATH) Library rpath: [f] +# GNU64-NEXT: 0x0000000000000010 (SYMBOLIC) 0x1234567890abcdef +# GNU64-NEXT: 0x0000000000000011 (REL) 0x1000 +# GNU64-NEXT: 0x0000000000000012 (RELSZ) 16 (bytes) +# GNU64-NEXT: 0x0000000000000013 (RELENT) 291 (bytes) +# GNU64-NEXT: 0x0000000000000014 (PLTREL) RELA +# GNU64-NEXT: 0x0000000000000015 (DEBUG) 0xfedcba0987654321 +# GNU64-NEXT: 0x0000000000000016 (TEXTREL) 0x1122334455667788 +# GNU64-NEXT: 0x0000000000000017 (JMPREL) 0x1000 +# GNU64-NEXT: 0x0000000000000018 (BIND_NOW) 0x8877665544332211 +# GNU64-NEXT: 0x0000000000000019 (INIT_ARRAY) 0x1000 +# GNU64-NEXT: 0x000000000000001a (FINI_ARRAY) 0x1000 +# GNU64-NEXT: 0x000000000000001b (INIT_ARRAYSZ) 16 (bytes) +# GNU64-NEXT: 0x000000000000001c (FINI_ARRAYSZ) 16 (bytes) +# GNU64-NEXT: 0x000000000000001d (RUNPATH) Library runpath: [w] +# GNU64-NEXT: 0x000000000000001e (FLAGS) ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} +# GNU64-NEXT: 0x0000000000000020 (PREINIT_ARRAY) 0x1000 +# GNU64-NEXT: 0x0000000000000021 (PREINIT_ARRAYSZ) 16 (bytes) +# GNU64-NEXT: 0x0000000000000022 (SYMTAB_SHNDX) 0x1000 +# GNU64-NEXT: 0x0000000000000023 (RELRSZ) 0x10 +# GNU64-NEXT: 0x0000000000000024 (RELR) 0x1000 +# GNU64-NEXT: 0x0000000000000025 (RELRENT) 0x4321 +# GNU64-NEXT: 0x000000006000000f (ANDROID_REL) 0x1000 +# GNU64-NEXT: 0x0000000060000010 (ANDROID_RELSZ) 16 (bytes) +# GNU64-NEXT: 0x0000000060000011 (ANDROID_RELA) 0x1000 +# GNU64-NEXT: 0x0000000060000012 (ANDROID_RELASZ) 16 (bytes) +# GNU64-NEXT: 0x000000006fffe000 (ANDROID_RELR) 0x1000 +# GNU64-NEXT: 0x000000006fffe001 (ANDROID_RELRSZ) 0x10 +# GNU64-NEXT: 0x000000006fffe003 (ANDROID_RELRENT) 0x1234 +# GNU64-NEXT: 0x000000006ffffef5 (GNU_HASH) 0x1000 +# GNU64-NEXT: 0x000000006ffffef6 (TLSDESC_PLT) 0x1000 +# GNU64-NEXT: 0x000000006ffffef7 (TLSDESC_GOT) 0x1000 +# GNU64-NEXT: 0x000000006ffffff9 (RELACOUNT) 0 +# GNU64-NEXT: 0x000000006ffffffa (RELCOUNT) 0 +# GNU64-NEXT: 0x000000006ffffffb (FLAGS_1) NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} +# GNU64-NEXT: 0x000000006ffffff0 (VERSYM) 0x1000 +# GNU64-NEXT: 0x000000006ffffffc (VERDEF) 0x1000 +# GNU64-NEXT: 0x000000006ffffffd (VERDEFNUM) 0 +# GNU64-NEXT: 0x000000006ffffffe (VERNEED) 0x1000 +# GNU64-NEXT: 0x000000006fffffff (VERNEEDNUM) 0 +# GNU64-NEXT: 0x000000007ffffffd (AUXILIARY) Auxiliary library: [D] +# GNU64-NEXT: 0x000000007ffffffe (USED) Not needed object: [U] +# GNU64-NEXT: 0x000000007fffffff (FILTER) Filter library: [U] +# GNU64-NEXT: 0x0000000012345678 (0x12345678) 0x8765432187654321 +# GNU64-NEXT: 0x000000006abcdef0 (0x6abcdef0) 0x9988776655443322 +# GNU64-NEXT: 0x0000000076543210 (0x76543210) 0x5555666677778888 +# GNU64-NEXT: 0x0000000000000000 (NULL) 0x0 +# GNU64-NOT:{{.}} --- !ELF FileHeader: @@ -266,11 +269,14 @@ Value: 0x3 - Tag: DT_FILTER Value: 0x3 - # Show behaviour for unknown values in special and un-marked ranges. +## Show behaviour for unknown values in special and un-marked ranges. +## An arbitrary unknown value outside of the special ranges. - Tag: 0x12345678 Value: 0x8765432187654321 +## An OS specific tag. - Tag: 0x6abcdef0 Value: 0x9988776655443322 +## A processor specific tags. - Tag: 0x76543210 Value: 0x5555666677778888 - Tag: DT_NULL @@ -285,3 +291,293 @@ VAddr: 0x1010 Sections: - Section: .dynamic + +# RUN: yaml2obj %s --docnum=2 -o %t2 +# RUN: llvm-readobj --dynamic-table %t2 \ +# RUN: | FileCheck %s --check-prefix=LLVM32 --strict-whitespace --match-full-lines +# RUN: llvm-readobj -d %t2 | FileCheck %s --check-prefix=LLVM32 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --dynamic-table %t2 \ +# RUN: | FileCheck %s --check-prefix=GNU32 --strict-whitespace --match-full-lines +# RUN: llvm-readelf -d %t2 | FileCheck %s --check-prefix=GNU32 --strict-whitespace --match-full-lines + +# LLVM32:DynamicSection [ (61 entries) +# LLVM32-NEXT: Tag Type Name/Value +# LLVM32-NEXT: 0x00000001 NEEDED Shared library: [D] +# LLVM32-NEXT: 0x00000002 PLTRELSZ 16 (bytes) +# LLVM32-NEXT: 0x00000003 PLTGOT 0x1000 +# LLVM32-NEXT: 0x00000004 HASH 0x1000 +# LLVM32-NEXT: 0x00000005 STRTAB 0x1000 +# LLVM32-NEXT: 0x00000006 SYMTAB 0x1000 +# LLVM32-NEXT: 0x00000007 RELA 0x1000 +# LLVM32-NEXT: 0x00000008 RELASZ 16 (bytes) +# LLVM32-NEXT: 0x00000009 RELAENT 1929 (bytes) +# LLVM32-NEXT: 0x0000000A STRSZ 16 (bytes) +# LLVM32-NEXT: 0x0000000B SYMENT 2439 (bytes) +# LLVM32-NEXT: 0x0000000C INIT 0x1000 +# LLVM32-NEXT: 0x0000000D FINI 0x1000 +# LLVM32-NEXT: 0x0000000E SONAME Library soname: [U] +# LLVM32-NEXT: 0x0000000F RPATH Library rpath: [f] +# LLVM32-NEXT: 0x00000010 SYMBOLIC 0x12345678 +# LLVM32-NEXT: 0x00000011 REL 0x1000 +# LLVM32-NEXT: 0x00000012 RELSZ 16 (bytes) +# LLVM32-NEXT: 0x00000013 RELENT 291 (bytes) +# LLVM32-NEXT: 0x00000014 PLTREL RELA +# LLVM32-NEXT: 0x00000015 DEBUG 0xFEDCBA09 +# LLVM32-NEXT: 0x00000016 TEXTREL 0x11223344 +# LLVM32-NEXT: 0x00000017 JMPREL 0x1000 +# LLVM32-NEXT: 0x00000018 BIND_NOW 0x88776655 +# LLVM32-NEXT: 0x00000019 INIT_ARRAY 0x1000 +# LLVM32-NEXT: 0x0000001A FINI_ARRAY 0x1000 +# LLVM32-NEXT: 0x0000001B INIT_ARRAYSZ 16 (bytes) +# LLVM32-NEXT: 0x0000001C FINI_ARRAYSZ 16 (bytes) +# LLVM32-NEXT: 0x0000001D RUNPATH Library runpath: [w] +# LLVM32-NEXT: 0x0000001E FLAGS ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} +# LLVM32-NEXT: 0x00000020 PREINIT_ARRAY 0x1000 +# LLVM32-NEXT: 0x00000021 PREINIT_ARRAYSZ 16 (bytes) +# LLVM32-NEXT: 0x00000022 SYMTAB_SHNDX 0x1000 +# LLVM32-NEXT: 0x00000023 RELRSZ 0x10 +# LLVM32-NEXT: 0x00000024 RELR 0x1000 +# LLVM32-NEXT: 0x00000025 RELRENT 0x4321 +# LLVM32-NEXT: 0x6000000F ANDROID_REL 0x1000 +# LLVM32-NEXT: 0x60000010 ANDROID_RELSZ 16 (bytes) +# LLVM32-NEXT: 0x60000011 ANDROID_RELA 0x1000 +# LLVM32-NEXT: 0x60000012 ANDROID_RELASZ 16 (bytes) +# LLVM32-NEXT: 0x6FFFE000 ANDROID_RELR 0x1000 +# LLVM32-NEXT: 0x6FFFE001 ANDROID_RELRSZ 0x10 +# LLVM32-NEXT: 0x6FFFE003 ANDROID_RELRENT 0x1234 +# LLVM32-NEXT: 0x6FFFFEF5 GNU_HASH 0x1000 +# LLVM32-NEXT: 0x6FFFFEF6 TLSDESC_PLT 0x1000 +# LLVM32-NEXT: 0x6FFFFEF7 TLSDESC_GOT 0x1000 +# LLVM32-NEXT: 0x6FFFFFF9 RELACOUNT 0 +# LLVM32-NEXT: 0x6FFFFFFA RELCOUNT 0 +# LLVM32-NEXT: 0x6FFFFFFB FLAGS_1 NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} +# LLVM32-NEXT: 0x6FFFFFF0 VERSYM 0x1000 +# LLVM32-NEXT: 0x6FFFFFFC VERDEF 0x1000 +# LLVM32-NEXT: 0x6FFFFFFD VERDEFNUM 0 +# LLVM32-NEXT: 0x6FFFFFFE VERNEED 0x1000 +# LLVM32-NEXT: 0x6FFFFFFF VERNEEDNUM 0 +# LLVM32-NEXT: 0x7FFFFFFD AUXILIARY Auxiliary library: [D] +# LLVM32-NEXT: 0x7FFFFFFE USED Not needed object: [U] +# LLVM32-NEXT: 0x7FFFFFFF FILTER Filter library: [U] +# LLVM32-NEXT: 0x12345678 0x12345678 0x87654321 +# LLVM32-NEXT: 0x6ABCDEF0 0x6abcdef0 0x99887766 +# LLVM32-NEXT: 0x76543210 0x76543210 0x55556666 +# LLVM32-NEXT: 0x00000000 NULL 0x0 +# LLVM32-NEXT:] + +# GNU32:Dynamic section at offset 0x84 contains 61 entries: +# GNU32-NEXT: Tag Type Name/Value +# GNU32-NEXT: 0x00000001 (NEEDED) Shared library: [D] +# GNU32-NEXT: 0x00000002 (PLTRELSZ) 16 (bytes) +# GNU32-NEXT: 0x00000003 (PLTGOT) 0x1000 +# GNU32-NEXT: 0x00000004 (HASH) 0x1000 +# GNU32-NEXT: 0x00000005 (STRTAB) 0x1000 +# GNU32-NEXT: 0x00000006 (SYMTAB) 0x1000 +# GNU32-NEXT: 0x00000007 (RELA) 0x1000 +# GNU32-NEXT: 0x00000008 (RELASZ) 16 (bytes) +# GNU32-NEXT: 0x00000009 (RELAENT) 1929 (bytes) +# GNU32-NEXT: 0x0000000a (STRSZ) 16 (bytes) +# GNU32-NEXT: 0x0000000b (SYMENT) 2439 (bytes) +# GNU32-NEXT: 0x0000000c (INIT) 0x1000 +# GNU32-NEXT: 0x0000000d (FINI) 0x1000 +# GNU32-NEXT: 0x0000000e (SONAME) Library soname: [U] +# GNU32-NEXT: 0x0000000f (RPATH) Library rpath: [f] +# GNU32-NEXT: 0x00000010 (SYMBOLIC) 0x12345678 +# GNU32-NEXT: 0x00000011 (REL) 0x1000 +# GNU32-NEXT: 0x00000012 (RELSZ) 16 (bytes) +# GNU32-NEXT: 0x00000013 (RELENT) 291 (bytes) +# GNU32-NEXT: 0x00000014 (PLTREL) RELA +# GNU32-NEXT: 0x00000015 (DEBUG) 0xfedcba09 +# GNU32-NEXT: 0x00000016 (TEXTREL) 0x11223344 +# GNU32-NEXT: 0x00000017 (JMPREL) 0x1000 +# GNU32-NEXT: 0x00000018 (BIND_NOW) 0x88776655 +# GNU32-NEXT: 0x00000019 (INIT_ARRAY) 0x1000 +# GNU32-NEXT: 0x0000001a (FINI_ARRAY) 0x1000 +# GNU32-NEXT: 0x0000001b (INIT_ARRAYSZ) 16 (bytes) +# GNU32-NEXT: 0x0000001c (FINI_ARRAYSZ) 16 (bytes) +# GNU32-NEXT: 0x0000001d (RUNPATH) Library runpath: [w] +# GNU32-NEXT: 0x0000001e (FLAGS) ORIGIN SYMBOLIC TEXTREL BIND_NOW STATIC_TLS {{$}} +# GNU32-NEXT: 0x00000020 (PREINIT_ARRAY) 0x1000 +# GNU32-NEXT: 0x00000021 (PREINIT_ARRAYSZ) 16 (bytes) +# GNU32-NEXT: 0x00000022 (SYMTAB_SHNDX) 0x1000 +# GNU32-NEXT: 0x00000023 (RELRSZ) 0x10 +# GNU32-NEXT: 0x00000024 (RELR) 0x1000 +# GNU32-NEXT: 0x00000025 (RELRENT) 0x4321 +# GNU32-NEXT: 0x6000000f (ANDROID_REL) 0x1000 +# GNU32-NEXT: 0x60000010 (ANDROID_RELSZ) 16 (bytes) +# GNU32-NEXT: 0x60000011 (ANDROID_RELA) 0x1000 +# GNU32-NEXT: 0x60000012 (ANDROID_RELASZ) 16 (bytes) +# GNU32-NEXT: 0x6fffe000 (ANDROID_RELR) 0x1000 +# GNU32-NEXT: 0x6fffe001 (ANDROID_RELRSZ) 0x10 +# GNU32-NEXT: 0x6fffe003 (ANDROID_RELRENT) 0x1234 +# GNU32-NEXT: 0x6ffffef5 (GNU_HASH) 0x1000 +# GNU32-NEXT: 0x6ffffef6 (TLSDESC_PLT) 0x1000 +# GNU32-NEXT: 0x6ffffef7 (TLSDESC_GOT) 0x1000 +# GNU32-NEXT: 0x6ffffff9 (RELACOUNT) 0 +# GNU32-NEXT: 0x6ffffffa (RELCOUNT) 0 +# GNU32-NEXT: 0x6ffffffb (FLAGS_1) NOW GLOBAL GROUP NODELETE LOADFLTR INITFIRST NOOPEN ORIGIN DIRECT TRANS INTERPOSE NODEFLIB NODUMP CONFALT ENDFILTEE DISPRELDNE DISPRELPND NODIRECT IGNMULDEF NOKSYMS NOHDR EDITED NORELOC SYMINTPOSE GLOBAUDIT SINGLETON {{$}} +# GNU32-NEXT: 0x6ffffff0 (VERSYM) 0x1000 +# GNU32-NEXT: 0x6ffffffc (VERDEF) 0x1000 +# GNU32-NEXT: 0x6ffffffd (VERDEFNUM) 0 +# GNU32-NEXT: 0x6ffffffe (VERNEED) 0x1000 +# GNU32-NEXT: 0x6fffffff (VERNEEDNUM) 0 +# GNU32-NEXT: 0x7ffffffd (AUXILIARY) Auxiliary library: [D] +# GNU32-NEXT: 0x7ffffffe (USED) Not needed object: [U] +# GNU32-NEXT: 0x7fffffff (FILTER) Filter library: [U] +# GNU32-NEXT: 0x12345678 (0x12345678) 0x87654321 +# GNU32-NEXT: 0x6abcdef0 (0x6abcdef0) 0x99887766 +# GNU32-NEXT: 0x76543210 (0x76543210) 0x55556666 +# GNU32-NEXT: 0x00000000 (NULL) 0x0 + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_386 +Sections: + - Name: .dynstr + Type: SHT_STRTAB + Address: 0x1000 + Size: 0x10 + Content: "004400550066007700" + - Name: .dynamic + Type: SHT_DYNAMIC + Address: 0x1010 + Entries: + - Tag: DT_NEEDED + Value: 0x1 + - Tag: DT_PLTRELSZ + Value: 0x10 + - Tag: DT_PLTGOT + Value: 0x1000 + - Tag: DT_HASH + Value: 0x1000 + - Tag: DT_STRTAB + Value: 0x1000 + - Tag: DT_SYMTAB + Value: 0x1000 + - Tag: DT_RELA + Value: 0x1000 + - Tag: DT_RELASZ + Value: 0x10 + - Tag: DT_RELAENT + Value: 0x789 + - Tag: DT_STRSZ + Value: 0x10 + - Tag: DT_SYMENT + Value: 0x987 + - Tag: DT_INIT + Value: 0x1000 + - Tag: DT_FINI + Value: 0x1000 + - Tag: DT_SONAME + Value: 0x3 + - Tag: DT_RPATH + Value: 0x5 + - Tag: DT_SYMBOLIC + Value: 0x12345678 + - Tag: DT_REL + Value: 0x1000 + - Tag: DT_RELSZ + Value: 0x10 + - Tag: DT_RELENT + Value: 0x123 + - Tag: DT_PLTREL + Value: 0x7 + - Tag: DT_DEBUG + Value: 0xfedcba09 + - Tag: DT_TEXTREL + Value: 0x11223344 + - Tag: DT_JMPREL + Value: 0x1000 + - Tag: DT_BIND_NOW + Value: 0x88776655 + - Tag: DT_INIT_ARRAY + Value: 0x1000 + - Tag: DT_FINI_ARRAY + Value: 0x1000 + - Tag: DT_INIT_ARRAYSZ + Value: 0x10 + - Tag: DT_FINI_ARRAYSZ + Value: 0x10 + - Tag: DT_RUNPATH + Value: 0x7 + - Tag: DT_FLAGS + Value: 0xffffffff + - Tag: DT_PREINIT_ARRAY + Value: 0x1000 + - Tag: DT_PREINIT_ARRAYSZ + Value: 0x10 + - Tag: DT_SYMTAB_SHNDX + Value: 0x1000 + - Tag: DT_RELRSZ + Value: 0x10 + - Tag: DT_RELR + Value: 0x1000 + - Tag: DT_RELRENT + Value: 0x4321 + - Tag: DT_ANDROID_REL + Value: 0x1000 + - Tag: DT_ANDROID_RELSZ + Value: 0x10 + - Tag: DT_ANDROID_RELA + Value: 0x1000 + - Tag: DT_ANDROID_RELASZ + Value: 0x10 + - Tag: DT_ANDROID_RELR + Value: 0x1000 + - Tag: DT_ANDROID_RELRSZ + Value: 0x10 + - Tag: DT_ANDROID_RELRENT + Value: 0x1234 + - Tag: DT_GNU_HASH + Value: 0x1000 + - Tag: DT_TLSDESC_PLT + Value: 0x1000 + - Tag: DT_TLSDESC_GOT + Value: 0x1000 + - Tag: DT_RELACOUNT + Value: 0x0 + - Tag: DT_RELCOUNT + Value: 0x0 + - Tag: DT_FLAGS_1 + Value: 0xffffffff + - Tag: DT_VERSYM + Value: 0x1000 + - Tag: DT_VERDEF + Value: 0x1000 + - Tag: DT_VERDEFNUM + Value: 0x0 + - Tag: DT_VERNEED + Value: 0x1000 + - Tag: DT_VERNEEDNUM + Value: 0x0 + - Tag: DT_AUXILIARY + Value: 0x1 + - Tag: DT_USED + Value: 0x3 + - Tag: DT_FILTER + Value: 0x3 +## Show behaviour for unknown values in special and un-marked ranges. +## An arbitrary unknown value outside of the special ranges. + - Tag: 0x12345678 + Value: 0x87654321 +## An OS specific tag. + - Tag: 0x6abcdef0 + Value: 0x99887766 +## A processor specific tags. + - Tag: 0x76543210 + Value: 0x55556666 + - Tag: DT_NULL + Value: 0x0 +ProgramHeaders: + - Type: PT_LOAD + VAddr: 0x1000 + Sections: + - Section: .dynstr + - Section: .dynamic + - Type: PT_DYNAMIC + VAddr: 0x1010 + Sections: + - Section: .dynamic Index: llvm/tools/llvm-objdump/ELFDump.cpp =================================================================== --- llvm/tools/llvm-objdump/ELFDump.cpp +++ llvm/tools/llvm-objdump/ELFDump.cpp @@ -163,12 +163,19 @@ ArrayRef DynamicEntries = unwrapOrError(Elf->dynamicEntries(), Filename); outs() << "Dynamic Section:\n"; + + size_t MaxTagLen = 0; + for (const typename ELFT::Dyn &Dyn : DynamicEntries) + MaxTagLen = + std::max(MaxTagLen, Elf->getDynamicTagAsString(Dyn.d_tag).size()); + std::string TagFmt = " %-" + std::to_string(MaxTagLen + 1) + "s"; + for (const typename ELFT::Dyn &Dyn : DynamicEntries) { if (Dyn.d_tag == ELF::DT_NULL) continue; std::string Str = Elf->getDynamicTagAsString(Dyn.d_tag); - outs() << format(" %-21s", Str.c_str()); + outs() << format(TagFmt.c_str(), Str.c_str()); const char *Fmt = ELFT::Is64Bits ? "0x%016" PRIx64 "\n" : "0x%08" PRIx64 "\n"; Index: llvm/tools/llvm-readobj/ELFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/ELFDumper.cpp +++ llvm/tools/llvm-readobj/ELFDumper.cpp @@ -257,7 +257,7 @@ std::pair findDynamic(const ELFFile *Obj); void loadDynamicTable(const ELFFile *Obj); - void parseDynamicTable(); + void parseDynamicTable(const ELFFile *Obj); Expected getSymbolVersion(const Elf_Sym *symb, bool &IsDefault) const; @@ -1868,7 +1868,7 @@ if (!DynamicPhdr || !DynamicSec) { if ((DynamicPhdr && IsPhdrTableValid) || (DynamicSec && IsSecTableValid)) { DynamicTable = DynamicPhdr ? FromPhdr : FromSec; - parseDynamicTable(); + parseDynamicTable(Obj); } else { reportWarning(createError("no valid dynamic table was found"), ObjF->getFileName()); @@ -1909,7 +1909,7 @@ DynamicTable = FromSec; } - parseDynamicTable(); + parseDynamicTable(Obj); } template @@ -1975,82 +1975,13 @@ ELFDumperStyle.reset(new LLVMStyle(Writer, this)); } -static const char *getTypeString(unsigned Arch, uint64_t Type) { -#define DYNAMIC_TAG(n, v) - switch (Arch) { - - case EM_AARCH64: - switch (Type) { -#define AARCH64_DYNAMIC_TAG(name, value) \ - case DT_##name: \ - return #name; -#include "llvm/BinaryFormat/DynamicTags.def" -#undef AARCH64_DYNAMIC_TAG - } - break; - - case EM_HEXAGON: - switch (Type) { -#define HEXAGON_DYNAMIC_TAG(name, value) \ - case DT_##name: \ - return #name; -#include "llvm/BinaryFormat/DynamicTags.def" -#undef HEXAGON_DYNAMIC_TAG - } - break; - - case EM_MIPS: - switch (Type) { -#define MIPS_DYNAMIC_TAG(name, value) \ - case DT_##name: \ - return #name; -#include "llvm/BinaryFormat/DynamicTags.def" -#undef MIPS_DYNAMIC_TAG - } - break; - - case EM_PPC64: - switch (Type) { -#define PPC64_DYNAMIC_TAG(name, value) \ - case DT_##name: \ - return #name; -#include "llvm/BinaryFormat/DynamicTags.def" -#undef PPC64_DYNAMIC_TAG - } - break; - } -#undef DYNAMIC_TAG - switch (Type) { -// Now handle all dynamic tags except the architecture specific ones -#define AARCH64_DYNAMIC_TAG(name, value) -#define MIPS_DYNAMIC_TAG(name, value) -#define HEXAGON_DYNAMIC_TAG(name, value) -#define PPC64_DYNAMIC_TAG(name, value) -// Also ignore marker tags such as DT_HIOS (maps to DT_VERNEEDNUM), etc. -#define DYNAMIC_TAG_MARKER(name, value) -#define DYNAMIC_TAG(name, value) \ - case DT_##name: \ - return #name; -#include "llvm/BinaryFormat/DynamicTags.def" -#undef DYNAMIC_TAG -#undef AARCH64_DYNAMIC_TAG -#undef MIPS_DYNAMIC_TAG -#undef HEXAGON_DYNAMIC_TAG -#undef PPC64_DYNAMIC_TAG -#undef DYNAMIC_TAG_MARKER - default: - return "unknown"; - } -} - -template void ELFDumper::parseDynamicTable() { +template +void ELFDumper::parseDynamicTable(const ELFFile *Obj) { auto toMappedAddr = [&](uint64_t Tag, uint64_t VAddr) -> const uint8_t * { auto MappedAddrOrError = ObjF->getELFFile()->toMappedAddr(VAddr); if (!MappedAddrOrError) { Error Err = - createError("Unable to parse DT_" + - Twine(getTypeString( - ObjF->getELFFile()->getHeader()->e_machine, Tag)) + + createError("Unable to parse DT_" + Obj->getDynamicTagAsString(Tag) + ": " + llvm::toString(MappedAddrOrError.takeError())); reportWarning(std::move(Err), ObjF->getFileName()); @@ -4040,6 +3971,15 @@ printRelocation(Obj, S.Sym, S.Name, R, IsRela); } +template +static size_t getMaxDynamicTagSize(const ELFFile *Elf, + typename ELFT::DynRange Tags) { + size_t Len = 0; + for (const typename ELFT::Dyn &Dyn : Tags) + Len = std::max(Len, Elf->getDynamicTagAsString(Dyn.d_tag).size()); + return Len; +} + template void GNUStyle::printDynamic(const ELFO *Obj) { Elf_Dyn_Range Table = this->dumper()->dynamic_table(); if (Table.empty()) @@ -4054,18 +3994,22 @@ 1) << " contains " << Table.size() << " entries:\n"; + size_t MaxTagSize = getMaxDynamicTagSize(Obj, Table); bool Is64 = ELFT::Is64Bits; if (Is64) - OS << " Tag Type Name/Value\n"; + OS << " Tag Type" << std::string(MaxTagSize - 1, ' ') + << "Name/Value\n"; else OS << " Tag Type Name/Value\n"; + + std::string TagFmt = + " %-" + std::to_string(MaxTagSize + 2) + "s "; for (auto Entry : Table) { uintX_t Tag = Entry.getTag(); - std::string TypeString = std::string("(") + - getTypeString(Obj->getHeader()->e_machine, Tag) + - ")"; + std::string TypeString = + std::string("(") + Obj->getDynamicTagAsString(Tag).c_str() + ")"; OS << " " << format_hex(Tag, Is64 ? 18 : 10) - << format(" %-20s ", TypeString.c_str()); + << format(TagFmt.c_str(), TypeString.c_str()); this->dumper()->printDynamicEntry(OS, Tag, Entry.getVal()); OS << "\n"; } @@ -5858,16 +5802,20 @@ raw_ostream &OS = W.getOStream(); W.startLine() << "DynamicSection [ (" << Table.size() << " entries)\n"; + size_t MaxTagSize = getMaxDynamicTagSize(Obj, Table); bool Is64 = ELFT::Is64Bits; if (Is64) - W.startLine() << " Tag Type Name/Value\n"; + W.startLine() << " Tag Type" + << std::string(MaxTagSize - 3, ' ') << "Name/Value\n"; else W.startLine() << " Tag Type Name/Value\n"; - for (auto Entry : Table) { + + std::string TagFmt = "%-" + std::to_string(MaxTagSize) + "s "; + for (const typename ELFT::Dyn &Entry : Table) { uintX_t Tag = Entry.getTag(); W.startLine() << " " << format_hex(Tag, Is64 ? 18 : 10, true) << " " - << format("%-21s", - getTypeString(Obj->getHeader()->e_machine, Tag)); + << format(TagFmt.c_str(), + Obj->getDynamicTagAsString(Tag).c_str()); this->dumper()->printDynamicEntry(OS, Tag, Entry.getVal()); OS << "\n"; }