4: 02bffc04 li.w \$a0, -1
8: 00150004 move \$a0, \$zero
c: 02bffc04 li.w \$a0, -1
- 10: 1a000004 pcalau12i \$a0, 0
- 10: R_LARCH_GOT_PC_HI20 .L1
+
+0+10 <.Lpcadd_hi0>:
+ 10: 1c000004 pcaddu12i \$a0, 0
+ 10: R_LARCH_GOT_PCADD_HI20 .L1
10: R_LARCH_RELAX \*ABS\*
14: 28800084 ld.w \$a0, \$a0, 0
- 14: R_LARCH_GOT_PC_LO12 .L1
+ 14: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi0
14: R_LARCH_RELAX \*ABS\*
- 18: 1a000004 pcalau12i \$a0, 0
- 18: R_LARCH_GOT_PC_HI20 .L1
+
+0+18 <.Lpcadd_hi1>:
+ 18: 1c000004 pcaddu12i \$a0, 0
+ 18: R_LARCH_GOT_PCADD_HI20 .L1
18: R_LARCH_RELAX \*ABS\*
1c: 28800084 ld.w \$a0, \$a0, 0
- 1c: R_LARCH_GOT_PC_LO12 .L1
+ 1c: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi1
1c: R_LARCH_RELAX \*ABS\*
- 20: 1a000004 pcalau12i \$a0, 0
- 20: R_LARCH_PCALA_HI20 .L1
- 20: R_LARCH_RELAX \*ABS\*
+
+0+20 <.Lpcadd_hi2>:
+ 20: 1c000004 pcaddu12i \$a0, 0
+ 20: R_LARCH_PCADD_HI20 .L1
24: 02800084 addi.w \$a0, \$a0, 0
- 24: R_LARCH_PCALA_LO12 .L1
- 24: R_LARCH_RELAX \*ABS\*
+ 24: R_LARCH_PCADD_LO12 .Lpcadd_hi2
28: 14000004 lu12i.w \$a0, 0
28: R_LARCH_MARK_LA \*ABS\*
28: R_LARCH_ABS_HI20 .L1
2c: 03800084 ori \$a0, \$a0, 0x0
2c: R_LARCH_ABS_LO12 .L1
- 30: 1a000004 pcalau12i \$a0, 0
- 30: R_LARCH_PCALA_HI20 .L1
- 30: R_LARCH_RELAX \*ABS\*
+
+0+30 <.Lpcadd_hi3>:
+ 30: 1c000004 pcaddu12i \$a0, 0
+ 30: R_LARCH_PCADD_HI20 .L1
34: 02800084 addi.w \$a0, \$a0, 0
- 34: R_LARCH_PCALA_LO12 .L1
- 34: R_LARCH_RELAX \*ABS\*
- 38: 1a000004 pcalau12i \$a0, 0
- 38: R_LARCH_GOT_PC_HI20 .L1
+ 34: R_LARCH_PCADD_LO12 .Lpcadd_hi3
+
+0+38 <.Lpcadd_hi4>:
+ 38: 1c000004 pcaddu12i \$a0, 0
+ 38: R_LARCH_GOT_PCADD_HI20 .L1
38: R_LARCH_RELAX \*ABS\*
3c: 28800084 ld.w \$a0, \$a0, 0
- 3c: R_LARCH_GOT_PC_LO12 .L1
+ 3c: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi4
3c: R_LARCH_RELAX \*ABS\*
40: 14000004 lu12i.w \$a0, 0
40: R_LARCH_TLS_LE_HI20 TLS1
44: 03800084 ori \$a0, \$a0, 0x0
44: R_LARCH_TLS_LE_LO12 TLS1
44: R_LARCH_RELAX \*ABS\*
- 48: 1a000004 pcalau12i \$a0, 0
- 48: R_LARCH_TLS_IE_PC_HI20 TLS1
+
+0+48 <.Lpcadd_hi5>:
+ 48: 1c000004 pcaddu12i \$a0, 0
+ 48: R_LARCH_TLS_IE_PCADD_HI20 TLS1
48: R_LARCH_RELAX \*ABS\*
4c: 28800084 ld.w \$a0, \$a0, 0
- 4c: R_LARCH_TLS_IE_PC_LO12 TLS1
+ 4c: R_LARCH_TLS_IE_PCADD_LO12 .Lpcadd_hi5
4c: R_LARCH_RELAX \*ABS\*
- 50: 1a000004 pcalau12i \$a0, 0
- 50: R_LARCH_TLS_LD_PC_HI20 TLS1
- 50: R_LARCH_RELAX \*ABS\*
+
+0+50 <.Lpcadd_hi6>:
+ 50: 1c000004 pcaddu12i \$a0, 0
+ 50: R_LARCH_TLS_LD_PCADD_HI20 TLS1
54: 02800084 addi.w \$a0, \$a0, 0
- 54: R_LARCH_GOT_PC_LO12 TLS1
- 54: R_LARCH_RELAX \*ABS\*
- 58: 1a000004 pcalau12i \$a0, 0
- 58: R_LARCH_TLS_GD_PC_HI20 TLS1
- 58: R_LARCH_RELAX \*ABS\*
+ 54: R_LARCH_TLS_LD_PCADD_LO12 .Lpcadd_hi6
+
+0+58 <.Lpcadd_hi7>:
+ 58: 1c000004 pcaddu12i \$a0, 0
+ 58: R_LARCH_TLS_GD_PCADD_HI20 TLS1
5c: 02800084 addi.w \$a0, \$a0, 0
- 5c: R_LARCH_GOT_PC_LO12 TLS1
- 5c: R_LARCH_RELAX \*ABS\*
+ 5c: R_LARCH_TLS_GD_PCADD_LO12 .Lpcadd_hi7
78: R_LARCH_TLS_DESC_LD TLSL1
7c: 4c000021 jirl \$ra, \$ra, 0
7c: R_LARCH_TLS_DESC_CALL TLSL1
+0+80 <NEW>:
+ 80: 1c000001 pcaddu12i \$ra, 0
+ 80: R_LARCH_CALL30 \.L1
+ 80: R_LARCH_RELAX \*ABS\*
+ 84: 4c000021 jirl \$ra, \$ra, 0
+ 88: 1c000001 pcaddu12i \$ra, 0
+ 88: R_LARCH_CALL30 \.L1
+ 88: R_LARCH_RELAX \*ABS\*
+ 8c: 4c000020 ret
+
+0+90 <\.Lpcadd_hi0>:
+ 90: 1c000004 pcaddu12i \$a0, 0
+ 90: R_LARCH_PCADD_HI20 s
+ 94: 02800084 addi.w \$a0, \$a0, 0
+ 94: R_LARCH_PCADD_LO12 \.Lpcadd_hi0
+
+0+98 <\.Lpcadd_hi1>:
+ 98: 1c000004 pcaddu12i \$a0, 0
+ 98: R_LARCH_GOT_PCADD_HI20 s
+ 9c: 28800084 ld.w \$a0, \$a0, 0
+ 9c: R_LARCH_GOT_PCADD_LO12 \.Lpcadd_hi1
+
+0+a0 <\.Lpcadd_hi2>:
+ a0: 1c000004 pcaddu12i \$a0, 0
+ a0: R_LARCH_TLS_IE_PCADD_HI20 TLSL1
+ a4: 28800084 ld.w \$a0, \$a0, 0
+ a4: R_LARCH_TLS_IE_PCADD_LO12 \.Lpcadd_hi2
+
+0+a8 <\.Lpcadd_hi3>:
+ a8: 1c000004 pcaddu12i \$a0, 0
+ a8: R_LARCH_TLS_LD_PCADD_HI20 TLSL1
+ ac: 02800084 addi.w \$a0, \$a0, 0
+ ac: R_LARCH_TLS_LD_PCADD_LO12 \.Lpcadd_hi3
+
+0+b0 <\.Lpcadd_hi4>:
+ b0: 1c000004 pcaddu12i \$a0, 0
+ b0: R_LARCH_TLS_GD_PCADD_HI20 TLSL1
+ b4: 02800084 addi.w \$a0, \$a0, 0
+ b4: R_LARCH_TLS_GD_PCADD_LO12 \.Lpcadd_hi4
+
+0+b8 <\.Lpcadd_hi5>:
+ b8: 1c000004 pcaddu12i \$a0, 0
+ b8: R_LARCH_TLS_DESC_PCADD_HI20 TLS1
+ bc: 02800084 addi.w \$a0, \$a0, 0
+ bc: R_LARCH_TLS_DESC_PCADD_LO12 \.Lpcadd_hi5
+ c0: 28800081 ld.w \$ra, \$a0, 0
+ c0: R_LARCH_TLS_DESC_LD TLS1
+ c4: 4c000021 jirl \$ra, \$ra, 0
+ c4: R_LARCH_TLS_DESC_CALL TLS1
ori $r4,$r4,%desc_lo12(TLSL1)
ld.w $r1,$r4,%desc_ld(TLSL1)
jirl $r1,$r1,%desc_call(TLSL1)
+
+NEW:
+/* LA32S/R medium call. */
+call30 .L1
+tail30 $r1, .L1
+
+/* LA32R PCREL. */
+.Lpcadd_hi0:
+pcaddu12i $r4, %pcadd_hi20(s)
+addi.w $r4, $r4, %pcadd_lo12(.Lpcadd_hi0)
+
+/* LA32R GOT. */
+.Lpcadd_hi1:
+pcaddu12i $r4, %got_pcadd_hi20(s)
+ld.w $r4, $r4, %got_pcadd_lo12(.Lpcadd_hi1)
+
+/* LA32R TLS IE. */
+.Lpcadd_hi2:
+pcaddu12i $r4, %ie_pcadd_hi20(TLSL1)
+ld.w $r4, $r4, %ie_pcadd_lo12(.Lpcadd_hi2)
+
+/* Part of LA32R TLS LD relocs. */
+.Lpcadd_hi3:
+pcaddu12i $r4, %ld_pcadd_hi20(TLSL1)
+addi.w $r4, $r4, %ld_pcadd_lo12(.Lpcadd_hi3)
+
+/* Part of LA32R TLS GD relocs. */
+.Lpcadd_hi4:
+pcaddu12i $r4, %gd_pcadd_hi20(TLSL1)
+addi.w $r4, $r4, %gd_pcadd_lo12(.Lpcadd_hi4)
+
+/* Part of LA32R TLS DESC relocs. */
+.Lpcadd_hi5:
+pcaddu12i $r4, %desc_pcadd_hi20(TLS1)
+addi.w $r4, $r4, %desc_pcadd_lo12(.Lpcadd_hi5)
+ld.w $r1, $r4, %desc_ld(TLS1)
+jirl $r1, $r1, %desc_call(TLS1)
#as:
#ld: -shared -z norelro --hash-style=both
#objdump: -dr
-#skip: loongarch32-*-*
.*: file format .*
Disassembly of section .text:
[0-9a-f]+ <fn1>:
- +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .*
- +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .*
- +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .*
- +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .*
+.*[pcalau12i|pcaddu12i].*
+.*ld.[d|w].*
+.*[pcalau12i|pcaddu12i].*
+.*ld.[d|w].*
Disassembly of section .text:
-00000000.* <_start>:
-[ ]+0:[ ]+1a000014[ ]+pcalau12i[ ]+\$t8,[ ]+0
-[ ]+0:[ ]+R_LARCH_PCALA_HI20[ ]+_start
-[ ]+0:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
-[ ]+4:[ ]+02800294[ ]+addi.w[ ]+\$t8,[ ]+\$t8,[ ]+0
-[ ]+4:[ ]+R_LARCH_PCALA_LO12[ ]+_start
-[ ]+4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
-[ ]+8:[ ]+4c000281[ ]+jirl[ ]+\$ra,[ ]+\$t8,[ ]+0
+0+ <_start>:
+ 0: 1c000014 pcaddu12i \$t8, 0
+ 0: R_LARCH_PCADD_HI20 _start
+ 4: 02800294 addi.w \$t8, \$t8, 0
+ 4: R_LARCH_PCADD_LO12 .Lpcadd_hi0
+ 8: 4c000281 jirl \$ra, \$t8, 0
--- /dev/null
+#as -mabi=ilp32d:
+#ld: -z norelro --hash-style=both -e0
+#objdump: -dr
+
+.*:[ ]+file format .*
+
+
+Disassembly of section .text:
+
+.*
+.*bl.*
+.*pcaddu12i.*
+.*addi.w.*
+.*li.w.*
+.*li.w.*
--- /dev/null
+ .global var
+ .section .tdata,"awT",@progbits
+var:
+ .word 1
+
+ .text
+ .global .L1
+ .hidden .L1
+.L1:
+ call30 .L1 # relax to bl
+ la.got $t0, .L1 # relax to pcaddu12i + addi.w
+ la.tls.ie $t0, var # relax to tls le
+ la.tls.desc $t0, var # relax to tls le
+
run_dump_test "macro_op_32"
run_dump_test "syscall"
run_dump_test "disas-jirl-32"
+ run_dump_test "la32"
+ if [check_shared_lib_support] {
+ run_dump_test "desc-ie"
+ }
}
if [istarget "loongarch64-*-*"] {
4: 02bffc04 li.w \$a0, -1
8: 00150004 move \$a0, \$zero
c: 02bffc04 li.w \$a0, -1
- 10: 1a000004 pcalau12i \$a0, 0
- 10: R_LARCH_GOT_PC_HI20 .L1
+
+0+10 <.Lpcadd_hi0>:
+ 10: 1c000004 pcaddu12i \$a0, 0
+ 10: R_LARCH_GOT_PCADD_HI20 .L1
10: R_LARCH_RELAX \*ABS\*
14: 28800084 ld.w \$a0, \$a0, 0
- 14: R_LARCH_GOT_PC_LO12 .L1
+ 14: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi0
14: R_LARCH_RELAX \*ABS\*
- 18: 1a000004 pcalau12i \$a0, 0
- 18: R_LARCH_GOT_PC_HI20 .L1
+
+0+18 <.Lpcadd_hi1>:
+ 18: 1c000004 pcaddu12i \$a0, 0
+ 18: R_LARCH_GOT_PCADD_HI20 .L1
18: R_LARCH_RELAX \*ABS\*
1c: 28800084 ld.w \$a0, \$a0, 0
- 1c: R_LARCH_GOT_PC_LO12 .L1
+ 1c: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi1
1c: R_LARCH_RELAX \*ABS\*
- 20: 1a000004 pcalau12i \$a0, 0
- 20: R_LARCH_PCALA_HI20 .L1
- 20: R_LARCH_RELAX \*ABS\*
+
+0+20 <.Lpcadd_hi2>:
+ 20: 1c000004 pcaddu12i \$a0, 0
+ 20: R_LARCH_PCADD_HI20 .L1
24: 02800084 addi.w \$a0, \$a0, 0
- 24: R_LARCH_PCALA_LO12 .L1
- 24: R_LARCH_RELAX \*ABS\*
+ 24: R_LARCH_PCADD_LO12 .Lpcadd_hi2
28: 14000004 lu12i.w \$a0, 0
28: R_LARCH_MARK_LA \*ABS\*
28: R_LARCH_ABS_HI20 .L1
2c: 03800084 ori \$a0, \$a0, 0x0
2c: R_LARCH_ABS_LO12 .L1
- 30: 1a000004 pcalau12i \$a0, 0
- 30: R_LARCH_PCALA_HI20 .L1
- 30: R_LARCH_RELAX \*ABS\*
+
+0+30 <.Lpcadd_hi3>:
+ 30: 1c000004 pcaddu12i \$a0, 0
+ 30: R_LARCH_PCADD_HI20 .L1
34: 02800084 addi.w \$a0, \$a0, 0
- 34: R_LARCH_PCALA_LO12 .L1
- 34: R_LARCH_RELAX \*ABS\*
- 38: 1a000004 pcalau12i \$a0, 0
- 38: R_LARCH_GOT_PC_HI20 .L1
+ 34: R_LARCH_PCADD_LO12 .Lpcadd_hi3
+
+0+38 <.Lpcadd_hi4>:
+ 38: 1c000004 pcaddu12i \$a0, 0
+ 38: R_LARCH_GOT_PCADD_HI20 .L1
38: R_LARCH_RELAX \*ABS\*
3c: 28800084 ld.w \$a0, \$a0, 0
- 3c: R_LARCH_GOT_PC_LO12 .L1
+ 3c: R_LARCH_GOT_PCADD_LO12 .Lpcadd_hi4
3c: R_LARCH_RELAX \*ABS\*
40: 14000004 lu12i.w \$a0, 0
40: R_LARCH_TLS_LE_HI20 TLS1
44: 03800084 ori \$a0, \$a0, 0x0
44: R_LARCH_TLS_LE_LO12 TLS1
44: R_LARCH_RELAX \*ABS\*
- 48: 1a000004 pcalau12i \$a0, 0
- 48: R_LARCH_TLS_IE_PC_HI20 TLS1
+
+0+48 <.Lpcadd_hi5>:
+ 48: 1c000004 pcaddu12i \$a0, 0
+ 48: R_LARCH_TLS_IE_PCADD_HI20 TLS1
48: R_LARCH_RELAX \*ABS\*
4c: 28800084 ld.w \$a0, \$a0, 0
- 4c: R_LARCH_TLS_IE_PC_LO12 TLS1
+ 4c: R_LARCH_TLS_IE_PCADD_LO12 .Lpcadd_hi5
4c: R_LARCH_RELAX \*ABS\*
- 50: 1a000004 pcalau12i \$a0, 0
- 50: R_LARCH_TLS_LD_PC_HI20 TLS1
- 50: R_LARCH_RELAX \*ABS\*
+
+0+50 <.Lpcadd_hi6>:
+ 50: 1c000004 pcaddu12i \$a0, 0
+ 50: R_LARCH_TLS_LD_PCADD_HI20 TLS1
54: 02800084 addi.w \$a0, \$a0, 0
- 54: R_LARCH_GOT_PC_LO12 TLS1
- 54: R_LARCH_RELAX \*ABS\*
- 58: 1a000004 pcalau12i \$a0, 0
- 58: R_LARCH_TLS_GD_PC_HI20 TLS1
- 58: R_LARCH_RELAX \*ABS\*
+ 54: R_LARCH_TLS_LD_PCADD_LO12 .Lpcadd_hi6
+
+0+58 <.Lpcadd_hi7>:
+ 58: 1c000004 pcaddu12i \$a0, 0
+ 58: R_LARCH_TLS_GD_PCADD_HI20 TLS1
5c: 02800084 addi.w \$a0, \$a0, 0
- 5c: R_LARCH_GOT_PC_LO12 TLS1
- 5c: R_LARCH_RELAX \*ABS\*
+ 5c: R_LARCH_TLS_GD_PCADD_LO12 .Lpcadd_hi7
run_ld_link_tests $link_tests
-
+if [istarget "loongarch64-*-*"] {
set link_tests_libc [list \
[list \
"$testname readelf -s/-r nopic-global-so" \
# 8:linker warning (optional)
# 9:ld trailing options, placed after object files (optional)
run_ld_link_exec_tests $link_exec_tests
-
+}
#set verbose old_verbose