[llvm] r362569 - [llvm-objdump/llvm-readobj/obj2yaml/yaml2obj] Support DT_PPC_GOT and DT_PPC_OPT

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 4 18:36:48 PDT 2019


Author: maskray
Date: Tue Jun  4 18:36:48 2019
New Revision: 362569

URL: http://llvm.org/viewvc/llvm-project?rev=362569&view=rev
Log:
[llvm-objdump/llvm-readobj/obj2yaml/yaml2obj] Support DT_PPC_GOT and DT_PPC_OPT

In glibc, DT_PPC_GOT indicates that PowerPC32 Secure PLT ABI is used.
I plan to use it in D62464.

DT_PPC_OPT currently indicates if a TLSDESC inspired TLS optimization is
enabled.

Reviewed By: grimar, jhenderson, rupprecht

Differential Revision: https://reviews.llvm.org/D62851

Modified:
    llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def
    llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
    llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test
    llvm/trunk/test/tools/llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
    llvm/trunk/test/tools/llvm-readobj/elf-dynamic-tags-machine-specific.test
    llvm/trunk/test/tools/obj2yaml/dynamic-section-arch-tags.test

Modified: llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def (original)
+++ llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def Tue Jun  4 18:36:48 2019
@@ -21,6 +21,11 @@
 #define MIPS_DYNAMIC_TAG_DEFINED
 #endif
 
+#ifndef PPC_DYNAMIC_TAG
+#define PPC_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define PPC_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef PPC64_DYNAMIC_TAG
 #define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
 #define PPC64_DYNAMIC_TAG_DEFINED
@@ -199,6 +204,10 @@ MIPS_DYNAMIC_TAG(MIPS_RWPLT, 0x70000034)
 MIPS_DYNAMIC_TAG(MIPS_RLD_MAP_REL, 0x70000035)  // Relative offset of run time loader
                                                 // map, used for debugging.
 
+// PPC specific dynamic table entries.
+PPC_DYNAMIC_TAG(PPC_GOT, 0x70000000) // Uses Secure PLT ABI.
+PPC_DYNAMIC_TAG(PPC_OPT, 0x70000001) // Has TLS optimization.
+
 // PPC64 specific dynamic table entries.
 PPC64_DYNAMIC_TAG(PPC64_GLINK, 0x70000000) // Address of 32 bytes before the
                                            // first glink lazy resolver stub.
@@ -225,6 +234,10 @@ DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Sh
 #undef HEXAGON_DYNAMIC_TAG
 #undef HEXAGON_DYNAMIC_TAG_DEFINED
 #endif
+#ifdef PPC_DYNAMIC_TAG_DEFINED
+#undef PPC_DYNAMIC_TAG
+#undef PPC_DYNAMIC_TAG_DEFINED
+#endif
 #ifdef PPC64_DYNAMIC_TAG_DEFINED
 #undef PPC64_DYNAMIC_TAG
 #undef PPC64_DYNAMIC_TAG_DEFINED

Modified: llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/ELFYAML.cpp?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/ELFYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/ELFYAML.cpp Tue Jun  4 18:36:48 2019
@@ -683,6 +683,7 @@ void ScalarEnumerationTraits<ELFYAML::EL
 #define AARCH64_DYNAMIC_TAG(name, value)
 #define MIPS_DYNAMIC_TAG(name, value)
 #define HEXAGON_DYNAMIC_TAG(name, value)
+#define PPC_DYNAMIC_TAG(name, value)
 #define PPC64_DYNAMIC_TAG(name, value)
 // Ignore marker tags such as DT_HIOS (maps to DT_VERNEEDNUM), etc.
 #define DYNAMIC_TAG_MARKER(name, value)
@@ -711,6 +712,13 @@ void ScalarEnumerationTraits<ELFYAML::EL
 #undef HEXAGON_DYNAMIC_TAG
 #define HEXAGON_DYNAMIC_TAG(name, value)
     break;
+  case ELF::EM_PPC:
+#undef PPC_DYNAMIC_TAG
+#define PPC_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#include "llvm/BinaryFormat/DynamicTags.def"
+#undef PPC_DYNAMIC_TAG
+#define PPC_DYNAMIC_TAG(name, value)
+    break;
   case ELF::EM_PPC64:
 #undef PPC64_DYNAMIC_TAG
 #define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
