|
3 | 3 | # RUN: llvm-mc -filetype=obj -triple=loongarch64 -mattr=+relax a.s -o a.64.o
|
4 | 4 | # RUN: llvm-mc -filetype=obj -triple=loongarch64 -mattr=+relax c.s -o c.64.o
|
5 | 5 | # RUN: ld.lld -shared -soname=c.64.so c.64.o -o c.64.so
|
6 |
| -# RUN: llvm-mc -filetype=obj -triple=loongarch32 -mattr=+relax --defsym ELF32=1 a.s -o a.32.o |
7 |
| -# RUN: llvm-mc -filetype=obj -triple=loongarch32 -mattr=+relax --defsym ELF32=1 c.s -o c.32.o |
8 |
| -# RUN: ld.lld -shared -soname=c.32.so c.32.o -o c.32.so |
9 | 6 |
|
10 | 7 | ## Test the TLSDESC relaxation. Also check --emit-relocs.
|
11 | 8 | # RUN: ld.lld -shared --emit-relocs -z now a.64.o c.64.o -o a.64.so
|
12 | 9 | # RUN: llvm-readobj -r -x .got a.64.so | FileCheck --check-prefix=GD64-RELA %s
|
13 |
| -# RUN: llvm-objdump --no-show-raw-insn -dr a.64.so | FileCheck %s --check-prefix=GD64 |
| 10 | +# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.so | FileCheck %s --check-prefix=GD64 |
14 | 11 |
|
15 | 12 | ## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented.
|
16 | 13 | ## Keep the dynamic relocations and hand them over to dynamic linker.
|
17 | 14 |
|
18 | 15 | # RUN: ld.lld -e 0 -z now --emit-relocs a.64.o c.64.o -o a.64.le
|
19 | 16 | # RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s
|
20 |
| -# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck %s --check-prefix=LE64 |
| 17 | +# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.le | FileCheck %s --check-prefix=LE64 |
| 18 | + |
| 19 | +# RUN: ld.lld -e 0 -z now --no-relax a.64.o c.64.o -o a.64.le.norelax |
| 20 | +# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.le.norelax | FileCheck %s --check-prefix=LE64-NORELAX |
21 | 21 |
|
22 | 22 | # RUN: ld.lld -e 0 -z now --emit-relocs a.64.o c.64.so -o a.64.ie
|
23 | 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 %s --check-prefix=IE64 |
25 |
| - |
26 |
| -## 32-bit code is mostly the same. We only test a few variants. |
| 24 | +# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.ie | FileCheck %s --check-prefix=IE64 |
27 | 25 |
|
28 |
| -# RUN: ld.lld -shared -z now a.32.o c.32.o -o rel.32.so -z rel |
29 |
| -# RUN: llvm-readobj -r -x .got rel.32.so | FileCheck --check-prefix=GD32-REL %s |
| 26 | +# RUN: ld.lld -e 0 -z now --no-relax a.64.o c.64.so -o a.64.ie.norelax |
| 27 | +# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.ie.norelax | FileCheck %s --check-prefix=IE64-NORELAX |
30 | 28 |
|
31 | 29 | # GD64-RELA: .rela.dyn {
|
32 |
| -# GD64-RELA-NEXT: 0x20448 R_LARCH_TLS_DESC64 - 0x7FF |
33 |
| -# GD64-RELA-NEXT: 0x20418 R_LARCH_TLS_DESC64 a 0x0 |
34 |
| -# GD64-RELA-NEXT: 0x20428 R_LARCH_TLS_DESC64 c 0x0 |
35 |
| -# GD64-RELA-NEXT: 0x20438 R_LARCH_TLS_DESC64 d 0x0 |
| 30 | +# GD64-RELA-NEXT: 0x20460 R_LARCH_TLS_DESC64 - 0x7FF |
| 31 | +# GD64-RELA-NEXT: 0x20430 R_LARCH_TLS_DESC64 a 0x0 |
| 32 | +# GD64-RELA-NEXT: 0x20440 R_LARCH_TLS_DESC64 c 0x0 |
| 33 | +# GD64-RELA-NEXT: 0x20450 R_LARCH_TLS_DESC64 d 0x0 |
36 | 34 | # GD64-RELA-NEXT: }
|
37 | 35 | # GD64-RELA: Hex dump of section '.got':
|
38 |
| -# GD64-RELA-NEXT: 0x00020418 00000000 00000000 00000000 00000000 . |
39 |
| -# GD64-RELA-NEXT: 0x00020428 00000000 00000000 00000000 00000000 . |
40 |
| -# GD64-RELA-NEXT: 0x00020438 00000000 00000000 00000000 00000000 . |
41 |
| -# GD64-RELA-NEXT: 0x00020448 00000000 00000000 00000000 00000000 . |
| 36 | +# GD64-RELA-NEXT: 0x00020430 00000000 00000000 00000000 00000000 . |
| 37 | +# GD64-RELA-NEXT: 0x00020440 00000000 00000000 00000000 00000000 . |
| 38 | +# GD64-RELA-NEXT: 0x00020450 00000000 00000000 00000000 00000000 . |
| 39 | +# GD64-RELA-NEXT: 0x00020460 00000000 00000000 00000000 00000000 . |
| 40 | + |
| 41 | +# GD64: .got 00000040 0000000000020430 |
42 | 42 |
|
43 |
| -## &.got[a]-. = 0x20418 - 0x10318 = 16448<<2 |
44 |
| -# GD64: 10318: pcaddi $a0, 16448 |
| 43 | +## &.got[a]-. = 0x20430 - 0x10318 = 16454<<2 |
| 44 | +# GD64: 10318: pcaddi $a0, 16454 |
45 | 45 | # GD64-NEXT: ld.d $ra, $a0, 0
|
46 | 46 | # GD64-NEXT: jirl $ra, $ra, 0
|
47 | 47 | # GD64-NEXT: add.d $a1, $a0, $tp
|
48 | 48 |
|
49 |
| -## &.got[b]-. = 0x20418+48 - 0x10328 = 16456<<2 |
50 |
| -# GD64: 10328: pcaddi $a0, 16456 |
| 49 | +## &.got[b]-. = 0x20430+48 - 0x10328: 0x10 pages, page offset 0x460 |
| 50 | +## R_LARCH_RELAX does not appear in pairs. No relaxation. |
| 51 | +# GD64: 10328: pcalau12i $a0, 16 |
| 52 | +# GD64-NEXT: addi.d $a0, $a0, 1120 |
51 | 53 | # GD64-NEXT: ld.d $ra, $a0, 0
|
52 | 54 | # GD64-NEXT: jirl $ra, $ra, 0
|
53 | 55 | # GD64-NEXT: add.d $a2, $a0, $tp
|
54 | 56 |
|
55 |
| -## &.got[c]-. = 0x20418+16 - 0x10338 = 16444<<2 |
56 |
| -# GD64: 10338: pcaddi $a0, 16 |
| 57 | +## &.got[c]-. = 0x20430+16 - 0x1033c: 0x10 pages, page offset 0x440 |
| 58 | +## Without R_LARCH_RELAX relocation. No relaxation. |
| 59 | +# GD64: 1033c: pcalau12i $a0, 16 |
| 60 | +# GD64-NEXT: addi.d $t0, $zero, 0 |
| 61 | +# GD64-NEXT: addi.d $a0, $a0, 1088 |
| 62 | +# GD64-NEXT: addi.d $t0, $t0, 1 |
57 | 63 | # GD64-NEXT: ld.d $ra, $a0, 0
|
| 64 | +# GD64-NEXT: addi.d $t0, $t0, 1 |
58 | 65 | # GD64-NEXT: jirl $ra, $ra, 0
|
59 | 66 | # GD64-NEXT: add.d $a3, $a0, $tp
|
60 | 67 |
|
61 |
| -## &.got[d]-. = 0x20418+32 - 0x10348 = 16444<<2 |
62 |
| -# GD64: 10348: pcaddi $a0, 16444 |
| 68 | +## &.got[d]-. = 0x20430+32 - 0x1035c = 16445<<2 |
| 69 | +# GD64: 1035c: pcaddi $a0, 16445 |
63 | 70 | # GD64-NEXT: ld.d $ra, $a0, 0
|
64 | 71 | # GD64-NEXT: jirl $ra, $ra, 0
|
65 | 72 | # GD64-NEXT: add.d $a4, $a0, $tp
|
66 | 73 |
|
67 | 74 | # LE64-RELA: .rela.dyn {
|
68 |
| -# LE64-RELA-NEXT: 0x30268 R_LARCH_TLS_DESC64 - 0x8 |
69 |
| -# LE64-RELA-NEXT: 0x30278 R_LARCH_TLS_DESC64 - 0x800 |
70 |
| -# LE64-RELA-NEXT: 0x30288 R_LARCH_TLS_DESC64 - 0x1000 |
71 |
| -# LE64-RELA-NEXT: 0x30298 R_LARCH_TLS_DESC64 - 0x7FF |
| 75 | +# LE64-RELA-NEXT: 0x30280 R_LARCH_TLS_DESC64 - 0x8 |
| 76 | +# LE64-RELA-NEXT: 0x30290 R_LARCH_TLS_DESC64 - 0x800 |
| 77 | +# LE64-RELA-NEXT: 0x302A0 R_LARCH_TLS_DESC64 - 0x1000 |
| 78 | +# LE64-RELA-NEXT: 0x302B0 R_LARCH_TLS_DESC64 - 0x7FF |
72 | 79 | # LE64-RELA-NEXT: }
|
73 | 80 | # LE64-RELA: Hex dump of section '.got':
|
74 |
| -# LE64-RELA-NEXT: 0x00030268 00000000 00000000 00000000 00000000 . |
75 |
| -# LE64-RELA-NEXT: 0x00030278 00000000 00000000 00000000 00000000 . |
76 |
| -# LE64-RELA-NEXT: 0x00030288 00000000 00000000 00000000 00000000 . |
77 |
| -# LE64-RELA-NEXT: 0x00030298 00000000 00000000 00000000 00000000 . |
78 |
| - |
79 |
| -# LE64-LABEL: <.text>: |
80 |
| -## &.got[a]-. = 0x30268 - 0x20228 = 16400<<2 |
81 |
| -# LE64-NEXT: 20228: pcaddi $a0, 16400 |
82 |
| -# LE64-NEXT: ld.d $ra, $a0, 0 |
83 |
| -# LE64-NEXT: jirl $ra, $ra, 0 |
84 |
| -# LE64-NEXT: add.d $a1, $a0, $tp |
85 |
| -## &.got[b]-. = 0x30298 - 0x20238 = 16408<<2 |
86 |
| -# LE64-NEXT: 20238: pcaddi $a0, 16408 |
87 |
| -# LE64-NEXT: ld.d $ra, $a0, 0 |
88 |
| -# LE64-NEXT: jirl $ra, $ra, 0 |
89 |
| -# LE64-NEXT: add.d $a2, $a0, $tp |
90 |
| -## &.got[c]-. = 0x30278 - 0x20248 = 16396<<2 |
91 |
| -# LE64-NEXT: 20248: pcaddi $a0, 16396 |
92 |
| -# LE64-NEXT: ld.d $ra, $a0, 0 |
93 |
| -# LE64-NEXT: jirl $ra, $ra, 0 |
94 |
| -# LE64-NEXT: add.d $a3, $a0, $tp |
95 |
| -## &.got[d]-. = 0x30288 - 0x20258 = 16396<<2 |
96 |
| -# LE64-NEXT: 20258: pcaddi $a0, 16396 |
97 |
| -# LE64-NEXT: ld.d $ra, $a0, 0 |
98 |
| -# LE64-NEXT: jirl $ra, $ra, 0 |
99 |
| -# LE64-NEXT: add.d $a4, $a0, $tp |
| 81 | +# LE64-RELA-NEXT: 0x00030280 00000000 00000000 00000000 00000000 . |
| 82 | +# LE64-RELA-NEXT: 0x00030290 00000000 00000000 00000000 00000000 . |
| 83 | +# LE64-RELA-NEXT: 0x000302a0 00000000 00000000 00000000 00000000 . |
| 84 | +# LE64-RELA-NEXT: 0x000302b0 00000000 00000000 00000000 00000000 . |
| 85 | + |
| 86 | +# LE64: .got 00000040 0000000000030280 |
| 87 | + |
| 88 | +## &.got[a]-. = 0x30280 - 0x20228 = 16406<<2 |
| 89 | +# LE64: 20228: pcaddi $a0, 16406 |
| 90 | +# LE64-NEXT: ld.d $ra, $a0, 0 |
| 91 | +# LE64-NEXT: jirl $ra, $ra, 0 |
| 92 | +# LE64-NEXT: add.d $a1, $a0, $tp |
| 93 | + |
| 94 | +## &.got[b]-. = 0x30280+48 - 0x20238: 0x10 pages, page offset 0x2b0 |
| 95 | +## R_LARCH_RELAX does not appear in pairs. No relaxation. |
| 96 | +# LE64: 20238: pcalau12i $a0, 16 |
| 97 | +# LE64-NEXT: addi.d $a0, $a0, 688 |
| 98 | +# LE64-NEXT: ld.d $ra, $a0, 0 |
| 99 | +# LE64-NEXT: jirl $ra, $ra, 0 |
| 100 | +# LE64-NEXT: add.d $a2, $a0, $tp |
| 101 | + |
| 102 | +## &.got[c]-. = 0x30280+16 - 0x2024c: 0x10 pages, page offset 0x290 |
| 103 | +## Without R_LARCH_RELAX relocation. No relaxation. |
| 104 | +# LE64: 2024c: pcalau12i $a0, 16 |
| 105 | +# LE64-NEXT: addi.d $t0, $zero, 0 |
| 106 | +# LE64-NEXT: addi.d $a0, $a0, 656 |
| 107 | +# LE64-NEXT: addi.d $t0, $t0, 1 |
| 108 | +# LE64-NEXT: ld.d $ra, $a0, 0 |
| 109 | +# LE64-NEXT: addi.d $t0, $t0, 1 |
| 110 | +# LE64-NEXT: jirl $ra, $ra, 0 |
| 111 | +# LE64-NEXT: add.d $a3, $a0, $tp |
| 112 | + |
| 113 | +## &.got[d]-. = 0x30280+32 - 0x2026c = 16397<<2 |
| 114 | +# LE64: 2026c: pcaddi $a0, 16397 |
| 115 | +# LE64-NEXT: ld.d $ra, $a0, 0 |
| 116 | +# LE64-NEXT: jirl $ra, $ra, 0 |
| 117 | +# LE64-NEXT: add.d $a4, $a0, $tp |
| 118 | + |
| 119 | +# LE64-NORELAX: .got 00000040 0000000000030288 |
| 120 | + |
| 121 | +## &.got[a]-. = 0x30288 - 0x20228 = 0x10 pages, page offset 0x288 |
| 122 | +# LE64-NORELAX: 20228: pcalau12i $a0, 16 |
| 123 | +# LE64-NORELAX-NEXT: addi.d $a0, $a0, 648 |
| 124 | +# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 125 | +# LE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 126 | +# LE64-NORELAX-NEXT: add.d $a1, $a0, $tp |
| 127 | + |
| 128 | +## &.got[b]-. = 0x30288+48 - 0x2023c: 0x10 pages, page offset 0x2b8 |
| 129 | +## R_LARCH_RELAX does not appear in pairs. No relaxation. |
| 130 | +# LE64-NORELAX: 2023c: pcalau12i $a0, 16 |
| 131 | +# LE64-NORELAX-NEXT: addi.d $a0, $a0, 696 |
| 132 | +# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 133 | +# LE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 134 | +# LE64-NORELAX-NEXT: add.d $a2, $a0, $tp |
| 135 | + |
| 136 | +## &.got[c]-. = 0x30288+16 - 0x20250: 0x10 pages, page offset 0x298 |
| 137 | +## Without R_LARCH_RELAX relocation. No relaxation. |
| 138 | +# LE64-NORELAX: 20250: pcalau12i $a0, 16 |
| 139 | +# LE64-NORELAX-NEXT: addi.d $t0, $zero, 0 |
| 140 | +# LE64-NORELAX-NEXT: addi.d $a0, $a0, 664 |
| 141 | +# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1 |
| 142 | +# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 143 | +# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1 |
| 144 | +# LE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 145 | +# LE64-NORELAX-NEXT: add.d $a3, $a0, $tp |
| 146 | + |
| 147 | +## &.got[d]-. = 0x30288+32 - 0x20270: 0x10 pages, page offset 0x2a8 |
| 148 | +# LE64-NORELAX: 20270: pcalau12i $a0, 16 |
| 149 | +# LE64-NORELAX-NEXT: addi.d $a0, $a0, 680 |
| 150 | +# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 151 | +# LE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 152 | +# LE64-NORELAX-NEXT: add.d $a4, $a0, $tp |
100 | 153 |
|
101 | 154 | # IE64-RELA: .rela.dyn {
|
102 |
| -# IE64-RELA-NEXT: 0x30418 R_LARCH_TLS_DESC64 - 0x8 |
103 |
| -# IE64-RELA-NEXT: 0x30448 R_LARCH_TLS_DESC64 - 0x7FF |
104 |
| -# IE64-RELA-NEXT: 0x30428 R_LARCH_TLS_DESC64 c 0x0 |
105 |
| -# IE64-RELA-NEXT: 0x30438 R_LARCH_TLS_DESC64 d 0x0 |
| 155 | +# IE64-RELA-NEXT: 0x30430 R_LARCH_TLS_DESC64 - 0x8 |
| 156 | +# IE64-RELA-NEXT: 0x30460 R_LARCH_TLS_DESC64 - 0x7FF |
| 157 | +# IE64-RELA-NEXT: 0x30440 R_LARCH_TLS_DESC64 c 0x0 |
| 158 | +# IE64-RELA-NEXT: 0x30450 R_LARCH_TLS_DESC64 d 0x0 |
106 | 159 | # IE64-RELA-NEXT: }
|
107 | 160 | # IE64-RELA: Hex dump of section '.got':
|
108 |
| -# IE64-RELA-NEXT: 0x00030418 00000000 00000000 00000000 00000000 . |
109 |
| -# IE64-RELA-NEXT: 0x00030428 00000000 00000000 00000000 00000000 . |
110 |
| -# IE64-RELA-NEXT: 0x00030438 00000000 00000000 00000000 00000000 . |
111 |
| -# IE64-RELA-NEXT: 0x00030448 00000000 00000000 00000000 00000000 . |
| 161 | +# IE64-RELA-NEXT: 0x00030430 00000000 00000000 00000000 00000000 . |
| 162 | +# IE64-RELA-NEXT: 0x00030440 00000000 00000000 00000000 00000000 . |
| 163 | +# IE64-RELA-NEXT: 0x00030450 00000000 00000000 00000000 00000000 . |
| 164 | +# IE64-RELA-NEXT: 0x00030460 00000000 00000000 00000000 00000000 . |
| 165 | + |
| 166 | +# IE64: .got 00000040 0000000000030430 |
112 | 167 |
|
113 | 168 | ## a and b are optimized to use LE. c and d are optimized to IE.
|
114 |
| -# IE64-LABEL: <.text>: |
115 |
| -## &.got[a]-. = 0x30418 - 0x202f8 = 16456<<2 |
116 |
| -# IE64-NEXT: 202f8: pcaddi $a0, 16456 |
117 |
| -# IE64-NEXT: ld.d $ra, $a0, 0 |
118 |
| -# IE64-NEXT: jirl $ra, $ra, 0 |
119 |
| -# IE64-NEXT: add.d $a1, $a0, $tp |
120 |
| -## &.got[b]-. = 0x30448 - 0x20308 = 16464<<2 |
121 |
| -# IE64-NEXT: 20308: pcaddi $a0, 16464 |
122 |
| -# IE64-NEXT: ld.d $ra, $a0, 0 |
123 |
| -# IE64-NEXT: jirl $ra, $ra, 0 |
124 |
| -# IE64-NEXT: add.d $a2, $a0, $tp |
125 |
| -## &.got[c]-. = 0x30428 - 0x20318 = 16452<<2 |
126 |
| -# IE64-NEXT: 20318: pcaddi $a0, 16452 |
127 |
| -# IE64-NEXT: ld.d $ra, $a0, 0 |
128 |
| -# IE64-NEXT: jirl $ra, $ra, 0 |
129 |
| -# IE64-NEXT: add.d $a3, $a0, $tp |
130 |
| -## &.got[d]-. = 0x30438 - 0x20328 = 16452<<2 |
131 |
| -# IE64-NEXT: 20328: pcaddi $a0, 16452 |
132 |
| -# IE64-NEXT: ld.d $ra, $a0, 0 |
133 |
| -# IE64-NEXT: jirl $ra, $ra, 0 |
134 |
| -# IE64-NEXT: add.d $a4, $a0, $tp |
135 |
| - |
136 |
| -# GD32-REL: .rel.dyn { |
137 |
| -# GD32-REL-NEXT: 0x202A4 R_LARCH_TLS_DESC32 - |
138 |
| -# GD32-REL-NEXT: 0x2028C R_LARCH_TLS_DESC32 a |
139 |
| -# GD32-REL-NEXT: 0x20294 R_LARCH_TLS_DESC32 c |
140 |
| -# GD32-REL-NEXT: 0x2029C R_LARCH_TLS_DESC32 d |
141 |
| -# GD32-REL-NEXT: } |
142 |
| -# GD32-REL: Hex dump of section '.got': |
143 |
| -# GD32-REL-NEXT: 0x0002028c 00000000 00000000 00000000 00000000 . |
144 |
| -# GD32-REL-NEXT: 0x0002029c 00000000 00000000 00000000 ff070000 . |
| 169 | +## &.got[a]-. = 0x30430 - 0x202f8 = 16462<<2 |
| 170 | +# IE64: 202f8: pcaddi $a0, 16462 |
| 171 | +# IE64-NEXT: ld.d $ra, $a0, 0 |
| 172 | +# IE64-NEXT: jirl $ra, $ra, 0 |
| 173 | +# IE64-NEXT: add.d $a1, $a0, $tp |
145 | 174 |
|
146 |
| -#--- a.s |
147 |
| -.macro add dst, src1, src2 |
148 |
| -.ifdef ELF32 |
149 |
| -add.w \dst, \src1, \src2 |
150 |
| -.else |
151 |
| -add.d \dst, \src1, \src2 |
152 |
| -.endif |
153 |
| -.endm |
| 175 | +## &.got[b]-. = 0x30430+48 - 0x20308: 0x10 pages, page offset 0x460 |
| 176 | +## R_LARCH_RELAX does not appear in pairs. No relaxation. |
| 177 | +# IE64: 20308: pcalau12i $a0, 16 |
| 178 | +# IE64-NEXT: addi.d $a0, $a0, 1120 |
| 179 | +# IE64-NEXT: ld.d $ra, $a0, 0 |
| 180 | +# IE64-NEXT: jirl $ra, $ra, 0 |
| 181 | +# IE64-NEXT: add.d $a2, $a0, $tp |
| 182 | + |
| 183 | +## &.got[c]-. = 0x30430+16 - 0x2031c: 0x10 pages, page offset 0x440 |
| 184 | +## Without R_LARCH_RELAX relocation. No relaxation. |
| 185 | +# IE64: 2031c: pcalau12i $a0, 16 |
| 186 | +# IE64-NEXT: addi.d $t0, $zero, 0 |
| 187 | +# IE64-NEXT: addi.d $a0, $a0, 1088 |
| 188 | +# IE64-NEXT: addi.d $t0, $t0, 1 |
| 189 | +# IE64-NEXT: ld.d $ra, $a0, 0 |
| 190 | +# IE64-NEXT: addi.d $t0, $t0, 1 |
| 191 | +# IE64-NEXT: jirl $ra, $ra, 0 |
| 192 | +# IE64-NEXT: add.d $a3, $a0, $tp |
| 193 | + |
| 194 | +## &.got[d]-. = 0x30430+32 - 0x2033c = 16453<<2 |
| 195 | +# IE64: 2033c: pcaddi $a0, 16453 |
| 196 | +# IE64-NEXT: ld.d $ra, $a0, 0 |
| 197 | +# IE64-NEXT: jirl $ra, $ra, 0 |
| 198 | +# IE64-NEXT: add.d $a4, $a0, $tp |
| 199 | + |
| 200 | +# IE64-NORELAX: .got 00000040 0000000000030438 |
154 | 201 |
|
| 202 | +## &.got[a]-. = 0x30438 - 0x202f8 = 0x10 pages, page offset 0x438 |
| 203 | +# IE64-NORELAX: 202f8: pcalau12i $a0, 16 |
| 204 | +# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1080 |
| 205 | +# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 206 | +# IE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 207 | +# IE64-NORELAX-NEXT: add.d $a1, $a0, $tp |
| 208 | + |
| 209 | +## &.got[b]-. = 0x30438+48 - 0x2030c: 0x10 pages, page offset 0x468 |
| 210 | +## R_LARCH_RELAX does not appear in pairs. No relaxation. |
| 211 | +# IE64-NORELAX: 2030c: pcalau12i $a0, 16 |
| 212 | +# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1128 |
| 213 | +# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 214 | +# IE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 215 | +# IE64-NORELAX-NEXT: add.d $a2, $a0, $tp |
| 216 | + |
| 217 | +## &.got[c]-. = 0x30438+16 - 0x20320: 0x10 pages, page offset 0x448 |
| 218 | +## Without R_LARCH_RELAX relocation. No relaxation. |
| 219 | +# IE64-NORELAX: 20320: pcalau12i $a0, 16 |
| 220 | +# IE64-NORELAX-NEXT: addi.d $t0, $zero, 0 |
| 221 | +# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1096 |
| 222 | +# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1 |
| 223 | +# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 224 | +# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1 |
| 225 | +# IE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 226 | +# IE64-NORELAX-NEXT: add.d $a3, $a0, $tp |
| 227 | + |
| 228 | +## &.got[d]-. = 0x30438+32 - 0x20340: 0x10 pages, page offset 0x458 |
| 229 | +# IE64-NORELAX: 20340: pcalau12i $a0, 16 |
| 230 | +# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1112 |
| 231 | +# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0 |
| 232 | +# IE64-NORELAX-NEXT: jirl $ra, $ra, 0 |
| 233 | +# IE64-NORELAX-NEXT: add.d $a4, $a0, $tp |
| 234 | + |
| 235 | +#--- a.s |
155 | 236 | la.tls.desc $a0, a
|
156 |
| -add $a1, $a0, $tp |
| 237 | +add.d $a1, $a0, $tp |
157 | 238 |
|
158 |
| -la.tls.desc $a0, b |
159 |
| -add $a2, $a0, $tp |
| 239 | +# ADDI.D does not have R_LARCH_RELAX. No relaxation. |
| 240 | +pcalau12i $a0, %desc_pc_hi20(b) |
| 241 | +.reloc .-4, R_LARCH_RELAX, 0 |
| 242 | +addi.d $a0, $a0, %desc_pc_lo12(b) |
| 243 | +ld.d $ra, $a0, %desc_ld(b) |
| 244 | +jirl $ra, $ra, %desc_call(b) |
| 245 | +add.d $a2, $a0, $tp |
160 | 246 |
|
161 |
| -la.tls.desc $a0, c |
162 |
| -add $a3, $a0, $tp |
| 247 | +# TLSDESC to LE. No relaxation. |
| 248 | +pcalau12i $a0, %desc_pc_hi20(c) |
| 249 | +addi.d $t0, $zero, 0 |
| 250 | +addi.d $a0, $a0, %desc_pc_lo12(c) |
| 251 | +addi.d $t0, $t0, 1 |
| 252 | +ld.d $ra, $a0, %desc_ld(c) |
| 253 | +addi.d $t0, $t0, 1 |
| 254 | +jirl $ra, $ra, %desc_call(c) |
| 255 | +add.d $a3, $a0, $tp |
163 | 256 |
|
164 |
| -la.tls.desc $a0, d |
165 |
| -add $a4, $a0, $tp |
| 257 | +# PCALAU12I and ADDI.D have R_LARCH_RELAX. We preform relaxation. |
| 258 | +pcalau12i $a0, %desc_pc_hi20(d) |
| 259 | +.reloc .-4, R_LARCH_RELAX, 0 |
| 260 | +addi.d $a0, $a0, %desc_pc_lo12(d) |
| 261 | +.reloc .-4, R_LARCH_RELAX, 0 |
| 262 | +ld.d $ra, $a0, %desc_ld(d) |
| 263 | +jirl $ra, $ra, %desc_call(d) |
| 264 | +add.d $a4, $a0, $tp |
166 | 265 |
|
167 | 266 | .section .tbss,"awT",@nobits
|
168 | 267 | .globl a
|
|
0 commit comments