summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2022-02-23 15:53:41 +0300
committerTom Stellard <tstellar@redhat.com>2022-03-01 16:46:37 -0800
commit4c9110a5f37b99d831887ebc1365cec7c3281f36 (patch)
tree50f2fc70f27755ee3ac198c47515080f9ad06c5e
parentce3d57ad61db88beba0126cade242c0c3ddc4cf5 (diff)
[MIPS] Recognize DT_MIPS_XHASH dynamic table tagllvmorg-14.0.0-rc2
LLVM tools do not emit `DT_MIPS_XHASH` dynamic table tag. But now `llvm-objdump` and `llvm-readelf` recognize this tag and print it. Fixes https://github.com/llvm/llvm-project/issues/53996 (cherry picked from commit 3c840e3c00e910c47a3f61f755fdc402d51e9fb6)
-rw-r--r--llvm/include/llvm/BinaryFormat/DynamicTags.def1
-rw-r--r--llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test3
-rw-r--r--llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test8
-rw-r--r--llvm/test/tools/obj2yaml/ELF/dynamic-section-arch-tags.yaml4
-rw-r--r--llvm/tools/llvm-readobj/ELFDumper.cpp1
5 files changed, 15 insertions, 2 deletions
diff --git a/llvm/include/llvm/BinaryFormat/DynamicTags.def b/llvm/include/llvm/BinaryFormat/DynamicTags.def
index 814d8b113ec4..ae25ec53813c 100644
--- a/llvm/include/llvm/BinaryFormat/DynamicTags.def
+++ b/llvm/include/llvm/BinaryFormat/DynamicTags.def
@@ -209,6 +209,7 @@ MIPS_DYNAMIC_TAG(MIPS_RWPLT, 0x70000034) // Points to the base
// of a writable PLT.
MIPS_DYNAMIC_TAG(MIPS_RLD_MAP_REL, 0x70000035) // Relative offset of run time loader
// map, used for debugging.
+MIPS_DYNAMIC_TAG(MIPS_XHASH, 0x70000036) // GNU-style hash table with xlat.
// PPC specific dynamic table entries.
PPC_DYNAMIC_TAG(PPC_GOT, 0x70000000) // Uses Secure PLT ABI.
diff --git a/llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test b/llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test
index 08d7d2e9c7c7..20219dd4893b 100644
--- a/llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test
+++ b/llvm/test/tools/llvm-objdump/ELF/dynamic-section-machine-specific.test
@@ -86,6 +86,7 @@ ProgramHeaders:
# MIPS-NEXT: MIPS_PLTGOT 0x0000000000001000
# MIPS-NEXT: MIPS_RWPLT 0x0000000000001000
# MIPS-NEXT: MIPS_RLD_MAP_REL 0x0000000000001000
+# MIPS-NEXT: MIPS_XHASH 0x0000000000002000
--- !ELF
FileHeader:
@@ -187,6 +188,8 @@ Sections:
Value: 0x1000
- Tag: DT_MIPS_RLD_MAP_REL
Value: 0x1000
+ - Tag: DT_MIPS_XHASH
+ Value: 0x2000
- Tag: DT_NULL
Value: 0
ProgramHeaders:
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 970edccd7777..c32ea33b9b3c 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
@@ -53,7 +53,7 @@ ProgramHeaders:
# RUN: llvm-readelf --dynamic-table %t.mips \
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=GNU-MIPS
-# LLVM-MIPS:DynamicSection [ (47 entries)
+# LLVM-MIPS:DynamicSection [ (48 entries)
# LLVM-MIPS-NEXT: Tag Type Name/Value
# LLVM-MIPS-NEXT: 0x0000000000000004 HASH 0x1000
# LLVM-MIPS-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 305419896
@@ -101,10 +101,11 @@ ProgramHeaders:
# LLVM-MIPS-NEXT: 0x0000000070000032 MIPS_PLTGOT 0x1000
# LLVM-MIPS-NEXT: 0x0000000070000034 MIPS_RWPLT 0x1000
# LLVM-MIPS-NEXT: 0x0000000070000035 MIPS_RLD_MAP_REL 0x1000
+# LLVM-MIPS-NEXT: 0x0000000070000036 MIPS_XHASH 0x2000
# LLVM-MIPS-NEXT: 0x0000000000000000 NULL 0x0
# LLVM-MIPS-NEXT:]
-# GNU-MIPS:Dynamic section at offset {{.*}} contains 47 entries:
+# GNU-MIPS:Dynamic section at offset {{.*}} contains 48 entries:
# GNU-MIPS-NEXT: Tag Type Name/Value
# GNU-MIPS-NEXT: 0x0000000000000004 (HASH) 0x1000
# GNU-MIPS-NEXT: 0x0000000070000001 (MIPS_RLD_VERSION) 305419896
@@ -152,6 +153,7 @@ ProgramHeaders:
# GNU-MIPS-NEXT: 0x0000000070000032 (MIPS_PLTGOT) 0x1000
# GNU-MIPS-NEXT: 0x0000000070000034 (MIPS_RWPLT) 0x1000
# GNU-MIPS-NEXT: 0x0000000070000035 (MIPS_RLD_MAP_REL) 0x1000
+# GNU-MIPS-NEXT: 0x0000000070000036 (MIPS_XHASH) 0x2000
# GNU-MIPS-NEXT: 0x0000000000000000 (NULL) 0x0
--- !ELF
@@ -256,6 +258,8 @@ Sections:
Value: 0x1000
- Tag: DT_MIPS_RLD_MAP_REL
Value: 0x1000
+ - Tag: DT_MIPS_XHASH
+ Value: 0x2000
- Tag: DT_NULL
Value: 0
ProgramHeaders:
diff --git a/llvm/test/tools/obj2yaml/ELF/dynamic-section-arch-tags.yaml b/llvm/test/tools/obj2yaml/ELF/dynamic-section-arch-tags.yaml
index 5523b2fee37d..538838ff7c1e 100644
--- a/llvm/test/tools/obj2yaml/ELF/dynamic-section-arch-tags.yaml
+++ b/llvm/test/tools/obj2yaml/ELF/dynamic-section-arch-tags.yaml
@@ -97,6 +97,8 @@
# MIPS-NEXT: Value: 0x2D
# MIPS-NEXT: - Tag: DT_MIPS_RLD_MAP_REL
# MIPS-NEXT: Value: 0x2E
+# MIPS-NEXT: - Tag: DT_MIPS_XHASH
+# MIPS-NEXT: Value: 0x2F
--- !ELF
FileHeader:
@@ -200,6 +202,8 @@ Sections:
Value: 0x000000000000002D
- Tag: DT_MIPS_RLD_MAP_REL
Value: 0x000000000000002E
+ - Tag: DT_MIPS_XHASH
+ Value: 0x000000000000002F
## Check we can handle Hexagon specific tags.
# RUN: yaml2obj --docnum=2 %s -o %t2
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 04a67225401f..3d43d1a72e7e 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -2265,6 +2265,7 @@ std::string ELFDumper<ELFT>::getDynamicEntry(uint64_t Type,
case DT_MIPS_PLTGOT:
case DT_MIPS_RWPLT:
case DT_MIPS_RLD_MAP_REL:
+ case DT_MIPS_XHASH:
return FormatHexValue(Value);
case DT_MIPS_FLAGS:
return FormatFlags(Value, makeArrayRef(ElfDynamicDTMipsFlags));