@@ -725,6 +733,7 @@ void ScalarEnumerationTraits<ELFYAML::EL
 #undef AARCH64_DYNAMIC_TAG
 #undef MIPS_DYNAMIC_TAG
 #undef HEXAGON_DYNAMIC_TAG
+#undef PPC_DYNAMIC_TAG
 #undef PPC64_DYNAMIC_TAG
 #undef DYNAMIC_TAG_MARKER
 #undef STRINGIFY

Modified: llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/elf-dynamic-section-machine-specific.test Tue Jun  4 18:36:48 2019
@@ -1,4 +1,4 @@
-# Test that hexagon machine-specific tags can be dumped.
+## Test that hexagon machine-specific tags can be dumped.
 # RUN: yaml2obj --docnum=1 -o %t.hex \
 # RUN:          %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
 # RUN: llvm-objdump -p %t.hex | FileCheck %s --check-prefix=HEXAGON
@@ -11,7 +11,7 @@
 # HEXAGON-NEXT:   <unknown:>0x1234abcd 0x0000000000000001
 
 
-# Test that MIPS machine-specific tags can be dumped.
+## Test that MIPS machine-specific tags can be dumped.
 # RUN: yaml2obj --docnum=2 -o %t.mips \
 # RUN:          %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
 # RUN: llvm-objdump -p %t.mips | FileCheck %s --check-prefix=MIPS
@@ -66,12 +66,23 @@
 # MIPS-NEXT:   <unknown:>0x1234abcd 0x0000000000000001
 
 
-# Test that PPC64 machine-specific tags can be dumped.
+## Test that PPC machine-specific tags can be dumped.
 # RUN: yaml2obj --docnum=3 -o %t.ppc \
 # RUN:          %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
 # RUN: llvm-objdump -p %t.ppc | FileCheck %s --check-prefix=PPC
 
 # PPC:      Dynamic Section:
-# PPC-NEXT:   HASH                 0x0000000000001000
-# PPC-NEXT:   PPC64_GLINK          0x0000000000001000
-# PPC-NEXT:   <unknown:>0x1234abcd 0x0000000000000001
+# PPC-NEXT:   PPC_GOT              0x000200c0
+# PPC-NEXT:   PPC_OPT              0x00000001
+# PPC-NEXT:   <unknown:>0x1234abcd 0x00000001
+
+
+## Test that PPC64 machine-specific tags can be dumped.
+# RUN: yaml2obj --docnum=4 -o %t.ppc64 \
+# RUN:          %S/../llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
+# RUN: llvm-objdump -p %t.ppc64 | FileCheck %s --check-prefix=PPC64
+
+# PPC64:      Dynamic Section:
+# PPC64-NEXT:   HASH                 0x0000000000001000
+# PPC64-NEXT:   PPC64_GLINK          0x0000000000001000
+# PPC64-NEXT:   <unknown:>0x1234abcd 0x0000000000000001

Modified: llvm/trunk/test/tools/llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml (original)
+++ llvm/trunk/test/tools/llvm-readobj/Inputs/elf-dynamic-tags-machine-specific.yaml Tue Jun  4 18:36:48 2019
@@ -165,7 +165,43 @@ ProgramHeaders:
     Sections:
       - Section: .dynamic
 
-# Third document: PPC64
+# Third document: PPC
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2MSB
+  Type:    ET_EXEC
+  Machine: EM_PPC
+Sections:
+  - Name:    .dynstr
+    Type:    SHT_STRTAB
+    Address: 0x200
+    Size:    0x10
+    Content: "004400550066007700"
+  - Name:    .dynamic
+    Type:    SHT_DYNAMIC
+    Address: 0x20000
+    Entries:
+      - Tag:   DT_PPC_GOT
+        Value: 0x200c0
+      - Tag:   DT_PPC_OPT
+        Value: 1
+      - Tag:   0x1234abcd
+        Value: 0x1
+      - Tag:   DT_NULL
+        Value: 0
+ProgramHeaders:
+  - Type: PT_LOAD
+    VAddr: 0x1000
+    Sections:
+      - Section: .dynstr
+      - Section: .dynamic
+  - Type: PT_DYNAMIC
+    VAddr: 0x20000
+    Sections:
+      - Section: .dynamic
+
+# Fourth document: PPC64
 --- !ELF
 FileHeader:
   Class:   ELFCLASS64

