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