// RUN: llvm-mc -triple=aarch64-none-linux-gnu -filetype=obj %s -o -| llvm-objdump -r - | FileCheck %s // RUN: llvm-mc -triple=arm64-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