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