]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/aarch64-undefined-weak.s
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / ELF / aarch64-undefined-weak.s
1 // REQUIRES: aarch64
2 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux %s -o %t
3 // RUN: ld.lld %t -o %t2 2>&1
4 // RUN: llvm-objdump -triple=aarch64-none-linux -d %t2 | FileCheck %s
5
6 // Check that the ARM 64-bit ABI rules for undefined weak symbols are applied.
7 // Branch instructions are resolved to the next instruction. Undefined
8 // Symbols in relative are resolved to the place so S - P + A = A.
9
10  .weak target
11
12  .text
13  .global _start
14 _start:
15 // R_AARCH64_JUMP26
16  b target
17 // R_AARCH64_CALL26
18  bl target
19 // R_AARCH64_CONDBR19
20  b.eq target
21 // R_AARCH64_TSTBR14
22  cbz x1, target
23 // R_AARCH64_ADR_PREL_LO21
24  adr x0, target
25 // R_AARCH64_ADR_PREL_PG_HI21
26  adrp x0, target
27 // R_AARCH64_PREL32
28  .word target - .
29 // R_AARCH64_PREL64
30  .xword target - .
31 // R_AARCH64_PREL16
32  .hword target - .
33 // R_AARCH64_LD_PREL_LO19
34  ldr x8, target
35
36 // CHECK: Disassembly of section .text:
37 // 131072 = 0x20000
38 // CHECK:         20000: {{.*}} b       #4
39 // CHECK-NEXT:    20004: {{.*}} bl      #4
40 // CHECK-NEXT:    20008: {{.*}} b.eq    #4
41 // CHECK-NEXT:    2000c: {{.*}} cbz     x1, #4
42 // CHECK-NEXT:    20010: {{.*}} adr     x0, #0
43 // CHECK-NEXT:    20014: {{.*}} adrp    x0, #-131072
44 // CHECK:         20018: {{.*}} .word   0x00000000
45 // CHECK-NEXT:    2001c: {{.*}} .word   0x00000000
46 // CHECK-NEXT:    20020: {{.*}} .word   0x00000000
47 // CHECK-NEXT:    20024: {{.*}} .short  0x0000
48 // CHECK:         $x.2:
49 // CHECK-NEXT:    20026: {{.*}} ldr     x8, #0