[PATCH 07/11] s390: Fix linker TLS IE without GOT pointer tests
Jens Remus
jremus@linux.ibm.com
Thu Nov 13 13:21:40 GMT 2025
In TLS Initial Exec (IE) model tests without GOT pointer do not
erroneously add the GOT pointer (in register r12) to the GOT entry
address (sym@indntpoff). Note that there is no related change in
the expected test results as the load (lg) is rewritten to a load
register (sllg) due to IE -> LE transition.
Additionally in IE without GOT pointer using larl @indntpoff to load
the GOT entry address do not use the :tls_load marker on the subsequent
load from GOT as the sym@indtpoff cannot be optimized to sym@ntpoff.
Otherwise the linker erroneously rewrites the load (lg) to a load
register (sllg) due to IE -> LE transition.
ld/testsuite/
* ld-s390/tlsbin.s: Do not add GOT pointer to GOT entry
addresses in IE tests without GOT pointer.
* ld-s390/tlsbin_64.s: Likewise.
* ld-s390/tlsbinpic_64.s: Likewise. Do not use :tls_load marker
on load from GOT in IE tests without GOT pointer using
larl @indntpoff.
* ld-s390/tlsbin.dd: Adapt expected test output patterns to
test changes.
* ld-s390/tlsbin_64.dd: Likewise.
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
ld/testsuite/ld-s390/tlsbin.dd | 2 +-
ld/testsuite/ld-s390/tlsbin.s | 8 ++++----
ld/testsuite/ld-s390/tlsbin_64.dd | 10 +++++-----
ld/testsuite/ld-s390/tlsbin_64.s | 8 ++++----
ld/testsuite/ld-s390/tlsbinpic_64.s | 8 ++++----
5 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/ld/testsuite/ld-s390/tlsbin.dd b/ld/testsuite/ld-s390/tlsbin.dd
index 6121ed470fec..21dc2970614b 100644
--- a/ld/testsuite/ld-s390/tlsbin.dd
+++ b/ld/testsuite/ld-s390/tlsbin.dd
@@ -170,7 +170,7 @@ Disassembly of section .text:
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
# IE against global var
+[0-9a-f]+: 58 30 d0 00 l %r3,0\(%r13\)
- +[0-9a-f]+: 58 43 c0 00 l %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 58 40 30 00 l %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE -> LE against global var defined in exec
+[0-9a-f]+: 58 30 d0 04 l %r3,4\(%r13\)
diff --git a/ld/testsuite/ld-s390/tlsbin.s b/ld/testsuite/ld-s390/tlsbin.s
index 43f9c4569e2b..43c17b214c05 100644
--- a/ld/testsuite/ld-s390/tlsbin.s
+++ b/ld/testsuite/ld-s390/tlsbin.s
@@ -49,22 +49,22 @@ _start:
/* IE against global var */
l %r3,.LC0-.LT1(%r13)
- l %r4,0(%r3,%r12):tls_load:sG6
+ l %r4,0(%r3):tls_load:sG6
la %r5,0(%r4,%r9)
/* IE -> LE against global var defined in exec */
l %r3,.LC1-.LT1(%r13)
- l %r4,0(%r3,%r12):tls_load:bg6
+ l %r4,0(%r3):tls_load:bg6
la %r5,0(%r4,%r9)
/* IE -> LE against local var */
l %r3,.LC2-.LT1(%r13)
- l %r4,0(%r3,%r12):tls_load:bl6
+ l %r4,0(%r3):tls_load:bl6
la %r5,0(%r4,%r9)
/* IE -> LE against hidden but not local var */
l %r3,.LC3-.LT1(%r13)
- l %r4,0(%r3,%r12):tls_load:sh6
+ l %r4,0(%r3):tls_load:sh6
la %r5,0(%r4,%r9)
/* LE, global var defined in exec */
diff --git a/ld/testsuite/ld-s390/tlsbin_64.dd b/ld/testsuite/ld-s390/tlsbin_64.dd
index f5391575a245..f42d3a2c122a 100644
--- a/ld/testsuite/ld-s390/tlsbin_64.dd
+++ b/ld/testsuite/ld-s390/tlsbin_64.dd
@@ -131,19 +131,19 @@ Disassembly of section .text:
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE against global var with larl got access
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <.*>
- +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: e3 40 30 00 00 04 lg %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE against global var defined in exec with larl got access
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x30>
- +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: e3 40 30 00 00 04 lg %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE against local var with larl got access
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20>
- +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: e3 40 30 00 00 04 lg %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE against hidden var with larl got access
+[0-9a-f]+: c0 30 [0-9a-f ]+ larl %r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x38>
- +[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
+ +[0-9a-f]+: e3 40 30 00 00 04 lg %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE against global var with small got access (no optimization)
+[0-9a-f]+: e3 30 c0 28 00 04 lg %r3,40\(%r12\)
@@ -203,7 +203,7 @@ Disassembly of section .text:
+[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
# IE against global var
+[0-9a-f]+: e3 30 d0 00 00 04 lg %r3,0\(%r13\)
- +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: e3 40 30 00 00 04 lg %r4,0\(%r3\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
# IE -> LE against global var defined in exec
+[0-9a-f]+: e3 30 d0 08 00 04 lg %r3,8\(%r13\)
diff --git a/ld/testsuite/ld-s390/tlsbin_64.s b/ld/testsuite/ld-s390/tlsbin_64.s
index 82fb4d5a00ff..15c3bc32e3bb 100644
--- a/ld/testsuite/ld-s390/tlsbin_64.s
+++ b/ld/testsuite/ld-s390/tlsbin_64.s
@@ -51,22 +51,22 @@ _start:
/* IE against global var */
lg %r3,.LC0-.LT1(%r13)
- lg %r4,0(%r3,%r12):tls_load:sG6
+ lg %r4,0(%r3):tls_load:sG6
la %r5,0(%r4,%r9)
/* IE -> LE against global var defined in exec */
lg %r3,.LC1-.LT1(%r13)
- lg %r4,0(%r3,%r12):tls_load:bg6
+ lg %r4,0(%r3):tls_load:bg6
la %r5,0(%r4,%r9)
/* IE -> LE against local var */
lg %r3,.LC2-.LT1(%r13)
- lg %r4,0(%r3,%r12):tls_load:bl6
+ lg %r4,0(%r3):tls_load:bl6
la %r5,0(%r4,%r9)
/* IE -> LE against hidden but not local var */
lg %r3,.LC3-.LT1(%r13)
- lg %r4,0(%r3,%r12):tls_load:sh6
+ lg %r4,0(%r3):tls_load:sh6
la %r5,0(%r4,%r9)
/* LE, global var defined in exec */
diff --git a/ld/testsuite/ld-s390/tlsbinpic_64.s b/ld/testsuite/ld-s390/tlsbinpic_64.s
index b337a61b316f..b849156ed0fb 100644
--- a/ld/testsuite/ld-s390/tlsbinpic_64.s
+++ b/ld/testsuite/ld-s390/tlsbinpic_64.s
@@ -145,22 +145,22 @@ fn2:
/* IE against global var with larl got access */
larl %r3,sG3@indntpoff
- lg %r4,0(%r3,%r12):tls_load:sG3
+ lg %r4,0(%r3)
la %r5,0(%r4,%r9)
/* IE against global var defined in exec with larl got access */
larl %r3,sg3@indntpoff
- lg %r4,0(%r3,%r12):tls_load:sg3
+ lg %r4,0(%r3)
la %r5,0(%r4,%r9)
/* IE against local var with larl got access */
larl %r3,sl3@indntpoff
- lg %r4,0(%r3,%r12):tls_load:sl3
+ lg %r4,0(%r3)
la %r5,0(%r4,%r9)
/* IE against hidden var with larl got access */
larl %r3,sh3@indntpoff
- lg %r4,0(%r3,%r12):tls_load:sh3
+ lg %r4,0(%r3)
la %r5,0(%r4,%r9)
/* IE against global var with small got access (no optimization) */
--
2.48.1
More information about the Binutils
mailing list