|
14 | 14 | # RUN: ld.lld -shared -z now a.64.o c.64.o -o rel.64.so -z rel |
15 | 15 | # RUN: llvm-readobj -r -x .got rel.64.so | FileCheck --check-prefix=GD64-REL %s |
16 | 16 |
|
17 | | -## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented. |
18 | | -## Keep the dynamic relocations and hand them over to dynamic linker. |
19 | | - |
| 17 | +## Transition from TLSDESC to IE/LE. |
20 | 18 | # RUN: ld.lld -e 0 -z now a.64.o c.64.o -o a.64.le |
21 | | -# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s |
| 19 | +# RUN: llvm-readobj -r -x .got a.64.le 2>&1 | FileCheck --check-prefix=LE64-RELA %s |
| 20 | +# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck --check-prefix=LE64 %s |
22 | 21 |
|
23 | 22 | # RUN: ld.lld -e 0 -z now a.64.o c.64.so -o a.64.ie |
24 | 23 | # RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s |
| 24 | +# RUN: llvm-objdump --no-show-raw-insn -d a.64.ie | FileCheck --check-prefix=IE64 %s |
25 | 25 |
|
26 | 26 | ## 32-bit code is mostly the same. We only test a few variants. |
27 | 27 |
|
|
68 | 68 | # GD64-NEXT: jirl $ra, $ra, 0 |
69 | 69 | # GD64-NEXT: add.d $a3, $a0, $tp |
70 | 70 |
|
71 | | -# LE64-RELA: .rela.dyn { |
72 | | -# LE64-RELA-NEXT: 0x30240 R_LARCH_TLS_DESC64 - 0x8 |
73 | | -# LE64-RELA-NEXT: 0x30250 R_LARCH_TLS_DESC64 - 0x800 |
74 | | -# LE64-RELA-NEXT: 0x30260 R_LARCH_TLS_DESC64 - 0x7FF |
75 | | -# LE64-RELA-NEXT: } |
76 | | -# LE64-RELA: Hex dump of section '.got': |
77 | | -# LE64-RELA-NEXT: 0x00030240 00000000 00000000 00000000 00000000 . |
78 | | -# LE64-RELA-NEXT: 0x00030250 00000000 00000000 00000000 00000000 . |
79 | | -# LE64-RELA-NEXT: 0x00030260 00000000 00000000 00000000 00000000 . |
| 71 | +# LE64-RELA: could not find section '.got' |
| 72 | + |
| 73 | +# LE64-LABEL: <.text>: |
| 74 | +## st_value(a) = 8 |
| 75 | +# LE64-NEXT: nop |
| 76 | +# LE64-NEXT: nop |
| 77 | +# LE64-NEXT: ori $a0, $zero, 8 |
| 78 | +# LE64-NEXT: add.d $a1, $a0, $tp |
| 79 | +## st_value(b) = 2047 |
| 80 | +# LE64-NEXT: nop |
| 81 | +# LE64-NEXT: nop |
| 82 | +# LE64-NEXT: ori $a0, $zero, 2047 |
| 83 | +# LE64-NEXT: add.d $a2, $a0, $tp |
| 84 | +## st_value(c) = 2048 |
| 85 | +# LE64-NEXT: nop |
| 86 | +# LE64-NEXT: nop |
| 87 | +# LE64-NEXT: ori $a0, $zero, 2048 |
| 88 | +# LE64-NEXT: add.d $a3, $a0, $tp |
80 | 89 |
|
81 | 90 | # IE64-RELA: .rela.dyn { |
82 | | -# IE64-RELA-NEXT: 0x303C8 R_LARCH_TLS_DESC64 - 0x8 |
83 | | -# IE64-RELA-NEXT: 0x303E8 R_LARCH_TLS_DESC64 - 0x7FF |
84 | | -# IE64-RELA-NEXT: 0x303D8 R_LARCH_TLS_DESC64 c 0x0 |
| 91 | +# IE64-RELA-NEXT: 0x30398 R_LARCH_TLS_TPREL64 c 0x0 |
85 | 92 | # IE64-RELA-NEXT: } |
86 | 93 | # IE64-RELA: Hex dump of section '.got': |
87 | | -# IE64-RELA-NEXT: 0x000303c8 00000000 00000000 00000000 00000000 . |
88 | | -# IE64-RELA-NEXT: 0x000303d8 00000000 00000000 00000000 00000000 . |
89 | | -# IE64-RELA-NEXT: 0x000303e8 00000000 00000000 00000000 00000000 . |
| 94 | +# IE64-RELA-NEXT: 0x00030398 00000000 00000000 . |
| 95 | + |
| 96 | +## a and b are optimized to use LE. c is optimized to IE. |
| 97 | +# IE64-LABEL: <.text>: |
| 98 | +# IE64-NEXT: nop |
| 99 | +# IE64-NEXT: nop |
| 100 | +# IE64-NEXT: ori $a0, $zero, 8 |
| 101 | +# IE64-NEXT: add.d $a1, $a0, $tp |
| 102 | +# IE64-NEXT: nop |
| 103 | +# IE64-NEXT: nop |
| 104 | +# IE64-NEXT: ori $a0, $zero, 2047 |
| 105 | +# IE64-NEXT: add.d $a2, $a0, $tp |
| 106 | +## &.got[c]-. = 0x30398 - 0x202ac: 0x10 pages, page offset 0x398 |
| 107 | +# IE64-NEXT: nop |
| 108 | +# IE64-NEXT: 202ac: pcalau12i $a0, 16 |
| 109 | +# IE64-NEXT: ld.d $a0, $a0, 920 |
| 110 | +# IE64-NEXT: add.d $a3, $a0, $tp |
90 | 111 |
|
91 | 112 | # GD32-REL: .rel.dyn { |
92 | 113 | # GD32-REL-NEXT: 0x20264 R_LARCH_TLS_DESC32 - |
|
0 commit comments