summaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ld-aarch64/aarch64-elf.exp41
-rw-r--r--ld/testsuite/ld-aarch64/tls-gd-symbolic.d20
-rw-r--r--ld/testsuite/ld-aarch64/tls-gd-symbolic.s27
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d8
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-all.d8
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d27
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s34
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d29
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gd-ie.s4
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s5
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s4
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d20
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s22
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s5
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d2
-rw-r--r--ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s5
-rw-r--r--ld/testsuite/ld-aarch64/tls-sharedlib.s4
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d4
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d4
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s9
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d4
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d4
-rw-r--r--ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s9
28 files changed, 232 insertions, 77 deletions
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index 3c45f87151..337beadcbf 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -273,17 +273,8 @@ run_dump_test "tls-relax-gd-le-ilp32"
run_dump_test "tls-relax-gdesc-le"
run_dump_test "tls-relax-gdesc-le-now"
run_dump_test "tls-relax-gdesc-le-ilp32"
-run_dump_test "tls-relax-gd-ie"
-run_dump_test "tls-relax-gd-ie-ilp32"
-run_dump_test_lp64 "tls-relax-large-gd-ie"
-run_dump_test_lp64 "tls-relax-large-gd-ie-be"
run_dump_test_lp64 "tls-relax-large-gd-le"
run_dump_test_lp64 "tls-relax-large-gd-le-be"
-run_dump_test_lp64 "tls-relax-large-desc-ie"
-run_dump_test_lp64 "tls-relax-large-desc-ie-be"
-run_dump_test_lp64 "tls-relax-large-desc-le"
-run_dump_test_lp64 "tls-relax-large-desc-le-be"
-run_dump_test "tls-relax-gdesc-ie"
run_dump_test "tls-relax-ie-le"
run_dump_test "tls-relax-ie-le-ilp32"
run_dump_test "tls-relax-ld-le-small"
@@ -292,7 +283,6 @@ run_dump_test "tls-relax-ld-le-tiny"
run_dump_test "tls-relax-ld-le-tiny-ilp32"
run_dump_test "tls-desc-ie"
run_dump_test "tls-desc-ie-ilp32"
-run_dump_test "tls-relax-gdesc-ie-2"
run_dump_test "tls-relax-gdesc-le-2"
run_dump_test "tls-relax-gdesc-le-2-ilp32"
run_dump_test "tls-relax-ie-le-2"
@@ -300,13 +290,9 @@ run_dump_test "tls-relax-ie-le-2-ilp32"
run_dump_test "tls-relax-ie-le-3"
run_dump_test "tls-relax-ie-le-3-ilp32"
run_dump_test "tls-tiny-gd"
-run_dump_test "tls-tiny-gd-ie"
-run_dump_test "tls-tiny-gd-ie-ilp32"
run_dump_test "tls-tiny-gd-le"
run_dump_test "tls-tiny-gd-le-ilp32"
run_dump_test "tls-tiny-desc"
-run_dump_test "tls-tiny-desc-ie"
-run_dump_test "tls-tiny-desc-ie-ilp32"
run_dump_test "tls-tiny-desc-le"
run_dump_test "tls-tiny-desc-le-ilp32"
run_dump_test "tls-tiny-ie"
@@ -331,6 +317,33 @@ run_dump_test "protected-data"
run_dump_test_lp64 "pr22764"
run_dump_test_lp64 "pr20402"
+if {[check_shared_lib_support]
+ && [ld_assemble $as $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o]
+ && [ld_link $ld tmpdir/tls-sharedlib.so "-shared tmpdir/tls-sharedlib.o"] } {
+ run_dump_test "tls-relax-gd-ie"
+ run_dump_test_lp64 "tls-relax-large-gd-ie"
+ run_dump_test_lp64 "tls-relax-large-gd-ie-be"
+ run_dump_test_lp64 "tls-relax-large-desc-ie"
+ run_dump_test_lp64 "tls-relax-large-desc-ie-be"
+ run_dump_test_lp64 "tls-relax-large-desc-le"
+ run_dump_test_lp64 "tls-relax-large-desc-le-be"
+ run_dump_test "tls-relax-gdesc-ie"
+ run_dump_test "tls-relax-gdesc-ie-2"
+ run_dump_test "tls-tiny-gd-ie"
+ run_dump_test "tls-tiny-desc-ie"
+}
+if {[check_shared_lib_support]
+ && [ld_assemble_flags $as -mabi=ilp32 $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o]
+ && [ld_link $ld tmpdir/tls-sharedlib-ilp32.so "-shared tmpdir/tls-sharedlib.o -m [aarch64_choose_ilp32_emul]"] } {
+ run_dump_test "tls-relax-gd-ie-ilp32"
+ run_dump_test "tls-tiny-gd-ie-ilp32"
+ run_dump_test "tls-tiny-desc-ie-ilp32"
+}
+run_dump_test "tls-relax-gd-ie-2"
+run_dump_test "tls-relax-gd-ie-3"
+run_dump_test "tls-relax-ie-le-4"
+run_dump_test "tls-gd-symbolic"
+
# ifunc tests
run_dump_test "ifunc-1"
run_dump_test "ifunc-1-local"
diff --git a/ld/testsuite/ld-aarch64/tls-gd-symbolic.d b/ld/testsuite/ld-aarch64/tls-gd-symbolic.d
new file mode 100644
index 0000000000..d6732acdaf
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-gd-symbolic.d
@@ -0,0 +1,20 @@
+# Testcase to show that -Bsymbolic does not trigger any relaxation from general
+# dynamic or initial exec for global symbols.
+#target: [check_shared_lib_support]
+#ld: -shared -Bsymbolic
+#objdump: -d -j .text
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <_test_tls_desc>:
+ +[0-9a-f]+: ........ adrp x0, .*
+ +[0-9a-f]+: ........ ldr x1, \[x0, #.*\]
+ +[0-9a-f]+: ........ add x0, x0, .*
+ +[0-9a-f]+: d63f0020 blr x1
+
+[0-9a-f]+ <_test_tls_desc2>:
+ +[0-9a-f]+: ........ adrp x0, .*
+ +[0-9a-f]+: ........ ldr x0, \[x0, #.*\]
diff --git a/ld/testsuite/ld-aarch64/tls-gd-symbolic.s b/ld/testsuite/ld-aarch64/tls-gd-symbolic.s
new file mode 100644
index 0000000000..d2ca5dac7b
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-gd-symbolic.s
@@ -0,0 +1,27 @@
+ # Demonstrating TLS relaxation behavior for -Bsymbolic linking.
+ # (i.e. no extra relaxation when using -Bsymbolic).
+ .global tlsdescvar
+ .global tlsdescvar2
+ .section .tbss,"awT",%nobits
+ .align 2
+ .type tlsdescvar, %object
+ .size tlsdescvar, 4
+tlsdescvar:
+ .zero 4
+ .type tlsdescvar2, %object
+ .size tlsdescvar2, 4
+tlsdescvar2:
+ .zero 4
+.text
+_test_tls_desc:
+
+ adrp x0, :tlsdesc:tlsdescvar
+ ldr x1, [x0, :tlsdesc_lo12:tlsdescvar]
+ add x0, x0, :tlsdesc_lo12:tlsdescvar
+ .tlsdesccall tlsdescvar
+ blr x1
+
+_test_tls_desc2:
+
+ adrp x0, :gottprel:tlsdescvar2
+ ldr x0, [x0, #:gottprel_lo12:tlsdescvar2]
diff --git a/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d b/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d
index 1cb4ef4261..62faed4b73 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d
@@ -5,8 +5,8 @@
#...
+10000: a9bf7bfd stp x29, x30, \[sp, #-16\]!
+10004: 910003fd mov x29, sp
- +10008: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
- +1000c: b9400400 ldr w0, \[x0, #4\]
+ +10008: 52a00000 movz w0, #0x0, lsl #16
+ +1000c: 72800100 movk w0, #0x8
+10010: d503201f nop
+10014: d503201f nop
+10018: d53bd041 mrs x1, tpidr_el0
@@ -20,8 +20,8 @@
+10038: 8b000040 add x0, x2, x0
+1003c: b9400000 ldr w0, \[x0\]
+10040: 0b000021 add w1, w1, w0
- +10044: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
- +10048: b9400800 ldr w0, \[x0, #8\]
+ +10044: 52a00000 movz w0, #0x0, lsl #16
+ +10048: 72800200 movk w0, #0x10
+1004c: d53bd041 mrs x1, tpidr_el0
+10050: 0b000020 add w0, w1, w0
+10054: b9400000 ldr w0, \[x0\]
diff --git a/ld/testsuite/ld-aarch64/tls-relax-all.d b/ld/testsuite/ld-aarch64/tls-relax-all.d
index 59421864f9..1262a99a6a 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-all.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-all.d
@@ -4,8 +4,8 @@
#...
+10000: a9bf7bfd stp x29, x30, \[sp, #-16\]!
+10004: 910003fd mov x29, sp
- +10008: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
- +1000c: f9400400 ldr x0, \[x0, #8\]
+ +10008: d2a00000 movz x0, #0x0, lsl #16
+ +1000c: f2800200 movk x0, #0x10
+10010: d503201f nop
+10014: d503201f nop
+10018: d53bd041 mrs x1, tpidr_el0
@@ -19,8 +19,8 @@
+10038: 8b000040 add x0, x2, x0
+1003c: b9400000 ldr w0, \[x0\]
+10040: 0b000021 add w1, w1, w0
- +10044: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
- +10048: f9400800 ldr x0, \[x0, #16\]
+ +10044: d2a00000 movz x0, #0x0, lsl #16
+ +10048: f2800300 movk x0, #0x18
+1004c: d53bd041 mrs x1, tpidr_el0
+10050: 8b000020 add x0, x1, x0
+10054: b9400000 ldr w0, \[x0\]
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d
new file mode 100644
index 0000000000..f0281b7757
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d
@@ -0,0 +1,27 @@
+# The linker recognises that if we have one IE access to a TLS symbol then all
+# accesses to that symbol could be IE. Here we are also interested to check
+# the linker does not also decide that a second access to that symbol could be
+# LE.
+#target: [check_shared_lib_support]
+#ld: -shared
+#objdump: -dr
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <foo>:
+ +[0-9a-f]+: d2800000 mov x0, #0x0 // #0
+ +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0
+ +[0-9a-f]+: .* adrp x0, .*
+ +[0-9a-f]+: .* ldr x0, \[x0, #.*\]
+ +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\]
+ +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0
+ +[0-9a-f]+: 910003fd mov x29, sp
+ +[0-9a-f]+: .* adrp x0, .*
+ +[0-9a-f]+: .* ldr x0, \[x0, #.*\]
+ +[0-9a-f]+: d503201f nop
+ +[0-9a-f]+: d503201f nop
+ +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\]
+ +[0-9a-f]+: d65f03c0 ret
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s
new file mode 100644
index 0000000000..568ceb4857
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s
@@ -0,0 +1,34 @@
+ .section .tbss,"awT",@nobits
+ .align 2
+ .type y, %object
+ .size y, 4
+y:
+ .zero 4
+
+
+
+
+ .text
+ .global foo
+ .type foo, @function
+foo:
+ # Access the local symbol with an IE access.
+ mov x0, 0
+ mrs x1, tpidr_el0
+ adrp x0, :gottprel:y
+ ldr x0, [x0, #:gottprel_lo12:y]
+ ldr w0, [x1, x0]
+
+ # Also access the same symbol with a General Dynamic access.
+ # The linker should be able to recognise that if we're already
+ # accessing this symbol with an Initial Exec access then this General
+ # Dynamic access could be relaxed to an Initial Exec one too.
+ mrs x1, tpidr_el0
+ mov x29, sp
+ adrp x0, :tlsdesc:y
+ ldr x2, [x0, #:tlsdesc_lo12:y]
+ add x0, x0, :tlsdesc_lo12:y
+ .tlsdesccall y
+ blr x2
+ ldr w0, [x1, x0]
+ ret
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d
new file mode 100644
index 0000000000..2e45ec90d1
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d
@@ -0,0 +1,29 @@
+# The linker recognises that if we have one IE access to a TLS symbol then all
+# accesses to that symbol could be IE. Here we are also interested to check
+# the linker does not also decide that a second access to that symbol could be
+# LE.
+#source: tls-relax-gd-ie-2.s
+#target: [check_shared_lib_support]
+#ld: -shared -Bsymbolic
+#objdump: -dr
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <foo>:
+ +[0-9a-f]+: d2800000 mov x0, #0x0 // #0
+ +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0
+ +[0-9a-f]+: .* adrp x0, .*
+ +[0-9a-f]+: .* ldr x0, \[x0, #.*\]
+ +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\]
+ +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0
+ +[0-9a-f]+: 910003fd mov x29, sp
+ +[0-9a-f]+: .* adrp x0, .*
+ +[0-9a-f]+: .* ldr x0, \[x0, #.*\]
+ +[0-9a-f]+: d503201f nop
+ +[0-9a-f]+: d503201f nop
+ +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\]
+ +[0-9a-f]+: d65f03c0 ret
+
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d
index ab08c6161b..340206a9e2 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d
@@ -1,6 +1,6 @@
#source: tls-relax-gd-ie.s
#as: -mabi=ilp32
-#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0
+#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so
#objdump: -dr
#...
+10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d
index f80bb90777..0c03290e0a 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d
@@ -1,5 +1,5 @@
#source: tls-relax-gd-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#objdump: -dr
#...
+10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s
index 88c7eec73e..afe076c8c8 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s
@@ -1,7 +1,3 @@
- .global var
- .section .tdata,"awT",%progbits
-var:
- .word 2
.text
adrp x0, :tlsgd:var
add x0, x0, :tlsgd_lo12:var
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d
index 2b8e346fc6..f13263f201 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d
@@ -1,5 +1,5 @@
#source: tls-relax-gdesc-ie-2.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#objdump: -dr
#...
+10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s
index 790b6c6eb8..f7be57c320 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s
+++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s
@@ -1,9 +1,5 @@
// Test TLS Desc to TLS IE relaxation when instructions are not consecutive.
- .global var
- .section .tdata
-var:
- .word 2
.text
adrp x0, :tlsdesc:var
nop
@@ -20,5 +16,4 @@ var:
mrs x1, tpidr_el0
add x0, x1, x0
ldr w0, [x0]
- .global var
.section .tdata
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d
index 86277f8256..1ace84858a 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d
@@ -1,5 +1,5 @@
#source: tls-relax-gdesc-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#objdump: -dr
#...
+10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_>
diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s
index 38b372132f..089d36c9cc 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s
@@ -1,7 +1,3 @@
- .global var
- .section .tdata
-var:
- .word 2
.text
adrp x0, :tlsdesc:var
ldr x17, [x0, #:tlsdesc_lo12:var]
diff --git a/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d
new file mode 100644
index 0000000000..e2bc5f1530
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d
@@ -0,0 +1,20 @@
+# We already test that we relax an access to a local symbol, this testcase
+# checks that we relax an access to a global-binding symbol if the static linker
+# knows that the symbol will resolve to the executable local value.
+#
+# The access should be relaxed to a LE access.
+#ld:
+#objdump: -d
+
+.*: file format .*
+
+
+Disassembly of section \.text:
+
+[0-9a-f]+ <_start>:
+ +[0-9a-f]+: d2800000 mov x0, #0x0 // #0
+ +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0
+ +[0-9a-f]+: d2a00000 movz x0, #0x0, lsl #16
+ +[0-9a-f]+: f2800200 movk x0, #0x10
+ +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\]
+ +[0-9a-f]+: d65f03c0 ret
diff --git a/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s
new file mode 100644
index 0000000000..e151cd4efd
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s
@@ -0,0 +1,22 @@
+# Test TLS IE to TLS LE relaxation for global symbols.
+ .section .tbss,"awT",@nobits
+ .global x
+ .align 2
+ .type x, %object
+ .size x, 4
+x:
+ .zero 4
+
+
+
+ .text
+ .global _start
+ .type _start, @function
+_start:
+ mov x0, 0
+ mrs x1, tpidr_el0
+ adrp x0, :gottprel:x
+ ldr x0, [x0, #:gottprel_lo12:x]
+ ldr w0, [x1, x0]
+ ret
+
diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d
index 21ad5e5a18..cb546ad74e 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d
@@ -1,5 +1,5 @@
#source: tls-relax-large-desc-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#notarget: aarch64_be-*-*
#objdump: -dr
#...
diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s
index a4d1e00086..98dc2a571d 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s
@@ -1,8 +1,3 @@
- .global var
- .section .tdata,"awT",%progbits
-var:
- .word 2
-
.text
test:
ldr x1, .Lgot
diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d
index 2b398dbb9c..740178d461 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d
@@ -1,5 +1,5 @@
#source: tls-relax-large-gd-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#notarget: aarch64_be-*-*
#objdump: -dr
#...
diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s
index 8e0310d6b3..d35aace776 100644
--- a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s
@@ -1,8 +1,3 @@
- .global var
- .section .tdata,"awT",%progbits
-var:
- .word 2
-
.text
test:
ldr x1, .Lgot
diff --git a/ld/testsuite/ld-aarch64/tls-sharedlib.s b/ld/testsuite/ld-aarch64/tls-sharedlib.s
new file mode 100644
index 0000000000..8838b9f234
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/tls-sharedlib.s
@@ -0,0 +1,4 @@
+ .global var
+ .section .tdata,"awT",@progbits
+var:
+ .word 2
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d
index ebbaf854ba..3dffa1b85e 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d
+++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d
@@ -1,12 +1,12 @@
#source: tls-tiny-desc-ie.s
#as: -mabi=ilp32
-#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0
+#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so
#objdump: -dr
#...
Disassembly of section .text:
00010000 \<test\>:
- +10000: 18080020 ldr w0, 20004 \<_GLOBAL_OFFSET_TABLE_\+0x4\>
+ +10000: 18080020 ldr w0, 20004 \<var\>
+10004: d503201f nop
+10008: d503201f nop
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d
index 0088539d6b..e759ae9457 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d
@@ -1,11 +1,11 @@
#source: tls-tiny-desc-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#objdump: -dr
#...
Disassembly of section .text:
0000000000010000 \<test\>:
- +10000: 58080040 ldr x0, 20008 \<_GLOBAL_OFFSET_TABLE_\+0x8\>
+ +10000: 58080040 ldr x0, 20008 \<var\>
+10004: d503201f nop
+10008: d503201f nop
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s
index 520cd4e85b..fcc970f6d8 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s
@@ -1,12 +1,3 @@
- .global var
-
- .section .tbss,"awT",%nobits
- .align 2
- .type var, %object
- .size var, 4
-var:
- .zero 4
-
.text
test:
ldr x1, :tlsdesc:var
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d
index 1ea61103b4..6317152eb1 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d
+++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d
@@ -1,12 +1,12 @@
#source: tls-tiny-gd-ie.s
#as: -mabi=ilp32
-#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0
+#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so
#objdump: -dr
#...
Disassembly of section .text:
00010000 \<test\>:
- +10000: 18080020 ldr w0, 20004 \<_GLOBAL_OFFSET_TABLE_\+0x4\>
+ +10000: 18080020 ldr w0, 20004 \<var\>
+10004: d53bd041 mrs x1, tpidr_el0
+10008: 0b000020 add w0, w1, w0
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d
index 629d90c942..66b996e6f4 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d
+++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d
@@ -1,11 +1,11 @@
#source: tls-tiny-gd-ie.s
-#ld: -T relocs.ld -e0
+#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so
#objdump: -dr
#...
Disassembly of section .text:
0000000000010000 \<test\>:
- +10000: 58080040 ldr x0, 20008 \<_GLOBAL_OFFSET_TABLE_\+0x8\>
+ +10000: 58080040 ldr x0, 20008 \<var\>
+10004: d53bd041 mrs x1, tpidr_el0
+10008: 8b000020 add x0, x1, x0
diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s
index 4dc7e66bbd..3ae4a0cc9f 100644
--- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s
+++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s
@@ -1,12 +1,3 @@
- .global var
-
- .section .tbss,"awT",%nobits
- .align 2
- .type var, %object
- .size var, 4
-var:
- .zero 4
-
.text
test:
adr x0, :tlsgd:var