diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-10-28 20:40:20 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-10-28 20:40:20 +0000 |
commit | 164bd156fc92dc738e5f8dce5da263e1d17211c4 (patch) | |
tree | abf8c795d4afcef4aa5e97d4e494f62ad21e77d4 /test/MC/AArch64 | |
parent | 1799684671805069cecdc2765b00b751fdbce19b (diff) | |
download | external_llvm-164bd156fc92dc738e5f8dce5da263e1d17211c4.zip external_llvm-164bd156fc92dc738e5f8dce5da263e1d17211c4.tar.gz external_llvm-164bd156fc92dc738e5f8dce5da263e1d17211c4.tar.bz2 |
Convert a llc -filetype=obj test into a llvm-mc test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193534 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/AArch64')
-rw-r--r-- | test/MC/AArch64/basic-pic.s | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/test/MC/AArch64/basic-pic.s b/test/MC/AArch64/basic-pic.s new file mode 100644 index 0000000..a10874d --- /dev/null +++ b/test/MC/AArch64/basic-pic.s @@ -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 + + |