Mercurial > hg > CbC > CbC_llvm
diff test/MC/AArch64/basic-pic.s @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 3a76565eade5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/MC/AArch64/basic-pic.s Thu Dec 12 13:56:28 2013 +0900 @@ -0,0 +1,98 @@ +// 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 + +