670 lines
20 KiB
Diff
670 lines
20 KiB
Diff
From aaab3bca7ff42e982134fd638ad1ae8324260a8f Mon Sep 17 00:00:00 2001
|
|
From: Lulu Cai <cailulu@loongson.cn>
|
|
Date: Wed, 13 Dec 2023 11:34:56 +0800
|
|
Subject: [PATCH 029/123] LoongArch: Add testsuit for DESC and tls transition
|
|
and tls relaxation.
|
|
|
|
---
|
|
gas/testsuite/gas/loongarch/tlsdesc_32.d | 27 ++++++++
|
|
gas/testsuite/gas/loongarch/tlsdesc_32.s | 12 ++++
|
|
gas/testsuite/gas/loongarch/tlsdesc_32_abs.d | 26 ++++++++
|
|
gas/testsuite/gas/loongarch/tlsdesc_32_abs.s | 8 +++
|
|
gas/testsuite/gas/loongarch/tlsdesc_64.d | 28 ++++++++
|
|
gas/testsuite/gas/loongarch/tlsdesc_64.s | 12 ++++
|
|
.../gas/loongarch/tlsdesc_large_abs.d | 34 ++++++++++
|
|
.../gas/loongarch/tlsdesc_large_abs.s | 12 ++++
|
|
.../gas/loongarch/tlsdesc_large_pc.d | 38 +++++++++++
|
|
.../gas/loongarch/tlsdesc_large_pc.s | 17 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-ie.d | 16 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-ie.s | 18 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-le.d | 15 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-le.s | 14 ++++
|
|
ld/testsuite/ld-loongarch-elf/desc-norelax.d | 16 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-norelax.s | 5 ++
|
|
ld/testsuite/ld-loongarch-elf/desc-relax.d | 15 +++++
|
|
ld/testsuite/ld-loongarch-elf/desc-relax.s | 5 ++
|
|
ld/testsuite/ld-loongarch-elf/ie-le.d | 13 ++++
|
|
ld/testsuite/ld-loongarch-elf/ie-le.s | 11 ++++
|
|
.../ld-loongarch-elf/ld-loongarch-elf.exp | 9 +++
|
|
ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d | 56 ++++++++++++++++
|
|
ld/testsuite/ld-loongarch-elf/tlsdesc-dso.s | 65 +++++++++++++++++++
|
|
23 files changed, 472 insertions(+)
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_32.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_32.s
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_32_abs.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_32_abs.s
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_64.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_64.s
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_large_abs.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_large_abs.s
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_large_pc.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/tlsdesc_large_pc.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-ie.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-ie.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-le.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-le.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-norelax.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-norelax.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-relax.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/desc-relax.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/ie-le.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/ie-le.s
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d
|
|
create mode 100644 ld/testsuite/ld-loongarch-elf/tlsdesc-dso.s
|
|
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_32.d b/gas/testsuite/gas/loongarch/tlsdesc_32.d
|
|
new file mode 100644
|
|
index 00000000..eddcc5ed
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_32.d
|
|
@@ -0,0 +1,27 @@
|
|
+#as:
|
|
+#objdump: -dr
|
|
+#skip: loongarch64-*-*
|
|
+
|
|
+.*:[ ]+file format .*
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+ <.*>:
|
|
+ 0: 1a000004 pcalau12i \$a0, 0
|
|
+ 0: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 4: 02800084 addi.w \$a0, \$a0, 0
|
|
+ 4: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 8: 28800081 ld.w \$ra, \$a0, 0
|
|
+ 8: R_LARCH_TLS_DESC_LD var
|
|
+ c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ c: R_LARCH_TLS_DESC_CALL var
|
|
+ 10: 1a000004 pcalau12i \$a0, 0
|
|
+ 10: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 10: R_LARCH_RELAX \*ABS\*
|
|
+ 14: 02800084 addi.w \$a0, \$a0, 0
|
|
+ 14: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 14: R_LARCH_RELAX \*ABS\*
|
|
+ 18: 28800081 ld.w \$ra, \$a0, 0
|
|
+ 18: R_LARCH_TLS_DESC_LD var
|
|
+ 1c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 1c: R_LARCH_TLS_DESC_CALL var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_32.s b/gas/testsuite/gas/loongarch/tlsdesc_32.s
|
|
new file mode 100644
|
|
index 00000000..ef6aee94
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_32.s
|
|
@@ -0,0 +1,12 @@
|
|
+.L1:
|
|
+ # R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ pcalau12i $a0,%desc_pc_hi20(var)
|
|
+ # R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ addi.w $a0,$a0,%desc_pc_lo12(var)
|
|
+ # R_LARCH_TLS_DESC_LD var
|
|
+ ld.w $ra,$a0,%desc_ld(var)
|
|
+ # R_LARCH_TLS_DESC_CALL var
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ # test macro, pcalau12i + addi.w => pcaddi
|
|
+ la.tls.desc $a0,var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_32_abs.d b/gas/testsuite/gas/loongarch/tlsdesc_32_abs.d
|
|
new file mode 100644
|
|
index 00000000..e787e409
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_32_abs.d
|
|
@@ -0,0 +1,26 @@
|
|
+#as: -mla-global-with-abs
|
|
+#objdump: -dr
|
|
+#skip: loongarch64-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+ <.*>:
|
|
+ 0: 14000004 lu12i.w \$a0, 0
|
|
+ 0: R_LARCH_TLS_DESC_HI20 var
|
|
+ 4: 03800084 ori \$a0, \$a0, 0x0
|
|
+ 4: R_LARCH_TLS_DESC_LO12 var
|
|
+ 8: 28800081 ld.w \$ra, \$a0, 0
|
|
+ 8: R_LARCH_TLS_DESC_LD var
|
|
+ c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ c: R_LARCH_TLS_DESC_CALL var
|
|
+ 10: 14000004 lu12i.w \$a0, 0
|
|
+ 10: R_LARCH_TLS_DESC_HI20 var
|
|
+ 14: 03800084 ori \$a0, \$a0, 0x0
|
|
+ 14: R_LARCH_TLS_DESC_LO12 var
|
|
+ 18: 28800081 ld.w \$ra, \$a0, 0
|
|
+ 18: R_LARCH_TLS_DESC_LD var
|
|
+ 1c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 1c: R_LARCH_TLS_DESC_CALL var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_32_abs.s b/gas/testsuite/gas/loongarch/tlsdesc_32_abs.s
|
|
new file mode 100644
|
|
index 00000000..65d096ea
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_32_abs.s
|
|
@@ -0,0 +1,8 @@
|
|
+.L1:
|
|
+ lu12i.w $a0,%desc_hi20(var)
|
|
+ ori $a0,$a0,%desc_lo12(var)
|
|
+ ld.w $ra,$a0,%desc_ld(var)
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ # Test macro expansion
|
|
+ la.tls.desc $a0,var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_64.d b/gas/testsuite/gas/loongarch/tlsdesc_64.d
|
|
new file mode 100644
|
|
index 00000000..2a2829c9
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_64.d
|
|
@@ -0,0 +1,28 @@
|
|
+#as:
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+ <.*>:
|
|
+ 0: 1a000004 pcalau12i \$a0, 0
|
|
+ 0: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 4: 02c00084 addi.d \$a0, \$a0, 0
|
|
+ 4: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 8: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 8: R_LARCH_TLS_DESC_LD var
|
|
+ c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ c: R_LARCH_TLS_DESC_CALL var
|
|
+ 10: 1a000004 pcalau12i \$a0, 0
|
|
+ 10: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 10: R_LARCH_RELAX \*ABS\*
|
|
+ 14: 02c00084 addi.d \$a0, \$a0, 0
|
|
+ 14: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 14: R_LARCH_RELAX \*ABS\*
|
|
+ 18: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 18: R_LARCH_TLS_DESC_LD var
|
|
+ 1c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 1c: R_LARCH_TLS_DESC_CALL var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_64.s b/gas/testsuite/gas/loongarch/tlsdesc_64.s
|
|
new file mode 100644
|
|
index 00000000..9d0ccb17
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_64.s
|
|
@@ -0,0 +1,12 @@
|
|
+.L1:
|
|
+ # R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ pcalau12i $a0,%desc_pc_hi20(var)
|
|
+ # R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ addi.d $a0,$a0,%desc_pc_lo12(var)
|
|
+ # R_LARCH_TLS_DESC_LD var
|
|
+ ld.d $ra,$a0,%desc_ld(var)
|
|
+ # R_LARCH_TLS_DESC_CALL var
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ # test macro, pcalau12i + addi.d => pcaddi
|
|
+ la.tls.desc $a0,var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_large_abs.d b/gas/testsuite/gas/loongarch/tlsdesc_large_abs.d
|
|
new file mode 100644
|
|
index 00000000..5411a3ac
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_large_abs.d
|
|
@@ -0,0 +1,34 @@
|
|
+#as: -mla-global-with-abs
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+ <.*>:
|
|
+ 0: 14000004 lu12i.w \$a0, 0
|
|
+ 0: R_LARCH_TLS_DESC_HI20 var
|
|
+ 4: 03800084 ori \$a0, \$a0, 0x0
|
|
+ 4: R_LARCH_TLS_DESC_LO12 var
|
|
+ 8: 16000004 lu32i.d \$a0, 0
|
|
+ 8: R_LARCH_TLS_DESC64_LO20 var
|
|
+ c: 03000084 lu52i.d \$a0, \$a0, 0
|
|
+ c: R_LARCH_TLS_DESC64_HI12 var
|
|
+ 10: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 10: R_LARCH_TLS_DESC_LD var
|
|
+ 14: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 14: R_LARCH_TLS_DESC_CALL var
|
|
+ 18: 14000004 lu12i.w \$a0, 0
|
|
+ 18: R_LARCH_TLS_DESC_HI20 var
|
|
+ 1c: 03800084 ori \$a0, \$a0, 0x0
|
|
+ 1c: R_LARCH_TLS_DESC_LO12 var
|
|
+ 20: 16000004 lu32i.d \$a0, 0
|
|
+ 20: R_LARCH_TLS_DESC64_LO20 var
|
|
+ 24: 03000084 lu52i.d \$a0, \$a0, 0
|
|
+ 24: R_LARCH_TLS_DESC64_HI12 var
|
|
+ 28: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 28: R_LARCH_TLS_DESC_LD var
|
|
+ 2c: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 2c: R_LARCH_TLS_DESC_CALL var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_large_abs.s b/gas/testsuite/gas/loongarch/tlsdesc_large_abs.s
|
|
new file mode 100644
|
|
index 00000000..27a52620
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_large_abs.s
|
|
@@ -0,0 +1,12 @@
|
|
+.L1:
|
|
+ .global var
|
|
+ #TLSDESC large abs
|
|
+ lu12i.w $a0,%desc_hi20(var)
|
|
+ ori $a0,$a0,%desc_lo12(var)
|
|
+ lu32i.d $a0,%desc64_lo20(var)
|
|
+ lu52i.d $a0,$a0,%desc64_hi12(var)
|
|
+ ld.d $ra,$a0,%desc_ld(var)
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ # Test macro expansion
|
|
+ la.tls.desc $a0,var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_large_pc.d b/gas/testsuite/gas/loongarch/tlsdesc_large_pc.d
|
|
new file mode 100644
|
|
index 00000000..2b7a4660
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_large_pc.d
|
|
@@ -0,0 +1,38 @@
|
|
+#as:
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+ <.*>:
|
|
+ 0: 1a000004 pcalau12i \$a0, 0
|
|
+ 0: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 4: 02c00005 li.d \$a1, 0
|
|
+ 4: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 8: 16000005 lu32i.d \$a1, 0
|
|
+ 8: R_LARCH_TLS_DESC64_PC_LO20 var
|
|
+ c: 030000a5 lu52i.d \$a1, \$a1, 0
|
|
+ c: R_LARCH_TLS_DESC64_PC_HI12 var
|
|
+ 10: 00109484 add.d \$a0, \$a0, \$a1
|
|
+ 14: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 14: R_LARCH_TLS_DESC_LD var
|
|
+ 18: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 18: R_LARCH_TLS_DESC_CALL var
|
|
+ 1c: 1a000004 pcalau12i \$a0, 0
|
|
+ 1c: R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ 1c: R_LARCH_RELAX \*ABS\*
|
|
+ 20: 02c00001 li.d \$ra, 0
|
|
+ 20: R_LARCH_TLS_DESC_PC_LO12 var
|
|
+ 20: R_LARCH_RELAX \*ABS\*
|
|
+ 24: 16000001 lu32i.d \$ra, 0
|
|
+ 24: R_LARCH_TLS_DESC64_PC_LO20 var
|
|
+ 28: 03000021 lu52i.d \$ra, \$ra, 0
|
|
+ 28: R_LARCH_TLS_DESC64_PC_HI12 var
|
|
+ 2c: 00108484 add.d \$a0, \$a0, \$ra
|
|
+ 30: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 30: R_LARCH_TLS_DESC_LD var
|
|
+ 34: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 34: R_LARCH_TLS_DESC_CALL var
|
|
diff --git a/gas/testsuite/gas/loongarch/tlsdesc_large_pc.s b/gas/testsuite/gas/loongarch/tlsdesc_large_pc.s
|
|
new file mode 100644
|
|
index 00000000..0d0839a7
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/tlsdesc_large_pc.s
|
|
@@ -0,0 +1,17 @@
|
|
+.L1:
|
|
+ # R_LARCH_TLS_DESC_PC_HI20 var
|
|
+ pcalau12i $a0,%desc_pc_hi20(var)
|
|
+ # R_LARCH_TLS_DESC_PC_LO12
|
|
+ addi.d $a1,$zero,%desc_pc_lo12(var)
|
|
+ # R_LARCH_TLS_DESC64_PC_LO20
|
|
+ lu32i.d $a1,%desc64_pc_lo20(var)
|
|
+ # R_LARCH_TLS_DESC64_PC_HI12
|
|
+ lu52i.d $a1,$a1,%desc64_pc_hi12(var)
|
|
+ add.d $a0,$a0,$a1
|
|
+ # R_LARCH_TLS_DESC_LD
|
|
+ ld.d $ra,$a0,%desc_ld(var)
|
|
+ # R_LARCH_TLS_DESC
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ # Test macro expansion
|
|
+ la.tls.desc $a0,$ra,var
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie.d b/ld/testsuite/ld-loongarch-elf/desc-ie.d
|
|
new file mode 100644
|
|
index 00000000..d1acbfc6
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie.d
|
|
@@ -0,0 +1,16 @@
|
|
+#as:
|
|
+#ld: -shared -z norelro -e 0x0
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+230 <fn1>:
|
|
+ 230: 1a000084 pcalau12i \$a0, 4
|
|
+ 234: 28cd6084 ld.d \$a0, \$a0, 856
|
|
+ 238: 03400000 nop.*
|
|
+ 23c: 03400000 nop.*
|
|
+ 240: 1a000084 pcalau12i \$a0, 4
|
|
+ 244: 28cd6081 ld.d \$ra, \$a0, 856
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie.s b/ld/testsuite/ld-loongarch-elf/desc-ie.s
|
|
new file mode 100644
|
|
index 00000000..7f5772bc
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie.s
|
|
@@ -0,0 +1,18 @@
|
|
+ .global v1
|
|
+ .section .tdata,"awT",@progbits
|
|
+v1:
|
|
+ .word 1
|
|
+ .text
|
|
+ .global fn1
|
|
+ .type fn1,@function
|
|
+fn1:
|
|
+
|
|
+ # Use DESC and IE to access the same symbol,
|
|
+ # DESC will relax to IE.
|
|
+ pcalau12i $a0,%desc_pc_hi20(var)
|
|
+ addi.d $a0,$a0,%desc_pc_lo12(var)
|
|
+ ld.d $ra,$a0,%desc_ld(var)
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
+
|
|
+ pcalau12i $a0,%ie_pc_hi20(var)
|
|
+ ld.d $ra,$a0,%ie_pc_lo12(var)
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-le.d b/ld/testsuite/ld-loongarch-elf/desc-le.d
|
|
new file mode 100644
|
|
index 00000000..b4ca9f82
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-le.d
|
|
@@ -0,0 +1,15 @@
|
|
+#as:
|
|
+#ld: -z norelro -e 0x0
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+1200000e8 <fn1>:
|
|
+ 1200000e8: 14000004 lu12i.w \$a0, 0
|
|
+ 1200000ec: 03800084 ori \$a0, \$a0, 0x0
|
|
+ 1200000f0: 03400000 nop.*
|
|
+ 1200000f4: 03400000 nop.*
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-le.s b/ld/testsuite/ld-loongarch-elf/desc-le.s
|
|
new file mode 100644
|
|
index 00000000..9ffaa2d6
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-le.s
|
|
@@ -0,0 +1,14 @@
|
|
+ .global var
|
|
+ .section .tdata,"awT",@progbits
|
|
+var:
|
|
+ .word 1
|
|
+ .text
|
|
+ .global fn1
|
|
+ .type fn1,@function
|
|
+fn1:
|
|
+
|
|
+ # DESC will relax to LE.
|
|
+ pcalau12i $a0,%desc_pc_hi20(var)
|
|
+ addi.d $a0,$a0,%desc_pc_lo12(var)
|
|
+ ld.d $ra,$a0,%desc_ld(var)
|
|
+ jirl $ra,$ra,%desc_call(var)
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-norelax.d b/ld/testsuite/ld-loongarch-elf/desc-norelax.d
|
|
new file mode 100644
|
|
index 00000000..32ce3e5e
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-norelax.d
|
|
@@ -0,0 +1,16 @@
|
|
+#as:
|
|
+#ld: -z norelro -shared --section-start=.got=0x1ff000
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+1c0 <.*>:
|
|
+ 1c0: 1a003fe4 pcalau12i \$a0, 511
|
|
+ 1c4: 02c02084 addi.d \$a0, \$a0, 8
|
|
+ 1c8: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 1cc: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 1d0: 0010888c add.d \$t0, \$a0, \$tp
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-norelax.s b/ld/testsuite/ld-loongarch-elf/desc-norelax.s
|
|
new file mode 100644
|
|
index 00000000..9aa7f552
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-norelax.s
|
|
@@ -0,0 +1,5 @@
|
|
+.L1:
|
|
+# The got address of the symbol exceeds the
|
|
+# range of pcaddi, do not relax.
|
|
+la.tls.desc $a0,var
|
|
+add.d $t0,$a0,$tp
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-relax.d b/ld/testsuite/ld-loongarch-elf/desc-relax.d
|
|
new file mode 100644
|
|
index 00000000..ce53d317
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-relax.d
|
|
@@ -0,0 +1,15 @@
|
|
+#as:
|
|
+#ld: -z norelro -shared
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+188 <.*>:
|
|
+ 188: 18020844 pcaddi \$a0, 4162
|
|
+ 18c: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 190: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 194: 0010888c add.d \$t0, \$a0, \$tp
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/desc-relax.s b/ld/testsuite/ld-loongarch-elf/desc-relax.s
|
|
new file mode 100644
|
|
index 00000000..4a993a5c
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/desc-relax.s
|
|
@@ -0,0 +1,5 @@
|
|
+.L1:
|
|
+# A UND symbol but no more than the range of pcaddi,
|
|
+# do pcalau12i + addi => pcaddi
|
|
+la.tls.desc $a0,var
|
|
+add.d $t0,$a0,$tp
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/ie-le.d b/ld/testsuite/ld-loongarch-elf/ie-le.d
|
|
new file mode 100644
|
|
index 00000000..42694d7f
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/ie-le.d
|
|
@@ -0,0 +1,13 @@
|
|
+#as:
|
|
+#ld: -z norelro -e 0x0
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+1200000e8 <fn1>:
|
|
+ 1200000e8: 14000004 lu12i.w \$a0, 0
|
|
+ 1200000ec: 03800084 ori \$a0, \$a0, 0x0
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/ie-le.s b/ld/testsuite/ld-loongarch-elf/ie-le.s
|
|
new file mode 100644
|
|
index 00000000..795c7ce4
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/ie-le.s
|
|
@@ -0,0 +1,11 @@
|
|
+ .data
|
|
+ .section .tdata,"awT",@progbits
|
|
+var:
|
|
+ .word 1
|
|
+ .text
|
|
+ .global fn1
|
|
+ .type gn1,@function
|
|
+fn1:
|
|
+ # expect IE to relax LE.
|
|
+ pcalau12i $a0,%ie_pc_hi20(var)
|
|
+ ld.d $a0,$a0,%ie_pc_lo12(var)
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
|
|
index b43a518a..2a5709a5 100644
|
|
--- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
|
|
+++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
|
|
@@ -69,3 +69,12 @@ if [istarget "loongarch64-*-*"] {
|
|
] \
|
|
]
|
|
}
|
|
+
|
|
+if [istarget "loongarch64-*-*"] {
|
|
+ run_dump_test "desc-ie"
|
|
+ run_dump_test "desc-le"
|
|
+ run_dump_test "ie-le"
|
|
+ run_dump_test "tlsdesc-dso"
|
|
+ run_dump_test "desc-norelax"
|
|
+ run_dump_test "desc-relax"
|
|
+}
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d
|
|
new file mode 100644
|
|
index 00000000..667ad746
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d
|
|
@@ -0,0 +1,56 @@
|
|
+#as:
|
|
+#ld: -shared -z norelro
|
|
+#objdump: -dr
|
|
+#skip: loongarch32-*-*
|
|
+
|
|
+.*: file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+0+418 <fun_gl1>:
|
|
+ 418: 180214c4 pcaddi \$a0, 4262
|
|
+ 41c: 1a000084 pcalau12i \$a0, 4
|
|
+ 420: 28db0084 ld.d \$a0, \$a0, 1728
|
|
+ 424: 180212a4 pcaddi \$a0, 4245
|
|
+ 428: 18021304 pcaddi \$a0, 4248
|
|
+ 42c: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 430: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 434: 1a000084 pcalau12i \$a0, 4
|
|
+ 438: 28d9c084 ld.d \$a0, \$a0, 1648
|
|
+ 43c: 03400000 nop.*
|
|
+ 440: 03400000 nop.*
|
|
+ 444: 1a000084 pcalau12i \$a0, 4
|
|
+ 448: 28d9c084 ld.d \$a0, \$a0, 1648
|
|
+ 44c: 18021264 pcaddi \$a0, 4243
|
|
+ 450: 18021244 pcaddi \$a0, 4242
|
|
+ 454: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 458: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 45c: 1a000084 pcalau12i \$a0, 4
|
|
+ 460: 28daa084 ld.d \$a0, \$a0, 1704
|
|
+
|
|
+0+464 <fun_lo>:
|
|
+ 464: 1a000084 pcalau12i \$a0, 4
|
|
+ 468: 28d86084 ld.d \$a0, \$a0, 1560
|
|
+ 46c: 18020ce4 pcaddi \$a0, 4199
|
|
+ 470: 18020e04 pcaddi \$a0, 4208
|
|
+ 474: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 478: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 47c: 18020d24 pcaddi \$a0, 4201
|
|
+ 480: 1a000084 pcalau12i \$a0, 4
|
|
+ 484: 28d90084 ld.d \$a0, \$a0, 1600
|
|
+ 488: 03400000 nop.*
|
|
+ 48c: 03400000 nop.*
|
|
+ 490: 1a000084 pcalau12i \$a0, 4
|
|
+ 494: 28d90084 ld.d \$a0, \$a0, 1600
|
|
+ 498: 18020d84 pcaddi \$a0, 4204
|
|
+ 49c: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 4a0: 4c000021 jirl \$ra, \$ra, 0
|
|
+ 4a4: 18020d24 pcaddi \$a0, 4201
|
|
+ 4a8: 1a000084 pcalau12i \$a0, 4
|
|
+ 4ac: 28d96084 ld.d \$a0, \$a0, 1624
|
|
+
|
|
+0+4b0 <fun_external>:
|
|
+ 4b0: 18020d84 pcaddi \$a0, 4204
|
|
+ 4b4: 28c00081 ld.d \$ra, \$a0, 0
|
|
+ 4b8: 4c000021 jirl \$ra, \$ra, 0
|
|
diff --git a/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.s b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.s
|
|
new file mode 100644
|
|
index 00000000..936bbcea
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.s
|
|
@@ -0,0 +1,65 @@
|
|
+ .data
|
|
+ .section .tdata,"awT",@progbits
|
|
+ .global gl1, gl2, gl3, gl4
|
|
+gl1: .dword 1
|
|
+gl2: .dword 2
|
|
+gl3: .dword 3
|
|
+gl4: .dword 4
|
|
+lo1: .dword 10
|
|
+lo2: .dword 20
|
|
+lo3: .dword 30
|
|
+lo4: .dword 40
|
|
+ .text
|
|
+# Access global symbol
|
|
+fun_gl1:
|
|
+ # GD + IE
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, gl1
|
|
+ la.tls.ie $a0, gl1
|
|
+
|
|
+ # GD + DESC
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, gl2
|
|
+ # DESC: pcaddi + addi.d => pcaddi
|
|
+ la.tls.desc $a0, gl2
|
|
+
|
|
+ # DESC + IE
|
|
+ # DESC -> IE
|
|
+ la.tls.desc $a0, gl3
|
|
+ la.tls.ie $a0, gl3
|
|
+
|
|
+ # GD + DESC + IE
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, gl4
|
|
+ # DESC: pcaddi + addi.d => pcaddi
|
|
+ la.tls.desc $a0, gl4
|
|
+ la.tls.ie $a0, gl4
|
|
+
|
|
+# Access local symbol
|
|
+fun_lo:
|
|
+ # IE + GD
|
|
+ la.tls.ie $a0, lo1
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, lo1
|
|
+
|
|
+ # DESC + GD
|
|
+ # DESC: pcaddi + addi.d => pcaddi
|
|
+ la.tls.desc $a0, lo2
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, lo2
|
|
+
|
|
+ # DESC + IE
|
|
+ # DESC: DESC -> IE
|
|
+ la.tls.desc $a0, lo3
|
|
+ la.tls.ie $a0, lo3
|
|
+
|
|
+ # DESC + GD + IE
|
|
+ # DESC: pcaddi + addi.d => pcaddi
|
|
+ la.tls.desc $a0, lo4
|
|
+ # GD: pcaddi + addi.d => pcaddi
|
|
+ la.tls.gd $a0, lo4
|
|
+ la.tls.ie $a0, lo4
|
|
+
|
|
+# Access external undef symbol
|
|
+fun_external:
|
|
+ la.tls.desc $a0, sH1
|
|
--
|
|
2.33.0
|
|
|