[llvm] r355001 - [llvm-objdump] Should print strings when dumping DT_RPATH, DT_RUNPATH, DT_SONAME, DT_AUXILIARY and DT_FILTER tags in dynamic section.
Xing GUO via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 27 08:37:15 PST 2019
Author: higuoxing
Date: Wed Feb 27 08:37:15 2019
New Revision: 355001
URL: http://llvm.org/viewvc/llvm-project?rev=355001&view=rev
Log:
[llvm-objdump] Should print strings when dumping DT_RPATH, DT_RUNPATH, DT_SONAME, DT_AUXILIARY and DT_FILTER tags in dynamic section.
Summary:
Before:
```
Dynamic Section:
NEEDED libpthread.so.0
...
NEEDED ld-linux-x86-64.so.2
RPATH 0x00000000001c2e61
```
After:
```
Dynamic Section:
NEEDED libpthread.so.0
...
NEEDED ld-linux-x86-64.so.2
RPATH $ORIGIN/../lib
```
Only a small problem here, I have no idea on choosing test case. I see there's a test
file(test/tools/llvm-objdump/private-headers-dynamic-section.test). But it has no DT_RPATH and DT_RUNPATH tags. Shall I replace the ELF file in the
Inputs dir by a new one?
Reviewers: jhenderson, grimar
Reviewed By: jhenderson
Subscribers: srhines, rupprecht, jfb, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58707
Added:
llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section.test
Modified:
llvm/trunk/tools/llvm-objdump/ELFDump.cpp
Added: llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section.test?rev=355001&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section.test Wed Feb 27 08:37:15 2019
@@ -0,0 +1,202 @@
+# RUN: yaml2obj %s > %t
+# RUN: llvm-objdump -p %t | FileCheck %s
+
+# 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
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+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: 0x1234567890abcdef
+ - Tag: DT_REL
+ Value: 0x1000
+ - Tag: DT_RELSZ
+ Value: 0x10
+ - Tag: DT_RELENT
+ Value: 0x123
+ - Tag: DT_PLTREL
+ Value: 0x7
+ - Tag: DT_DEBUG
+ Value: 0xfedcba0987654321
+ - Tag: DT_TEXTREL
+ Value: 0x1122334455667788
+ - Tag: DT_JMPREL
+ Value: 0x1000
+ - Tag: DT_BIND_NOW
+ Value: 0x8877665544332211
+ - 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: 0xaabbccddeeff9900
+ - 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
+ - Tag: DT_NULL
+ Value: 0x0
+ProgramHeaders:
+ - Type: PT_LOAD
+ VAddr: 0x1000
+ Sections:
+ - Section: .dynstr
+ - Section: .dynamic
+ - Type: PT_DYNAMIC
+ VAddr: 0x1010
+ Sections:
+ - Section: .dynamic
Modified: llvm/trunk/tools/llvm-objdump/ELFDump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/ELFDump.cpp?rev=355001&r1=355000&r2=355001&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/ELFDump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/ELFDump.cpp Wed Feb 27 08:37:15 2019
@@ -188,7 +188,9 @@ void printDynamicSection(const ELFFile<E
const char *Fmt =
ELFT::Is64Bits ? "0x%016" PRIx64 "\n" : "0x%08" PRIx64 "\n";
- if (Dyn.d_tag == ELF::DT_NEEDED) {
+ if (Dyn.d_tag == ELF::DT_NEEDED || Dyn.d_tag == ELF::DT_RPATH ||
+ Dyn.d_tag == ELF::DT_RUNPATH || Dyn.d_tag == ELF::DT_SONAME ||
+ Dyn.d_tag == ELF::DT_AUXILIARY || Dyn.d_tag == ELF::DT_FILTER) {
Expected<StringRef> StrTabOrErr = getDynamicStrTab(Elf);
if (StrTabOrErr) {
const char *Data = StrTabOrErr.get().data();
More information about the llvm-commits
mailing list