xref: /aosp_15_r20/external/llvm/test/MC/AArch64/basic-pic.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s -o -| llvm-objdump -r - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker// CHECK: RELOCATION RECORDS FOR [.rela.text]
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker	.file	"/home/espindola/llvm/llvm/test/CodeGen/AArch64/basic-pic.ll"
6*9880d681SAndroid Build Coastguard Worker	.text
7*9880d681SAndroid Build Coastguard Worker	.globl	get_globalvar
8*9880d681SAndroid Build Coastguard Worker	.type	get_globalvar,@function
9*9880d681SAndroid Build Coastguard Workerget_globalvar:                          // @get_globalvar
10*9880d681SAndroid Build Coastguard Worker	.cfi_startproc
11*9880d681SAndroid Build Coastguard Worker// BB#0:
12*9880d681SAndroid Build Coastguard Worker	adrp	x0, :got:var
13*9880d681SAndroid Build Coastguard Worker	ldr	x0, [x0, #:got_lo12:var]
14*9880d681SAndroid Build Coastguard Worker	ldr	 w0, [x0]
15*9880d681SAndroid Build Coastguard Worker	ret
16*9880d681SAndroid Build Coastguard Worker.Ltmp0:
17*9880d681SAndroid Build Coastguard Worker	.size	get_globalvar, .Ltmp0-get_globalvar
18*9880d681SAndroid Build Coastguard Worker	.cfi_endproc
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADR_GOT_PAGE var
21*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_LD64_GOT_LO12_NC var
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker	.globl	get_globalvaraddr
24*9880d681SAndroid Build Coastguard Worker	.type	get_globalvaraddr,@function
25*9880d681SAndroid Build Coastguard Workerget_globalvaraddr:                      // @get_globalvaraddr
26*9880d681SAndroid Build Coastguard Worker	.cfi_startproc
27*9880d681SAndroid Build Coastguard Worker// BB#0:
28*9880d681SAndroid Build Coastguard Worker	adrp	x0, :got:var
29*9880d681SAndroid Build Coastguard Worker	ldr	x0, [x0, #:got_lo12:var]
30*9880d681SAndroid Build Coastguard Worker	ret
31*9880d681SAndroid Build Coastguard Worker.Ltmp1:
32*9880d681SAndroid Build Coastguard Worker	.size	get_globalvaraddr, .Ltmp1-get_globalvaraddr
33*9880d681SAndroid Build Coastguard Worker	.cfi_endproc
34*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADR_GOT_PAGE var
35*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_LD64_GOT_LO12_NC var
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker	.globl	get_hiddenvar
38*9880d681SAndroid Build Coastguard Worker	.type	get_hiddenvar,@function
39*9880d681SAndroid Build Coastguard Workerget_hiddenvar:                          // @get_hiddenvar
40*9880d681SAndroid Build Coastguard Worker	.cfi_startproc
41*9880d681SAndroid Build Coastguard Worker// BB#0:
42*9880d681SAndroid Build Coastguard Worker	adrp	x0, hiddenvar
43*9880d681SAndroid Build Coastguard Worker	ldr	w0, [x0, #:lo12:hiddenvar]
44*9880d681SAndroid Build Coastguard Worker	ret
45*9880d681SAndroid Build Coastguard Worker.Ltmp2:
46*9880d681SAndroid Build Coastguard Worker	.size	get_hiddenvar, .Ltmp2-get_hiddenvar
47*9880d681SAndroid Build Coastguard Worker	.cfi_endproc
48*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar
49*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_LDST32_ABS_LO12_NC hiddenvar
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker	.globl	get_hiddenvaraddr
52*9880d681SAndroid Build Coastguard Worker	.type	get_hiddenvaraddr,@function
53*9880d681SAndroid Build Coastguard Workerget_hiddenvaraddr:                      // @get_hiddenvaraddr
54*9880d681SAndroid Build Coastguard Worker	.cfi_startproc
55*9880d681SAndroid Build Coastguard Worker// BB#0:
56*9880d681SAndroid Build Coastguard Worker	adrp	x0, hiddenvar
57*9880d681SAndroid Build Coastguard Worker	add	x0, x0, #:lo12:hiddenvar
58*9880d681SAndroid Build Coastguard Worker	ret
59*9880d681SAndroid Build Coastguard Worker.Ltmp3:
60*9880d681SAndroid Build Coastguard Worker	.size	get_hiddenvaraddr, .Ltmp3-get_hiddenvaraddr
61*9880d681SAndroid Build Coastguard Worker	.cfi_endproc
62*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar
63*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADD_ABS_LO12_NC hiddenvar
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker	.globl	get_func
66*9880d681SAndroid Build Coastguard Worker	.type	get_func,@function
67*9880d681SAndroid Build Coastguard Workerget_func:                               // @get_func
68*9880d681SAndroid Build Coastguard Worker	.cfi_startproc
69*9880d681SAndroid Build Coastguard Worker// BB#0:
70*9880d681SAndroid Build Coastguard Worker	adrp	x0, :got:get_func
71*9880d681SAndroid Build Coastguard Worker	ldr	x0, [x0, #:got_lo12:get_func]
72*9880d681SAndroid Build Coastguard Worker	ret
73*9880d681SAndroid Build Coastguard Worker.Ltmp4:
74*9880d681SAndroid Build Coastguard Worker	.size	get_func, .Ltmp4-get_func
75*9880d681SAndroid Build Coastguard Worker	.cfi_endproc
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker// Particularly important that the ADRP gets a relocation, LLVM tends to think
78*9880d681SAndroid Build Coastguard Worker// it can relax it because it knows where get_func is. It can't!
79*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_ADR_GOT_PAGE get_func
80*9880d681SAndroid Build Coastguard Worker// CHECK: R_AARCH64_LD64_GOT_LO12_NC get_func
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker	.type	var,@object             // @var
83*9880d681SAndroid Build Coastguard Worker	.bss
84*9880d681SAndroid Build Coastguard Worker	.globl	var
85*9880d681SAndroid Build Coastguard Worker	.align	2
86*9880d681SAndroid Build Coastguard Workervar:
87*9880d681SAndroid Build Coastguard Worker	.word	0                       // 0x0
88*9880d681SAndroid Build Coastguard Worker	.size	var, 4
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker	.hidden	hiddenvar               // @hiddenvar
91*9880d681SAndroid Build Coastguard Worker	.type	hiddenvar,@object
92*9880d681SAndroid Build Coastguard Worker	.globl	hiddenvar
93*9880d681SAndroid Build Coastguard Worker	.align	2
94*9880d681SAndroid Build Coastguard Workerhiddenvar:
95*9880d681SAndroid Build Coastguard Worker	.word	0                       // 0x0
96*9880d681SAndroid Build Coastguard Worker	.size	hiddenvar, 4
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker
99