[llvm] e23c6cc - [aarch64/mac] Correctly disassemble @TLVPPAGE(OFF) relocs

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 10 07:41:35 PST 2021


Author: Nico Weber
Date: 2021-11-10T10:41:18-05:00
New Revision: e23c6cc54e36e453d69ef5bdf5a59a6c8dd5644a

URL: https://github.com/llvm/llvm-project/commit/e23c6cc54e36e453d69ef5bdf5a59a6c8dd5644a
DIFF: https://github.com/llvm/llvm-project/commit/e23c6cc54e36e453d69ef5bdf5a59a6c8dd5644a.diff

LOG: [aarch64/mac] Correctly disassemble @TLVPPAGE(OFF) relocs

`llvm-otool -tV foo.o` and `llvm-objdump --macho -d foo.o` would
previously fail on object files containing @TLVPPAGE or @TLVPPAGEOFF relocs.

Move llvm-objdump-specific test from
llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s to new
llvm/test/tools/llvm-objdump/MachO/disassemble-arm64-tlv-modifers.test
and put test for this fix to that new file.

Fixes PR52356.

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

Added: 
    llvm/test/tools/llvm-objdump/MachO/Inputs/macho-tlv.o
    llvm/test/tools/llvm-objdump/MachO/disassemble-arm64-tlv-modifers.s

Modified: 
    llvm/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp
    llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp b/llvm/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp
index 3f815ac8c3d05..5b6f06f8dbb40 100644
--- a/llvm/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp
+++ b/llvm/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp
@@ -34,7 +34,9 @@ getVariant(uint64_t LLVMDisassembler_VariantKind) {
   case LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF:
     return MCSymbolRefExpr::VK_GOTPAGEOFF;
   case LLVMDisassembler_VariantKind_ARM64_TLVP:
+    return MCSymbolRefExpr::VK_TLVPPAGE;
   case LLVMDisassembler_VariantKind_ARM64_TLVOFF:
+    return MCSymbolRefExpr::VK_TLVPPAGEOFF;
   default:
     llvm_unreachable("bad LLVMDisassembler_VariantKind");
   }

diff  --git a/llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s b/llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s
index 8ff07cd86b2b6..8a187e55165b5 100644
--- a/llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s
+++ b/llvm/test/MC/AArch64/arm64-tls-modifiers-darwin.s
@@ -1,5 +1,4 @@
 ; RUN: llvm-mc -triple=arm64-apple-ios7.0 %s -o - | FileCheck %s
-; RUN: llvm-mc -triple=arm64-apple-ios7.0 -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s --check-prefix=CHECK-OBJ
 
         adrp x2, _var at TLVPPAGE
         ldr x0, [x15, _var at TLVPPAGEOFF]
@@ -7,7 +6,3 @@
 ; CHECK: adrp x2, _var at TLVPPAG
 ; CHECK: ldr x0, [x15, _var at TLVPPAGEOFF]
 ; CHECK: add x30, x0, _var at TLVPPAGEOFF
-
-; CHECK-OBJ: 8 ARM64_RELOC_TLVP_LOAD_PAGEOFF12 _var
-; CHECK-OBJ: 4 ARM64_RELOC_TLVP_LOAD_PAGEOFF12 _var
-; CHECK-OBJ: 0 ARM64_RELOC_TLVP_LOAD_PAGE21 _var

diff  --git a/llvm/test/tools/llvm-objdump/MachO/Inputs/macho-tlv.o b/llvm/test/tools/llvm-objdump/MachO/Inputs/macho-tlv.o
new file mode 100644
index 0000000000000..2bbf2d78303ad
Binary files /dev/null and b/llvm/test/tools/llvm-objdump/MachO/Inputs/macho-tlv.o 
diff er

diff  --git a/llvm/test/tools/llvm-objdump/MachO/disassemble-arm64-tlv-modifers.s b/llvm/test/tools/llvm-objdump/MachO/disassemble-arm64-tlv-modifers.s
new file mode 100644
index 0000000000000..f188eb41424b0
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/MachO/disassemble-arm64-tlv-modifers.s
@@ -0,0 +1,21 @@
+; REQUIRES: aarch64-registered-target
+; RUN: llvm-mc -triple=arm64-apple-ios7.0 -filetype=obj %s -o %t.o
+
+adrp x2, _var at TLVPPAGE
+ldr x0, [x15, _var at TLVPPAGEOFF]
+add x30, x0, _var at TLVPPAGEOFF
+
+; RUN: llvm-objdump -rd %t.o | FileCheck %s --check-prefix=OBJDUMP
+; RUN: llvm-objdump --macho -d --full-leading-addr --no-show-raw-insn %t.o \
+; RUN:     | FileCheck %s --check-prefix=MACHO
+
+; OBJDUMP:      adrp x2, 0x0
+; OBJDUMP-NEXT:     0: ARM64_RELOC_TLVP_LOAD_PAGE21 _var
+; OBJDUMP-NEXT: ldr x0, [x15]
+; OBJDUMP-NEXT:     4: ARM64_RELOC_TLVP_LOAD_PAGEOFF12 _var
+; OBJDUMP-NEXT: add x30, x0, #0
+; OBJDUMP-NEXT:     8: ARM64_RELOC_TLVP_LOAD_PAGEOFF12 _var
+
+; MACHO:      0000000000000000 adrp x2, _var at TLVPPAGE
+; MACHO-NEXT: 0000000000000004 ldr x0, [x15, _var at TLVPPAGEOFF]
+; MACHO-NEXT: 0000000000000008 add x30, x0, _var at TLVPPAGEOFF


        


More information about the llvm-commits mailing list