[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