|
1 | 1 | # REQUIRES: loongarch
|
2 | 2 | ## Test that we can handle --emit-relocs while relaxing.
|
3 | 3 |
|
4 |
| -# RUN: llvm-mc --filetype=obj --triple=loongarch32 --mattr=+relax %s -o %t.32.o |
| 4 | +# RUN: llvm-mc --filetype=obj --triple=loongarch32 --mattr=+relax --defsym ELF32=1 %s -o %t.32.o |
5 | 5 | # RUN: llvm-mc --filetype=obj --triple=loongarch64 --mattr=+relax %s -o %t.64.o
|
6 | 6 | # RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs --relax %t.32.o -o %t.32
|
7 | 7 | # RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs --relax %t.64.o -o %t.64
|
|
17 | 17 | # RUN: llvm-objdump -dr %t.64.norelax | FileCheck %s --check-prefix=NORELAX
|
18 | 18 |
|
19 | 19 | # RELAX: 00010000 <_start>:
|
20 |
| -# RELAX-NEXT: pcaddi $a0, 0 |
| 20 | +# RELAX-NEXT: pcaddi $a0, 0 |
21 | 21 | # RELAX-NEXT: R_LARCH_RELAX _start
|
22 | 22 | # RELAX-NEXT: R_LARCH_RELAX *ABS*
|
23 | 23 | # RELAX-NEXT: R_LARCH_PCREL20_S2 _start
|
24 | 24 | # RELAX-NEXT: R_LARCH_RELAX *ABS*
|
25 |
| -# RELAX-NEXT: pcaddi $a0, -1 |
| 25 | +# RELAX-NEXT: pcaddi $a0, -1 |
26 | 26 | # RELAX-NEXT: R_LARCH_RELAX _start
|
27 | 27 | # RELAX-NEXT: R_LARCH_RELAX *ABS*
|
28 | 28 | # RELAX-NEXT: R_LARCH_PCREL20_S2 _start
|
29 | 29 | # RELAX-NEXT: R_LARCH_RELAX *ABS*
|
| 30 | +# RELAX-NEXT: lu12i.w $a0, 0 |
| 31 | +# RELAX-NEXT: R_LARCH_TLS_LE_HI20 a |
| 32 | +# RELAX-NEXT: ori $a0, $a0, 0 |
| 33 | +# RELAX-NEXT: R_LARCH_TLS_LE_LO12 a |
| 34 | +# RELAX-NEXT: pcaddi $a0, {{[0-9]+}} |
| 35 | +# RELAX-NEXT: R_LARCH_RELAX a |
| 36 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 37 | +# RELAX-NEXT: R_LARCH_TLS_GD_PCREL20_S2 a |
| 38 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 39 | +# RELAX-NEXT: pcaddi $a0, {{[0-9]+}} |
| 40 | +# RELAX-NEXT: R_LARCH_RELAX a |
| 41 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 42 | +# RELAX-NEXT: R_LARCH_TLS_LD_PCREL20_S2 a |
| 43 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 44 | +# RELAX-NEXT: addi.{{[dw]}} $a0, $tp, 0 |
| 45 | +# RELAX-NEXT: R_LARCH_RELAX a |
| 46 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 47 | +# RELAX-NEXT: R_LARCH_RELAX a |
| 48 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
| 49 | +# RELAX-NEXT: R_LARCH_TLS_LE_LO12_R a |
| 50 | +# RELAX-NEXT: R_LARCH_RELAX *ABS* |
30 | 51 | # RELAX-NEXT: nop
|
31 | 52 | # RELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc
|
32 |
| -# RELAX-NEXT: nop |
33 | 53 | # RELAX-NEXT: ret
|
34 | 54 |
|
35 | 55 | # NORELAX: <_start>:
|
|
45 | 65 | # NORELAX-NEXT: ld.d $a0, $a0, 0
|
46 | 66 | # NORELAX-NEXT: R_LARCH_GOT_PC_LO12 _start
|
47 | 67 | # NORELAX-NEXT: R_LARCH_RELAX *ABS*
|
48 |
| -# NORELAX-NEXT: ret |
| 68 | +# NORELAX-NEXT: lu12i.w $a0, 0 |
| 69 | +# NORELAX-NEXT: R_LARCH_TLS_LE_HI20 a |
| 70 | +# NORELAX-NEXT: ori $a0, $a0, 0 |
| 71 | +# NORELAX-NEXT: R_LARCH_TLS_LE_LO12 a |
| 72 | +# NORELAX-NEXT: pcalau12i $a0, 16 |
| 73 | +# NORELAX-NEXT: R_LARCH_TLS_GD_PC_HI20 a |
| 74 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 75 | +# NORELAX-NEXT: addi.d $a0, $a0, 8 |
| 76 | +# NORELAX-NEXT: R_LARCH_GOT_PC_LO12 a |
| 77 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 78 | +# NORELAX-NEXT: pcalau12i $a0, 16 |
| 79 | +# NORELAX-NEXT: R_LARCH_TLS_LD_PC_HI20 a |
| 80 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 81 | +# NORELAX-NEXT: addi.d $a0, $a0, 8 |
| 82 | +# NORELAX-NEXT: R_LARCH_GOT_PC_LO12 a |
| 83 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 84 | +# NORELAX-NEXT: lu12i.w $a0, 0 |
| 85 | +# NORELAX-NEXT: R_LARCH_TLS_LE_HI20_R a |
| 86 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 87 | +# NORELAX-NEXT: add.d $a0, $a0, $tp |
| 88 | +# NORELAX-NEXT: R_LARCH_TLS_LE_ADD_R a |
| 89 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 90 | +# NORELAX-NEXT: addi.d $a0, $a0, 0 |
| 91 | +# NORELAX-NEXT: R_LARCH_TLS_LE_LO12_R a |
| 92 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 93 | +# NORELAX-NEXT: nop |
49 | 94 | # NORELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc
|
| 95 | +# NORELAX-NEXT: nop |
| 96 | +# NORELAX-NEXT: nop |
| 97 | +# NORELAX-NEXT: ret |
50 | 98 |
|
51 | 99 | # CHECKR: <_start>:
|
52 | 100 | # CHECKR-NEXT: pcalau12i $a0, 0
|
|
61 | 109 | # CHECKR-NEXT: ld.d $a0, $a0, 0
|
62 | 110 | # CHECKR-NEXT: R_LARCH_GOT_PC_LO12 _start
|
63 | 111 | # CHECKR-NEXT: R_LARCH_RELAX *ABS*
|
| 112 | +# CHECKR-NEXT: lu12i.w $a0, 0 |
| 113 | +# CHECKR-NEXT: R_LARCH_TLS_LE_HI20 a |
| 114 | +# CHECKR-NEXT: ori $a0, $a0, 0 |
| 115 | +# CHECKR-NEXT: R_LARCH_TLS_LE_LO12 a |
| 116 | +# CHECKR-NEXT: pcalau12i $a0, 0 |
| 117 | +# CHECKR-NEXT: R_LARCH_TLS_GD_PC_HI20 a |
| 118 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 119 | +# CHECKR-NEXT: addi.d $a0, $a0, 0 |
| 120 | +# CHECKR-NEXT: R_LARCH_GOT_PC_LO12 a |
| 121 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 122 | +# CHECKR-NEXT: pcalau12i $a0, 0 |
| 123 | +# CHECKR-NEXT: R_LARCH_TLS_LD_PC_HI20 a |
| 124 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 125 | +# CHECKR-NEXT: addi.d $a0, $a0, 0 |
| 126 | +# CHECKR-NEXT: R_LARCH_GOT_PC_LO12 a |
| 127 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 128 | +# CHECKR-NEXT: lu12i.w $a0, 0 |
| 129 | +# CHECKR-NEXT: R_LARCH_TLS_LE_HI20_R a |
| 130 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 131 | +# CHECKR-NEXT: add.d $a0, $a0, $tp |
| 132 | +# CHECKR-NEXT: R_LARCH_TLS_LE_ADD_R a |
| 133 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 134 | +# CHECKR-NEXT: addi.d $a0, $a0, 0 |
| 135 | +# CHECKR-NEXT: R_LARCH_TLS_LE_LO12_R a |
| 136 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
64 | 137 | # CHECKR-NEXT: nop
|
65 | 138 | # CHECKR-NEXT: R_LARCH_ALIGN *ABS*+0xc
|
66 | 139 | # CHECKR-NEXT: nop
|
67 | 140 | # CHECKR-NEXT: nop
|
68 | 141 | # CHECKR-NEXT: ret
|
69 | 142 |
|
| 143 | +.macro add dst, src1, src2, src3 |
| 144 | +.ifdef ELF32 |
| 145 | +add.w \dst, \src1, \src2, \src3 |
| 146 | +.else |
| 147 | +add.d \dst, \src1, \src2, \src3 |
| 148 | +.endif |
| 149 | +.endm |
| 150 | +.macro addi dst, src1, src2 |
| 151 | +.ifdef ELF32 |
| 152 | +addi.w \dst, \src1, \src2 |
| 153 | +.else |
| 154 | +addi.d \dst, \src1, \src2 |
| 155 | +.endif |
| 156 | +.endm |
| 157 | + |
70 | 158 | .global _start
|
71 | 159 | _start:
|
72 | 160 | la.pcrel $a0, _start
|
73 | 161 | la.got $a0, _start
|
| 162 | + |
| 163 | + la.tls.le $a0, a # without R_LARCH_RELAX reloaction |
| 164 | + la.tls.gd $a0, a |
| 165 | + la.tls.ld $a0, a |
| 166 | + |
| 167 | + lu12i.w $a0, %le_hi20_r(a) |
| 168 | + add $a0, $a0, $tp, %le_add_r(a) |
| 169 | + addi $a0, $a0, %le_lo12_r(a) |
| 170 | + |
74 | 171 | .p2align 4
|
75 | 172 | ret
|
| 173 | + |
| 174 | +.section .tbss,"awT",@nobits |
| 175 | +.globl a |
| 176 | +a: |
| 177 | +.zero 4 |
0 commit comments