Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / ExecutionEngine / RuntimeDyld / Mips / ELF_Mips64r2N64_PIC_relocations.s
blob18e686706db28bf12eb4aa91a0669c48d53efab1
1 # RUN: rm -rf %t && mkdir -p %t
2 # RUN: llvm-mc -triple=mips64el-unknown-linux -filetype=obj -o %t/test_ELF_Mips64N64.o %s
3 # RUN: llc -mtriple=mips64el-unknown-linux -filetype=obj -o %t/test_ELF_ExternalFunction_Mips64N64.o %S/Inputs/ExternalFunction.ll
4 # RUN: llvm-rtdyld -triple=mips64el-unknown-linux -verify -map-section test_ELF_Mips64N64.o,.text=0x1000 -map-section test_ELF_ExternalFunction_Mips64N64.o,.text=0x10000 -check=%s %t/test_ELF_Mips64N64.o %t/test_ELF_ExternalFunction_Mips64N64.o
6 # RUN: llvm-mc -triple=mips64-unknown-linux -filetype=obj -o %t/test_ELF_Mips64N64.o %s
7 # RUN: llc -mtriple=mips64-unknown-linux -filetype=obj -o %t/test_ELF_ExternalFunction_Mips64N64.o %S/Inputs/ExternalFunction.ll
8 # RUN: llvm-rtdyld -triple=mips64-unknown-linux -verify -map-section test_ELF_Mips64N64.o,.text=0x1000 -map-section test_ELF_ExternalFunction_Mips64N64.o,.text=0x10000 -check=%s %t/test_ELF_Mips64N64.o %t/test_ELF_ExternalFunction_Mips64N64.o
10 .data
11 # Test R_MIPS_PC32 relocation.
12 # rtdyld-check: *{4}(R_MIPS_PC32) = (foo - R_MIPS_PC32)[31:0]
13 R_MIPS_PC32:
14 .word foo-.
15 # rtdyld-check: *{4}(R_MIPS_PC32 + 4) = (foo - tmp1)[31:0]
16 tmp1:
17 .4byte foo-tmp1
19 .text
20 .abicalls
21 .section .mdebug.abi64,"",@progbits
22 .nan legacy
23 .file "ELF_Mips64N64_PIC_relocations.ll"
24 .text
25 .globl bar
26 .align 3
27 .type bar,@function
28 .set nomicromips
29 .set nomips16
30 .ent bar
31 bar:
32 .frame $fp,40,$ra
33 .mask 0x00000000,0
34 .fmask 0x00000000,0
35 .set noreorder
36 .set nomacro
37 .set noat
38 daddiu $sp, $sp, -40
39 sd $ra, 32($sp)
40 sd $fp, 24($sp)
41 move $fp, $sp
42 sd $4, 16($fp)
43 lb $2, 0($4)
44 sd $4, 8($fp)
46 # Test R_MIPS_26 relocation.
47 # rtdyld-check: decode_operand(insn1, 0)[27:0] = stub_addr(test_ELF_Mips64N64.o/.text, foo)[27:0]
48 insn1:
49 .option pic0
50 jal foo
51 .option pic2
52 nop
54 # Test R_MIPS_PC16 relocation.
55 # rtdyld-check: decode_operand(insn2, 1)[17:0] = (foo - insn2)[17:0]
56 insn2:
57 bal foo
58 nop
60 move $sp, $fp
61 ld $ra, 32($sp)
62 ld $fp, 24($sp)
63 daddiu $sp, $sp, 32
64 jr $ra
65 nop
66 .set at
67 .set macro
68 .set reorder
69 .end bar
70 $func_end0:
71 .size bar, ($func_end0)-bar
73 .globl main
74 .align 3
75 .type main,@function
76 .set nomicromips
77 .set nomips16
78 .ent main
79 main:
80 .frame $fp,32,$ra
81 .mask 0x00000000,0
82 .fmask 0x00000000,0
83 .set noreorder
84 .set nomacro
85 .set noat
86 daddiu $sp, $sp, -32
87 sd $ra, 24($sp)
88 sd $fp, 16($sp)
89 sd $gp, 8($sp)
90 move $fp, $sp
92 # Check upper 16-bits of offset between the address of main function
93 # and the global offset table.
94 # rtdyld-check: decode_operand(insn3, 1)[15:0] = ((section_addr(test_ELF_Mips64N64.o, .got) + 0x7ff0) - main + 0x8000)[31:16]
95 insn3:
96 lui $1, %hi(%neg(%gp_rel(main)))
97 daddu $1, $1, $25
99 # Check lower 16-bits of offset between the address of main function
100 # and the global offset table.
101 # rtdyld-check: decode_operand(insn4, 2)[15:0] = ((section_addr(test_ELF_Mips64N64.o, .got) + 0x7ff0) - main)[15:0]
102 insn4:
103 daddiu $1, $1, %lo(%neg(%gp_rel(main)))
104 sw $zero, 4($fp)
106 # $gp register contains address of the .got section + 0x7FF0. 0x7FF0 is
107 # the offset of $gp from the beginning of the .got section. Check that we are
108 # loading address of the page pointer from correct offset. In this case
109 # the page pointer is the first entry in the .got section, so offset will be
110 # 0 - 0x7FF0.
111 # rtdyld-check: decode_operand(insn5, 2)[15:0] = 0x8010
113 # Check that the global offset table contains the page pointer.
114 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got)) = (_str + 0x8000) & 0xffffffffffff0000
115 insn5:
116 ld $25, %got_page(_str)($1)
118 # Check the offset of _str from the page pointer.
119 # rtdyld-check: decode_operand(insn6, 2)[15:0] = _str[15:0]
120 insn6:
121 daddiu $25, $25, %got_ofst(_str)
123 # Check that we are loading address of var from correct offset. In this case
124 # var is the second entry in the .got section, so offset will be 8 - 0x7FF0.
125 # rtdyld-check: decode_operand(insn7, 2)[15:0] = 0x8018
127 # Check that the global offset table contains the address of the var.
128 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got) + 8) = var
129 insn7:
130 ld $2, %got_disp(var)($1)
131 sd $25, 0($2)
133 # Check that we are loading address of bar from correct offset. In this case
134 # bar is the third entry in the .got section, so offset will be 16 - 0x7FF0.
135 # rtdyld-check: decode_operand(insn8, 2)[15:0] = 0x8020
137 # Check that the global offset table contains the address of the bar.
138 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got) + 16) = bar
139 insn8:
140 ld $2, %call16(bar)($1)
142 move $4, $25
143 move $gp, $1
144 move $25, $2
145 jalr $25
147 move $sp, $fp
148 ld $gp, 8($sp)
149 ld $fp, 16($sp)
150 ld $ra, 24($sp)
151 daddiu $sp, $sp, 32
152 jr $ra
154 .set at
155 .set macro
156 .set reorder
157 .end main
158 $func_end1:
159 .size main, ($func_end1)-main
161 .type _str,@object
162 .section .rodata.str1.1,"aMS",@progbits,1
163 _str:
164 .asciz "test"
165 .size _str, 5
167 .type var,@object
168 .comm var,8,8
170 .section ".note.GNU-stack","",@progbits
171 .text