[lld] 8da88d4 - [lld-macho] Add test for a variety of arm64 relocations

Jez Ng via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 27 09:32:04 PST 2021


Author: Jez Ng
Date: 2021-02-27T12:31:34-05:00
New Revision: 8da88d4b605bd3e596fc26845969ba83a6bf076d

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

LOG: [lld-macho] Add test for a variety of arm64 relocations

Reviewed By: #lld-macho, smeenai

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

Added: 
    lld/test/MachO/arm64-relocs.s

Modified: 
    lld/test/MachO/compact-unwind.s

Removed: 
    


################################################################################
diff  --git a/lld/test/MachO/arm64-relocs.s b/lld/test/MachO/arm64-relocs.s
new file mode 100644
index 000000000000..0f3dd87ef113
--- /dev/null
+++ b/lld/test/MachO/arm64-relocs.s
@@ -0,0 +1,56 @@
+# REQUIRES: aarch64, shell
+# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %s -o %t.o
+# RUN: %lld -dylib -arch arm64 -lSystem -o %t %t.o
+# RUN: (llvm-objdump --syms %t; llvm-objdump --macho -d --section=__const %t) | FileCheck %s
+
+# CHECK-LABEL: SYMBOL TABLE:
+# CHECK-DAG:   [[#%x,PTR_1:]] l     O __DATA_CONST,__const _ptr_1
+# CHECK-DAG:   [[#%x,PTR_2:]] l     O __DATA_CONST,__const _ptr_2
+# CHECK-DAG:   [[#%x,BAR:]]   g     F __TEXT,__text _bar
+# CHECK-DAG:   [[#%x,BAZ:]]   g     O __DATA,__data _baz
+
+# CHECK-LABEL: _foo:
+## BRANCH26 relocations are 4-byte aligned, so 123 is truncated to 120
+# CHECK-NEXT:  bl	0x[[#BAR+120]]
+## PAGE21 relocations are aligned to 4096 bytes
+# CHECK-NEXT:  adrp	x2, [[#]] ; 0x[[#BAZ+4096-128]]
+# CHECK-NEXT:  ldr	x2, [x2, #128]
+# CHECK-NEXT:  ret
+
+# CHECK-LABEL: Contents of (__DATA_CONST,__const) section
+# CHECK:       [[#PTR_1]]	{{0*}}[[#BAZ]] 00000000 00000000 00000000
+# CHECK:       [[#PTR_2]]	{{0*}}[[#BAZ]] 00000000 00000000 00000000
+
+.text
+.globl _foo, _bar, _baz
+.p2align 2
+_foo:
+  ## Generates ARM64_RELOC_BRANCH26 and ARM64_RELOC_ADDEND
+  bl _bar + 123
+  ## Generates ARM64_RELOC_PAGE21 and ADDEND
+  adrp x2, _baz at PAGE + 4097
+  ## Generates ARM64_RELOC_PAGEOFF12
+  ldr x2, [x2, _baz at PAGEOFF]
+  ret
+
+.p2align 2
+_bar:
+  ret
+
+.data
+.space 128
+_baz:
+.space 1
+
+.section __DATA_CONST,__const
+## These generate ARM64_RELOC_UNSIGNED symbol relocations. llvm-mc seems to
+## generate UNSIGNED section relocations only for compact unwind sections, so
+## those relocations are being tested in compact-unwind.s.
+_ptr_1:
+  .quad _baz
+  .space 8
+_ptr_2:
+  .quad _baz
+  .space 8
+
+.subsections_via_symbols

diff  --git a/lld/test/MachO/compact-unwind.s b/lld/test/MachO/compact-unwind.s
index 3d853f8e9aa6..1d65d41964e0 100644
--- a/lld/test/MachO/compact-unwind.s
+++ b/lld/test/MachO/compact-unwind.s
@@ -1,11 +1,18 @@
-# REQUIRES: x86
+# REQUIRES: x86, aarch64
 # RUN: rm -rf %t; split-file %s %t
-# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin19.0.0 %t/my_personality.s -o %t/my_personality.o
-# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin19.0.0 %t/main.s -o %t/main.o
-# RUN: %lld -pie -lSystem -lc++ %t/my_personality.o %t/main.o -o %t/personality-first
-# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/personality-first | FileCheck %s --check-prefixes=FIRST,CHECK
-# RUN: %lld -pie -lSystem -lc++ %t/main.o %t/my_personality.o -o %t/personality-second
-# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/personality-second | FileCheck %s --check-prefixes=SECOND,CHECK
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin19.0.0 %t/my-personality.s -o %t/x86_64-my-personality.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin19.0.0 %t/main.s -o %t/x86_64-main.o
+# RUN: %lld -arch x86_64 -pie -lSystem -lc++ %t/x86_64-my-personality.o %t/x86_64-main.o -o %t/x86_64-personality-first
+# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/x86_64-personality-first | FileCheck %s --check-prefixes=FIRST,CHECK
+# RUN: %lld -arch x86_64 -pie -lSystem -lc++ %t/x86_64-main.o %t/x86_64-my-personality.o -o %t/x86_64-personality-second
+# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/x86_64-personality-second | FileCheck %s --check-prefixes=SECOND,CHECK
+
+# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin19.0.0 %t/my-personality.s -o %t/arm64-my-personality.o
+# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin19.0.0 %t/main.s -o %t/arm64-main.o
+# RUN: %lld -arch arm64 -pie -lSystem -lc++ %t/arm64-my-personality.o %t/arm64-main.o -o %t/arm64-personality-first
+# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/arm64-personality-first | FileCheck %s --check-prefixes=FIRST,CHECK
+# RUN: %lld -arch arm64 -pie -lSystem -lc++ %t/arm64-main.o %t/arm64-my-personality.o -o %t/arm64-personality-second
+# RUN: llvm-objdump --macho --unwind-info --syms --indirect-symbols --rebase %t/arm64-personality-second | FileCheck %s --check-prefixes=SECOND,CHECK
 
 # FIRST:      Indirect symbols for (__DATA_CONST,__got)
 # FIRST-NEXT: address                    index name
@@ -37,29 +44,32 @@
 # CHECK-NEXT: __DATA_CONST __got          0x{{[0-9a-f]*}}  pointer
 # CHECK-NOT:  __TEXT
 
-#--- my_personality.s
+#--- my-personality.s
 .globl _my_personality, _exception0
 .text
+.p2align 2
 _foo:
   .cfi_startproc
 ## This will generate a section relocation.
   .cfi_personality 155, _my_personality
   .cfi_lsda 16, _exception0
   .cfi_def_cfa_offset 16
-  retq
+  ret
   .cfi_endproc
 
+.p2align 2
 _bar:
   .cfi_startproc
 ## Check that we dedup references to the same statically-linked personality.
   .cfi_personality 155, _my_personality
   .cfi_lsda 16, _exception0
   .cfi_def_cfa_offset 16
-  retq
+  ret
   .cfi_endproc
 
+.p2align 2
 _my_personality:
-  retq
+  ret
 
 .section __TEXT,__gcc_except_tab
 _exception0:
@@ -69,14 +79,16 @@ _exception0:
 .globl _main, _my_personality, _exception1
 
 .text
+.p2align 2
 _main:
   .cfi_startproc
   .cfi_personality 155, ___gxx_personality_v0
   .cfi_lsda 16, _exception1
   .cfi_def_cfa_offset 16
-  retq
+  ret
   .cfi_endproc
 
+.p2align 2
 _baz:
   .cfi_startproc
 ## This will generate a symbol relocation. Check that we reuse the personality
@@ -84,7 +96,7 @@ _baz:
   .cfi_personality 155, _my_personality
   .cfi_lsda 16, _exception1
   .cfi_def_cfa_offset 16
-  retq
+  ret
   .cfi_endproc
 
 


        


More information about the llvm-commits mailing list