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