Modified: llvm/trunk/test/tools/llvm-readobj/elf-dynamic-tags-machine-specific.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-dynamic-tags-machine-specific.test?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/elf-dynamic-tags-machine-specific.test (original)
+++ llvm/trunk/test/tools/llvm-readobj/elf-dynamic-tags-machine-specific.test Tue Jun  4 18:36:48 2019
@@ -132,28 +132,49 @@
 # GNU-MIPS-NEXT:   0x0000000000000000 (NULL)               0x0
 
 
-# Test that PPC64 machine-specific tags can be dumped.
+# Test that PPC machine-specific tags can be dumped.
 # RUN: yaml2obj --docnum=3 %S/Inputs/elf-dynamic-tags-machine-specific.yaml -o %t.ppc
 # RUN: llvm-readobj --dynamic-table %t.ppc | FileCheck %s --check-prefix=LLVM-PPC
 # RUN: llvm-readelf --dynamic-table %t.ppc | FileCheck %s --check-prefix=GNU-PPC
 
 # LLVM-PPC:      DynamicSection [ (4 entries)
-# LLVM-PPC-NEXT:   Tag                Type                 Name/Value
-# LLVM-PPC-NEXT:   0x0000000000000004 HASH                 0x1000
-# LLVM-PPC-NEXT:   0x0000000070000000 PPC64_GLINK          0x1000
-# LLVM-PPC-NEXT:   0x000000001234ABCD unknown              0x1
-# LLVM-PPC-NEXT:   0x0000000000000000 NULL                 0x0
+# LLVM-PPC-NEXT:   Tag        Type                 Name/Value
+# LLVM-PPC-NEXT:   0x70000000 PPC_GOT              0x200C0
+# LLVM-PPC-NEXT:   0x70000001 PPC_OPT              0x1
+# LLVM-PPC-NEXT:   0x1234ABCD unknown              0x1
+# LLVM-PPC-NEXT:   0x00000000 NULL                 0x0
 # LLVM-PPC-NEXT: ]
 
 # GNU-PPC:      Dynamic section at offset {{.*}} contains 4 entries:
-# GNU-PPC-NEXT:   Tag                Type                 Name/Value
-# GNU-PPC-NEXT:   0x0000000000000004 (HASH)               0x1000
-# GNU-PPC-NEXT:   0x0000000070000000 (PPC64_GLINK)        0x1000
-# GNU-PPC-NEXT:   0x000000001234abcd (unknown)            0x1
-# GNU-PPC-NEXT:   0x0000000000000000 (NULL)               0x0
+# GNU-PPC-NEXT:   Tag        Type                 Name/Value
+# GNU-PPC-NEXT:   0x70000000 (PPC_GOT)            0x200c0
+# GNU-PPC-NEXT:   0x70000001 (PPC_OPT)            0x1
+# GNU-PPC-NEXT:   0x1234abcd (unknown)            0x1
+# GNU-PPC-NEXT:   0x00000000 (NULL)               0x0
+
+
+# Test that PPC64 machine-specific tags can be dumped.
+# RUN: yaml2obj --docnum=4 %S/Inputs/elf-dynamic-tags-machine-specific.yaml -o %t.ppc64
+# RUN: llvm-readobj --dynamic-table %t.ppc64 | FileCheck %s --check-prefix=LLVM-PPC64
+# RUN: llvm-readelf --dynamic-table %t.ppc64 | FileCheck %s --check-prefix=GNU-PPC64
+
+# LLVM-PPC64:      DynamicSection [ (4 entries)
+# LLVM-PPC64-NEXT:   Tag                Type                 Name/Value
+# LLVM-PPC64-NEXT:   0x0000000000000004 HASH                 0x1000
+# LLVM-PPC64-NEXT:   0x0000000070000000 PPC64_GLINK          0x1000
+# LLVM-PPC64-NEXT:   0x000000001234ABCD unknown              0x1
+# LLVM-PPC64-NEXT:   0x0000000000000000 NULL                 0x0
+# LLVM-PPC64-NEXT: ]
+
+# GNU-PPC64:      Dynamic section at offset {{.*}} contains 4 entries:
+# GNU-PPC64-NEXT:   Tag                Type                 Name/Value
+# GNU-PPC64-NEXT:   0x0000000000000004 (HASH)               0x1000
+# GNU-PPC64-NEXT:   0x0000000070000000 (PPC64_GLINK)        0x1000
+# GNU-PPC64-NEXT:   0x000000001234abcd (unknown)            0x1
+# GNU-PPC64-NEXT:   0x0000000000000000 (NULL)               0x0
 
 # Test that AARCH64 machine-specific tags can be dumped.
