1 // RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s -o -| llvm-objdump -r - | FileCheck %s
2 // RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj %s -o -| llvm-objdump -r - | FileCheck %s
4 // CHECK: RELOCATION RECORDS FOR [.rela.text]
6 .file "/home/espindola/llvm/llvm/test/CodeGen/AArch64/basic-pic.ll"
9 .type get_globalvar,@function
10 get_globalvar: // @get_globalvar
14 ldr x0, [x0, #:got_lo12:var]
18 .size get_globalvar, .Ltmp0-get_globalvar
21 // CHECK: R_AARCH64_ADR_GOT_PAGE var
22 // CHECK: R_AARCH64_LD64_GOT_LO12_NC var
24 .globl get_globalvaraddr
25 .type get_globalvaraddr,@function
26 get_globalvaraddr: // @get_globalvaraddr
30 ldr x0, [x0, #:got_lo12:var]
33 .size get_globalvaraddr, .Ltmp1-get_globalvaraddr
35 // CHECK: R_AARCH64_ADR_GOT_PAGE var
36 // CHECK: R_AARCH64_LD64_GOT_LO12_NC var
39 .type get_hiddenvar,@function
40 get_hiddenvar: // @get_hiddenvar
44 ldr w0, [x0, #:lo12:hiddenvar]
47 .size get_hiddenvar, .Ltmp2-get_hiddenvar
49 // CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar
50 // CHECK: R_AARCH64_LDST32_ABS_LO12_NC hiddenvar
52 .globl get_hiddenvaraddr
53 .type get_hiddenvaraddr,@function
54 get_hiddenvaraddr: // @get_hiddenvaraddr
58 add x0, x0, #:lo12:hiddenvar
61 .size get_hiddenvaraddr, .Ltmp3-get_hiddenvaraddr
63 // CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar
64 // CHECK: R_AARCH64_ADD_ABS_LO12_NC hiddenvar
67 .type get_func,@function
68 get_func: // @get_func
71 adrp x0, :got:get_func
72 ldr x0, [x0, #:got_lo12:get_func]
75 .size get_func, .Ltmp4-get_func
78 // Particularly important that the ADRP gets a relocation, LLVM tends to think
79 // it can relax it because it knows where get_func is. It can't!
80 // CHECK: R_AARCH64_ADR_GOT_PAGE get_func
81 // CHECK: R_AARCH64_LD64_GOT_LO12_NC get_func
83 .type var,@object // @var
91 .hidden hiddenvar // @hiddenvar
92 .type hiddenvar,@object