llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: Phoebe Wang (phoebewang)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/207661.diff


4 Files Affected:

- (modified) lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (+10) 
- (modified) llvm/include/llvm/BinaryFormat/DynamicTags.def (+15) 
- (modified) llvm/lib/Object/ELF.cpp (+10) 
- (modified) 
llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test (+46) 


``````````diff
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp 
b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index daf74bd3ba48e..d7eb03506cd9f 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -3828,6 +3828,14 @@ std::string static getDynamicTagAsString(uint16_t Arch, 
uint64_t Type) {
 #undef SPARC_DYNAMIC_TAG
     }
     break;
+
+  case llvm::ELF::EM_X86_64:
+    switch (Type) {
+#define X86_64_DYNAMIC_TAG(name, value) DYNAMIC_STRINGIFY_ENUM(name, value)
+#include "llvm/BinaryFormat/DynamicTags.def"
+#undef X86_64_DYNAMIC_TAG
+    }
+    break;
   }
 #undef DYNAMIC_TAG
   switch (Type) {
@@ -3839,6 +3847,7 @@ std::string static getDynamicTagAsString(uint16_t Arch, 
uint64_t Type) {
 #define PPC64_DYNAMIC_TAG(name, value)
 #define RISCV_DYNAMIC_TAG(name, value)
 #define SPARC_DYNAMIC_TAG(name, value)
+#define X86_64_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)                                               
\
@@ -3853,6 +3862,7 @@ std::string static getDynamicTagAsString(uint16_t Arch, 
uint64_t Type) {
 #undef PPC64_DYNAMIC_TAG
 #undef RISCV_DYNAMIC_TAG
 #undef SPARC_DYNAMIC_TAG
+#undef X86_64_DYNAMIC_TAG
 #undef DYNAMIC_TAG_MARKER
 #undef DYNAMIC_STRINGIFY_ENUM
   default:
diff --git a/llvm/include/llvm/BinaryFormat/DynamicTags.def 
b/llvm/include/llvm/BinaryFormat/DynamicTags.def
index 75606e58da80d..c700044920575 100644
--- a/llvm/include/llvm/BinaryFormat/DynamicTags.def
+++ b/llvm/include/llvm/BinaryFormat/DynamicTags.def
@@ -41,6 +41,11 @@
 #define SPARC_DYNAMIC_TAG_DEFINED
 #endif
 
+#ifndef X86_64_DYNAMIC_TAG
+#define X86_64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define X86_64_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef DYNAMIC_TAG_MARKER
 #define DYNAMIC_TAG_MARKER(name, value) DYNAMIC_TAG(name, value)
 #define DYNAMIC_TAG_MARKER_DEFINED
@@ -248,6 +253,12 @@ RISCV_DYNAMIC_TAG(RISCV_VARIANT_CC, 0x70000001)
 
 SPARC_DYNAMIC_TAG(SPARC_REGISTER, 0x70000001)
 
+// x86-64 specific dynamic table entry tags.
+
+X86_64_DYNAMIC_TAG(X86_64_PLT, 0x70000000)    // Address of PLT table.
+X86_64_DYNAMIC_TAG(X86_64_PLTSZ, 0x70000001)  // Size of PLT table in bytes.
+X86_64_DYNAMIC_TAG(X86_64_PLTENT, 0x70000003) // Size of a PLT entry in bytes.
+
 // Sun machine-independent extensions.
 DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
 DYNAMIC_TAG(USED, 0x7FFFFFFE)      // Same as DT_NEEDED
@@ -286,3 +297,7 @@ DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Shared object to get 
values from
 #undef SPARC_DYNAMIC_TAG
 #undef SPARC_DYNAMIC_TAG_DEFINED
 #endif
+#ifdef X86_64_DYNAMIC_TAG_DEFINED
+#undef X86_64_DYNAMIC_TAG
+#undef X86_64_DYNAMIC_TAG_DEFINED
+#endif
diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp
index 5dbdecc9915b0..48dd225932ba8 100644
--- a/llvm/lib/Object/ELF.cpp
+++ b/llvm/lib/Object/ELF.cpp
@@ -598,6 +598,14 @@ std::string ELFFile<ELFT>::getDynamicTagAsString(unsigned 
Arch,
 #undef SPARC_DYNAMIC_TAG
     }
     break;
+
+  case ELF::EM_X86_64:
+    switch (Type) {
+#define X86_64_DYNAMIC_TAG(name, value) DYNAMIC_STRINGIFY_ENUM(name, value)
+#include "llvm/BinaryFormat/DynamicTags.def"
+#undef X86_64_DYNAMIC_TAG
+    }
+    break;
   }
 #undef DYNAMIC_TAG
   switch (Type) {
@@ -609,6 +617,7 @@ std::string ELFFile<ELFT>::getDynamicTagAsString(unsigned 
Arch,
 #define PPC64_DYNAMIC_TAG(name, value)
 #define RISCV_DYNAMIC_TAG(name, value)
 #define SPARC_DYNAMIC_TAG(name, value)
+#define X86_64_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 value: return #name;
@@ -621,6 +630,7 @@ std::string ELFFile<ELFT>::getDynamicTagAsString(unsigned 
Arch,
 #undef PPC64_DYNAMIC_TAG
 #undef RISCV_DYNAMIC_TAG
 #undef SPARC_DYNAMIC_TAG
+#undef X86_64_DYNAMIC_TAG
 #undef DYNAMIC_TAG_MARKER
 #undef DYNAMIC_STRINGIFY_ENUM
   default:
diff --git 
a/llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test 
b/llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
index 9a338a852ffe7..fcc365e528dea 100644
--- a/llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
+++ b/llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
@@ -483,3 +483,49 @@ ProgramHeaders:
   - Type:     PT_DYNAMIC
     FirstSec: .dynamic
     LastSec:  .dynamic
+
+## Case 8: Test that x86-64 machine-specific tags can be dumped.
+# RUN: yaml2obj --docnum=8 %s -o %t.x86_64
+# RUN: llvm-readobj --dynamic-table %t.x86_64 | FileCheck %s 
--check-prefix=LLVM-X86_64
+# RUN: llvm-readelf --dynamic-table %t.x86_64 | FileCheck %s 
--check-prefix=GNU-X86_64
+
+# LLVM-X86_64:      DynamicSection [ (4 entries)
+# LLVM-X86_64-NEXT:   Tag                Type          Name/Value
+# LLVM-X86_64-NEXT:   0x0000000070000000 X86_64_PLT    0x401020
+# LLVM-X86_64-NEXT:   0x0000000070000001 X86_64_PLTSZ  0x20
+# LLVM-X86_64-NEXT:   0x0000000070000003 X86_64_PLTENT 0x10
+# LLVM-X86_64-NEXT:   0x0000000000000000 NULL          0x0
+# LLVM-X86_64-NEXT: ]
+
+# GNU-X86_64:      Dynamic section at offset {{.*}} contains 4 entries:
+# GNU-X86_64-NEXT:   Tag                Type            Name/Value
+# GNU-X86_64-NEXT:   0x0000000070000000 (X86_64_PLT)    0x401020
+# GNU-X86_64-NEXT:   0x0000000070000001 (X86_64_PLTSZ)  0x20
+# GNU-X86_64-NEXT:   0x0000000070000003 (X86_64_PLTENT) 0x10
+# GNU-X86_64-NEXT:   0x0000000000000000 (NULL)          0x0
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name: .dynamic
+    Type: SHT_DYNAMIC
+    Entries:
+      - Tag:   DT_X86_64_PLT
+        Value: 0x401020
+      - Tag:   DT_X86_64_PLTSZ
+        Value: 0x20
+      - Tag:   DT_X86_64_PLTENT
+        Value: 0x10
+      - Tag:   DT_NULL
+        Value: 0
+ProgramHeaders:
+  - Type:     PT_LOAD
+    FirstSec: .dynamic
+    LastSec:  .dynamic
+  - Type:     PT_DYNAMIC
+    FirstSec: .dynamic
+    LastSec:  .dynamic

``````````

</details>


https://github.com/llvm/llvm-project/pull/207661
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to