[llvm] r330038 - Add PPC64_GLINK dynamic tag.

Sean Fertile via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 13 09:42:48 PDT 2018


Author: sfertile
Date: Fri Apr 13 09:42:48 2018
New Revision: 330038

URL: http://llvm.org/viewvc/llvm-project?rev=330038&view=rev
Log:
Add PPC64_GLINK dynamic tag.

Add support for the PPC64_GLINK dynamic tag which is used in the ElfV2 abi.

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

Added:
    llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe   (with props)
    llvm/trunk/test/tools/llvm-readobj/ppc64-glink.test
Modified:
    llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def
    llvm/trunk/tools/llvm-readobj/ELFDumper.cpp

Modified: llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def?rev=330038&r1=330037&r2=330038&view=diff
==============================================================================
--- llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def (original)
+++ llvm/trunk/include/llvm/BinaryFormat/DynamicTags.def Fri Apr 13 09:42:48 2018
@@ -16,6 +16,11 @@
 #define MIPS_DYNAMIC_TAG_DEFINED
 #endif
 
+#ifndef PPC64_DYNAMIC_TAG
+#define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define PPC64_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef DYNAMIC_TAG_MARKER
 #define DYNAMIC_TAG_MARKER(name, value) DYNAMIC_TAG(name, value)
 #define DYNAMIC_TAG_MARKER_DEFINED
@@ -171,6 +176,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.
 
+// PPC64 specific dynamic table entries.
+PPC64_DYNAMIC_TAG(PPC64_GLINK, 0x70000000) // Address of 32 bytes before the
+                                           // first glink lazy resolver stub.
+
 // Sun machine-independent extensions.
 DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
 DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Shared object to get values from
@@ -181,7 +190,13 @@ DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Sh
 #endif
 #ifdef MIPS_DYNAMIC_TAG_DEFINED
 #undef MIPS_DYNAMIC_TAG
+#undef MIPS_DYNAMIC_TAG_DEFINED
 #endif
 #ifdef HEXAGON_DYNAMIC_TAG_DEFINED
 #undef HEXAGON_DYNAMIC_TAG
+#undef HEXAGON_DYNAMIC_TAG_DEFINED
+#endif
+#ifdef PPC64_DYNAMIC_TAG_DEFINED
+#undef PPC64_DYNAMIC_TAG
+#undef PPC64_DYNAMIC_TAG_DEFINED
 #endif

Added: llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe?rev=330038&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe (added) and llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe Fri Apr 13 09:42:48 2018 differ

Propchange: llvm/trunk/test/tools/llvm-readobj/Inputs/ppc64.exe
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/test/tools/llvm-readobj/ppc64-glink.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/ppc64-glink.test?rev=330038&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/ppc64-glink.test (added)
+++ llvm/trunk/test/tools/llvm-readobj/ppc64-glink.test Fri Apr 13 09:42:48 2018
@@ -0,0 +1,11 @@
+# Check DT_PPC64_GLINK dynamic tag.
+
+RUN: llvm-readobj -dynamic-table %p/Inputs/ppc64.exe | FileCheck %s
+
+CHECK: Format: ELF64-ppc64
+CHECK: Arch: powerpc64le
+CHECK: AddressSize: 64bit
+
+CHECK:      DynamicSection [ (25 entries)
+CHECK-NEXT:   Tag                Type                 Name/Value
+CHECK:        0x0000000070000000 PPC64_GLINK          0x10000830

Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=330038&r1=330037&r2=330038&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Fri Apr 13 09:42:48 2018
@@ -1551,6 +1551,7 @@ static const char *getTypeString(unsigne
 #include "llvm/BinaryFormat/DynamicTags.def"
 #undef HEXAGON_DYNAMIC_TAG
     }
+
   case EM_MIPS:
     switch (Type) {
 #define MIPS_DYNAMIC_TAG(name, value)                                          \
@@ -1559,12 +1560,22 @@ static const char *getTypeString(unsigne
 #include "llvm/BinaryFormat/DynamicTags.def"
 #undef MIPS_DYNAMIC_TAG
     }
+
+    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
+    }
   }
 #undef DYNAMIC_TAG
   switch (Type) {
 // Now handle all dynamic tags except the architecture specific ones
 #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)                                               \
@@ -1574,6 +1585,7 @@ static const char *getTypeString(unsigne
 #undef DYNAMIC_TAG
 #undef MIPS_DYNAMIC_TAG
 #undef HEXAGON_DYNAMIC_TAG
+#undef PPC64_DYNAMIC_TAG
 #undef DYNAMIC_TAG_MARKER
   default: return "unknown";
   }




More information about the llvm-commits mailing list