| // RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s -o -| llvm-objdump -r - | FileCheck %s | |
| // CHECK: RELOCATION RECORDS FOR [.rela.text] | |
| .file "/home/espindola/llvm/llvm/test/CodeGen/AArch64/basic-pic.ll" | |
| .text | |
| .globl get_globalvar | |
| .type get_globalvar,@function | |
| get_globalvar: // @get_globalvar | |
| .cfi_startproc | |
| // %bb.0: | |
| adrp x0, :got:var | |
| ldr x0, [x0, #:got_lo12:var] | |
| ldr w0, [x0] | |
| ret | |
| .Ltmp0: | |
| .size get_globalvar, .Ltmp0-get_globalvar | |
| .cfi_endproc | |
| // CHECK: R_AARCH64_ADR_GOT_PAGE var | |
| // CHECK: R_AARCH64_LD64_GOT_LO12_NC var | |
| .globl get_globalvaraddr | |
| .type get_globalvaraddr,@function | |
| get_globalvaraddr: // @get_globalvaraddr | |
| .cfi_startproc | |
| // %bb.0: | |
| adrp x0, :got:var | |
| ldr x0, [x0, #:got_lo12:var] | |
| ret | |
| .Ltmp1: | |
| .size get_globalvaraddr, .Ltmp1-get_globalvaraddr | |
| .cfi_endproc | |
| // CHECK: R_AARCH64_ADR_GOT_PAGE var | |
| // CHECK: R_AARCH64_LD64_GOT_LO12_NC var | |
| .globl get_hiddenvar | |
| .type get_hiddenvar,@function | |
| get_hiddenvar: // @get_hiddenvar | |
| .cfi_startproc | |
| // %bb.0: | |
| adrp x0, hiddenvar | |
| ldr w0, [x0, #:lo12:hiddenvar] | |
| ret | |
| .Ltmp2: | |
| .size get_hiddenvar, .Ltmp2-get_hiddenvar | |
| .cfi_endproc | |
| // CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar | |
| // CHECK: R_AARCH64_LDST32_ABS_LO12_NC hiddenvar | |
| .globl get_hiddenvaraddr | |
| .type get_hiddenvaraddr,@function | |
| get_hiddenvaraddr: // @get_hiddenvaraddr | |
| .cfi_startproc | |
| // %bb.0: | |
| adrp x0, hiddenvar | |
| add x0, x0, #:lo12:hiddenvar | |
| ret | |
| .Ltmp3: | |
| .size get_hiddenvaraddr, .Ltmp3-get_hiddenvaraddr | |
| .cfi_endproc | |
| // CHECK: R_AARCH64_ADR_PREL_PG_HI21 hiddenvar | |
| // CHECK: R_AARCH64_ADD_ABS_LO12_NC hiddenvar | |
| .globl get_func | |
| .type get_func,@function | |
| get_func: // @get_func | |
| .cfi_startproc | |
| // %bb.0: | |
| adrp x0, :got:get_func | |
| ldr x0, [x0, #:got_lo12:get_func] | |
| ret | |
| .Ltmp4: | |
| .size get_func, .Ltmp4-get_func | |
| .cfi_endproc | |
| // Particularly important that the ADRP gets a relocation, LLVM tends to think | |
| // it can relax it because it knows where get_func is. It can't! | |
| // CHECK: R_AARCH64_ADR_GOT_PAGE get_func | |
| // CHECK: R_AARCH64_LD64_GOT_LO12_NC get_func | |
| .type var,@object // @var | |
| .bss | |
| .globl var | |
| .align 2 | |
| var: | |
| .word 0 // 0x0 | |
| .size var, 4 | |
| .hidden hiddenvar // @hiddenvar | |
| .type hiddenvar,@object | |
| .globl hiddenvar | |
| .align 2 | |
| hiddenvar: | |
| .word 0 // 0x0 | |
| .size hiddenvar, 4 | |