-# RUN: yaml2obj --docnum=4 %S/Inputs/elf-dynamic-tags-machine-specific.yaml -o %t.aarch64
+# RUN: yaml2obj --docnum=5 %S/Inputs/elf-dynamic-tags-machine-specific.yaml -o %t.aarch64
 # RUN: llvm-readobj --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=LLVM-AARCH64
 # RUN: llvm-readelf --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=GNU-AARCH64
 

Modified: llvm/trunk/test/tools/obj2yaml/dynamic-section-arch-tags.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/obj2yaml/dynamic-section-arch-tags.test?rev=362569&r1=362568&r2=362569&view=diff
==============================================================================
--- llvm/trunk/test/tools/obj2yaml/dynamic-section-arch-tags.test (original)
+++ llvm/trunk/test/tools/obj2yaml/dynamic-section-arch-tags.test Tue Jun  4 18:36:48 2019
@@ -229,9 +229,33 @@ Sections:
       - Tag:             DT_HEXAGON_PLT
         Value:           0x0000000000000003
 
-## Check we can handle PPC64 specific tags.
+## Check we can handle PPC specific tags.
 # RUN: yaml2obj -docnum=3 %s -o %t3
-# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=EM_PPC64
+# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=EM_PPC
+
+# EM_PPC:      - Tag:             DT_PPC_GOT
+# EM_PPC-NEXT:   Value:           0x0000000000020000
+# EM_PPC-NEXT: - Tag:             DT_PPC_OPT
+# EM_PPC-NEXT:   Value:           0x0000000000000001
+
+--- !ELF
+FileHeader:
+  Class:             ELFCLASS32
+  Data:              ELFDATA2MSB
+  Type:              ET_REL
+  Machine:           EM_PPC
+Sections:
+  - Name:            .dynamic
+    Type:            SHT_DYNAMIC
+    Entries:
+      - Tag:             DT_PPC_GOT
+        Value:           0x0000000000020000
+      - Tag:             DT_PPC_OPT
+        Value:           0x0000000000000001
+
+## Check we can handle PPC64 specific tags.
+# RUN: yaml2obj -docnum=4 %s -o %t4
+# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=EM_PPC64
 
 # EM_PPC64:      - Tag:             DT_PPC64_GLINK
 # EM_PPC64-NEXT:   Value:           0x0000000000000001
@@ -250,7 +274,7 @@ Sections:
         Value:           0x0000000000000001
 
 ## Check we can handle AARCH64 specific tags.
-# RUN: yaml2obj -docnum=4 %s -o %t2
+# RUN: yaml2obj -docnum=5 %s -o %t2
 # RUN: obj2yaml %t2 | FileCheck %s --check-prefix=AARCH64
 
 # AARCH64:      - Tag:             DT_AARCH64_BTI_PLT
@@ -278,7 +302,7 @@ Sections:
 ## Here for EM_PPC64 we are trying to use DT_HEXAGON_SYMSZ
 ## instead of DT_PPC64_GLINK. They both have value of 0x70000000.
 
-# RUN: not yaml2obj -docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ERR
+# RUN: not yaml2obj -docnum=6 %s 2>&1 | FileCheck %s --check-prefix=ERR
 # ERR:      error: invalid hex64 number
 # ERR-NEXT: - Tag: DT_HEXAGON_SYMSZ
 




More information about the llvm-commits mailing list