|
11 | 11 | # RUN: ld.lld -shared -z now a.64.o c.64.o -o rel.64.so -z rel |
12 | 12 | # RUN: llvm-readobj -r -x .got rel.64.so | FileCheck --check-prefix=GD64-REL %s |
13 | 13 |
|
14 | | -## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented. |
15 | | -## Keep the dynamic relocations and hand them over to dynamic linker. |
| 14 | +## Transition from TLSDESC to IE/LE. |
16 | 15 |
|
17 | 16 | # RUN: ld.lld -e 0 -z now a.64.o c.64.o -o a.64.le |
18 | | -# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s |
| 17 | +# RUN: llvm-readelf -r a.64.le | FileCheck --check-prefix=NOREL %s |
| 18 | +# RUN: llvm-objdump --no-show-raw-insn -h -d a.64.le | FileCheck %s --check-prefix=LE64 |
19 | 19 |
|
20 | 20 | # RUN: ld.lld -e 0 -z now a.64.o c.64.so -o a.64.ie |
21 | 21 | # RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s |
| 22 | +# RUN: llvm-objdump --no-show-raw-insn -h -d a.64.ie | FileCheck %s --check-prefix=IE64 |
22 | 23 |
|
23 | 24 | # GD64-RELA: .rela.dyn { |
24 | 25 | # GD64-RELA-NEXT: 0x20568 R_LARCH_TLS_DESC64 - 0x1000 |
|
114 | 115 | # GD64-NEXT: jirl $ra, $ra, 0 |
115 | 116 | # GD64-NEXT: add.d $a6, $a0, $tp |
116 | 117 |
|
117 | | -# LE64-RELA: .rela.dyn { |
118 | | -# LE64-RELA-NEXT: 0x30318 R_LARCH_TLS_DESC64 - 0x8 |
119 | | -# LE64-RELA-NEXT: 0x30328 R_LARCH_TLS_DESC64 - 0x7FFFFFFF |
120 | | -# LE64-RELA-NEXT: 0x30338 R_LARCH_TLS_DESC64 - 0x80000000 |
121 | | -# LE64-RELA-NEXT: 0x30348 R_LARCH_TLS_DESC64 - 0x100000000 |
122 | | -# LE64-RELA-NEXT: 0x30358 R_LARCH_TLS_DESC64 - 0x10000000000000 |
123 | | -# LE64-RELA-NEXT: 0x30368 R_LARCH_TLS_DESC64 - 0x1000 |
124 | | -# LE64-RELA-NEXT: } |
125 | | -# LE64-RELA: Hex dump of section '.got': |
126 | | -# LE64-RELA-NEXT: 0x00030318 00000000 00000000 00000000 00000000 . |
127 | | -# LE64-RELA-NEXT: 0x00030328 00000000 00000000 00000000 00000000 . |
128 | | -# LE64-RELA-NEXT: 0x00030338 00000000 00000000 00000000 00000000 . |
129 | | -# LE64-RELA-NEXT: 0x00030348 00000000 00000000 00000000 00000000 . |
130 | | -# LE64-RELA-NEXT: 0x00030358 00000000 00000000 00000000 00000000 . |
131 | | -# LE64-RELA-NEXT: 0x00030368 00000000 00000000 00000000 00000000 . |
| 118 | +# NOREL: no relocations |
| 119 | + |
| 120 | +# LE64-LABEL: <.text>: |
| 121 | +## st_value(a) = 8 |
| 122 | +# LE64-NEXT: nop |
| 123 | +# LE64-NEXT: ori $a0, $zero, 8 |
| 124 | +# LE64-NEXT: nop |
| 125 | +# LE64-NEXT: nop |
| 126 | +# LE64-NEXT: nop |
| 127 | +# LE64-NEXT: nop |
| 128 | +# LE64-NEXT: nop |
| 129 | +# LE64-NEXT: add.d $a1, $a0, $tp |
| 130 | +## st_value(b) = 0x1000 |
| 131 | +# LE64-NEXT: lu12i.w $a0, 1 |
| 132 | +# LE64-NEXT: ori $a0, $a0, 0 |
| 133 | +# LE64-NEXT: nop |
| 134 | +# LE64-NEXT: nop |
| 135 | +# LE64-NEXT: nop |
| 136 | +# LE64-NEXT: nop |
| 137 | +# LE64-NEXT: nop |
| 138 | +# LE64-NEXT: add.d $a2, $a0, $tp |
| 139 | +## st_value(c) = 0x7fffffff |
| 140 | +# LE64-NEXT: lu12i.w $a0, 524287 |
| 141 | +# LE64-NEXT: ori $a0, $a0, 4095 |
| 142 | +# LE64-NEXT: nop |
| 143 | +# LE64-NEXT: nop |
| 144 | +# LE64-NEXT: nop |
| 145 | +# LE64-NEXT: nop |
| 146 | +# LE64-NEXT: nop |
| 147 | +# LE64-NEXT: add.d $a3, $a0, $tp |
| 148 | +## st_value(d) = 0x8000,0000 |
| 149 | +# LE64-NEXT: lu12i.w $a0, -524288 |
| 150 | +# LE64-NEXT: ori $a0, $a0, 0 |
| 151 | +# LE64-NEXT: lu32i.d $a0, 1 |
| 152 | +# LE64-NEXT: lu52i.d $a0, $a0, 1 |
| 153 | +# LE64-NEXT: nop |
| 154 | +# LE64-NEXT: nop |
| 155 | +# LE64-NEXT: nop |
| 156 | +# LE64-NEXT: add.d $a4, $a0, $tp |
| 157 | +## st_value(e) = 0x1,0000,0000 |
| 158 | +# LE64-NEXT: nop |
| 159 | +# LE64-NEXT: ori $a0, $zero, 0 |
| 160 | +# LE64-NEXT: lu32i.d $a0, 1 |
| 161 | +# LE64-NEXT: nop |
| 162 | +# LE64-NEXT: nop |
| 163 | +# LE64-NEXT: nop |
| 164 | +# LE64-NEXT: nop |
| 165 | +# LE64-NEXT: add.d $a5, $a0, $tp |
| 166 | +## st_value(f) = 0x10,0000,0000,0000 |
| 167 | +# LE64-NEXT: nop |
| 168 | +# LE64-NEXT: ori $a0, $zero, 0 |
| 169 | +# LE64-NEXT: nop |
| 170 | +# LE64-NEXT: lu52i.d $a0, $a0, 1 |
| 171 | +# LE64-NEXT: nop |
| 172 | +# LE64-NEXT: nop |
| 173 | +# LE64-NEXT: nop |
| 174 | +# LE64-NEXT: add.d $a6, $a0, $tp |
132 | 175 |
|
133 | 176 | # IE64-RELA: .rela.dyn { |
134 | | -# IE64-RELA-NEXT: 0x30508 R_LARCH_TLS_DESC64 - 0x8 |
135 | | -# IE64-RELA-NEXT: 0x30558 R_LARCH_TLS_DESC64 - 0x1000 |
136 | | -# IE64-RELA-NEXT: 0x30518 R_LARCH_TLS_DESC64 c 0x0 |
137 | | -# IE64-RELA-NEXT: 0x30528 R_LARCH_TLS_DESC64 d 0x0 |
138 | | -# IE64-RELA-NEXT: 0x30538 R_LARCH_TLS_DESC64 e 0x0 |
139 | | -# IE64-RELA-NEXT: 0x30548 R_LARCH_TLS_DESC64 f 0x0 |
| 177 | +# IE64-RELA-NEXT: 0x304D8 R_LARCH_TLS_TPREL64 c 0x0 |
| 178 | +# IE64-RELA-NEXT: 0x304E0 R_LARCH_TLS_TPREL64 d 0x0 |
| 179 | +# IE64-RELA-NEXT: 0x304E8 R_LARCH_TLS_TPREL64 e 0x0 |
| 180 | +# IE64-RELA-NEXT: 0x304F0 R_LARCH_TLS_TPREL64 f 0x0 |
140 | 181 | # IE64-RELA-NEXT: } |
141 | 182 | # IE64-RELA: Hex dump of section '.got': |
142 | | -# IE64-RELA-NEXT: 0x00030508 00000000 00000000 00000000 00000000 . |
143 | | -# IE64-RELA-NEXT: 0x00030518 00000000 00000000 00000000 00000000 . |
144 | | -# IE64-RELA-NEXT: 0x00030528 00000000 00000000 00000000 00000000 . |
145 | | -# IE64-RELA-NEXT: 0x00030538 00000000 00000000 00000000 00000000 . |
146 | | -# IE64-RELA-NEXT: 0x00030548 00000000 00000000 00000000 00000000 . |
147 | | -# IE64-RELA-NEXT: 0x00030558 00000000 00000000 00000000 00000000 . |
| 183 | +# IE64-RELA-NEXT: 0x000304d8 00000000 00000000 00000000 00000000 . |
| 184 | +# IE64-RELA-NEXT: 0x000304e8 00000000 00000000 00000000 00000000 . |
| 185 | + |
| 186 | +# IE64: .got 00000020 00000000000304d8 |
| 187 | + |
| 188 | +## a and b are optimized to use LE. c, d, e and f are optimized to IE. |
| 189 | +# IE64-LABEL: <.text>: |
| 190 | +## st_value(a) = 8 |
| 191 | +# IE64-NEXT: nop |
| 192 | +# IE64-NEXT: ori $a0, $zero, 8 |
| 193 | +# IE64-NEXT: nop |
| 194 | +# IE64-NEXT: nop |
| 195 | +# IE64-NEXT: nop |
| 196 | +# IE64-NEXT: nop |
| 197 | +# IE64-NEXT: nop |
| 198 | +# IE64-NEXT: add.d $a1, $a0, $tp |
| 199 | +## st_value(b) = 0x1000 |
| 200 | +# IE64-NEXT: lu12i.w $a0, 1 |
| 201 | +# IE64-NEXT: ori $a0, $a0, 0 |
| 202 | +# IE64-NEXT: nop |
| 203 | +# IE64-NEXT: nop |
| 204 | +# IE64-NEXT: nop |
| 205 | +# IE64-NEXT: nop |
| 206 | +# IE64-NEXT: nop |
| 207 | +# IE64-NEXT: add.d $a2, $a0, $tp |
| 208 | +## &.got[c]-. = 0x304d8 - 0x20378: 0x10 pages, page offset 0x4d8 |
| 209 | +# IE64-NEXT: 20378: pcalau12i $a0, 16 |
| 210 | +# IE64-NEXT: addi.d $t0, $zero, 1240 |
| 211 | +# IE64-NEXT: lu32i.d $t0, 0 |
| 212 | +# IE64-NEXT: lu52i.d $t0, $t0, 0 |
| 213 | +# IE64-NEXT: ldx.d $a0, $a0, $t0 |
| 214 | +# IE64-NEXT: nop |
| 215 | +# IE64-NEXT: nop |
| 216 | +# IE64-NEXT: add.d $a3, $a0, $tp |
| 217 | +## &.got[d]-. = 0x304d8+8 - 0x20398: 0x10 pages, page offset 0x4e0 |
| 218 | +# IE64-NEXT: 20398: pcalau12i $a0, 16 |
| 219 | +# IE64-NEXT: addi.d $t0, $zero, 1248 |
| 220 | +# IE64-NEXT: lu32i.d $t0, 0 |
| 221 | +# IE64-NEXT: lu52i.d $t0, $t0, 0 |
| 222 | +# IE64-NEXT: ldx.d $a0, $a0, $t0 |
| 223 | +# IE64-NEXT: nop |
| 224 | +# IE64-NEXT: nop |
| 225 | +# IE64-NEXT: add.d $a4, $a0, $tp |
| 226 | +## &.got[e]-. = 0x304d8+16 - 0x203b8: 0x10 pages, page offset 0x4e8 |
| 227 | +# IE64-NEXT: 203b8: pcalau12i $a0, 16 |
| 228 | +# IE64-NEXT: addi.d $t0, $zero, 1256 |
| 229 | +# IE64-NEXT: lu32i.d $t0, 0 |
| 230 | +# IE64-NEXT: lu52i.d $t0, $t0, 0 |
| 231 | +# IE64-NEXT: ldx.d $a0, $a0, $t0 |
| 232 | +# IE64-NEXT: nop |
| 233 | +# IE64-NEXT: nop |
| 234 | +# IE64-NEXT: add.d $a5, $a0, $tp |
| 235 | +## &.got[f]-. = 0x304d8+32 - 0x203e8: 0x10 pages, page offset 0x4f0 |
| 236 | +# IE64-NEXT: 203d8: pcalau12i $a0, 16 |
| 237 | +# IE64-NEXT: addi.d $t0, $zero, 1264 |
| 238 | +# IE64-NEXT: lu32i.d $t0, 0 |
| 239 | +# IE64-NEXT: lu52i.d $t0, $t0, 0 |
| 240 | +# IE64-NEXT: ldx.d $a0, $a0, $t0 |
| 241 | +# IE64-NEXT: nop |
| 242 | +# IE64-NEXT: nop |
| 243 | +# IE64-NEXT: add.d $a6, $a0, $tp |
148 | 244 |
|
149 | 245 | #--- a.s |
150 | 246 | la.tls.desc $a0, $t0, a |
|
0 commit comments