[PATCH 04/15] s390: Linker TLS test fixes and cleanups
Jens Remus
jremus@linux.ibm.com
Fri Nov 7 16:34:47 GMT 2025
In TLS General Dynamic (GD) model tests use argument register r2 to
pass the GOT offset to the tls_index structure to __tls get offset.
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 it got rewritten to lgr/sllg
due to IE -> LE transition.
In TLS Local Exec (LE) model tests use the proper operand modifier
@ntpoff instead of @indntpoff. Note that @indntpoff got rewritten
to @ntpoff due to IE -> LE transition.
In 64-bit tests fix the extraction of the TCB address from access
registers a0 and a1. Reference the proper TLS variable in IE test.
In function prologues save the stack pointer (SP) register r15, use the
"preferred" frame pointer (FP) register r11, and correct writing of the
back chain (located at SP+0). In function epilogues restore SP register
r15. While at it use the terms "prologue" and "epilogue" in comments.
Consistently use registers r4 and r5 in TLS Initial Exec (IE) model
tests.
While at it strip trailing spaces.
ld/testsuite/
* ld-s390/s390.exp: Prefix "TLS" to "TLS helper shared library"
test names.
* ld-s390/tlsbin.s: In prologue save SP register r15, use
"preferred" FP register r11, and fix writing of back chain. In
epilogue restore SP register r15. Use "prologue/epilogue"
terminology. Use @ntpoff in LE test. Consistently use registers
r4 and r5 in IE tests. Do not add GOT pointer to GOT entry
addresses in IE tests w/o GOT pointer.
* ld-s390/tlsbin_64.s: Likewise. Fix extracting of TCB.
* ld-s390/tlsbinpic.s: Remove duplicate .hidden directive. In
prologue save SP register r15, use "preferred" FP register r11,
and fix writing of back chain. In epilogue restore SP register
r15. Use "prologue/epilogue" terminology. Consistently use
registers r4 and r5 in IE tests.
* ld-s390/tlsbinpic_64.s: Likewise. Fix extracting of TCB. Use
argument register r2 to pass GOT offset to the tls_index
structure in GD test. Reference proper variable sl1 in IE test.
* ld-s390/tlspic1.s: In prologue save SP register r15, use
"preferred" FP register r11, and fix writing of back chain. In
epilogue restore SP register r15. Use "prologue/epilogue"
terminology. Strip trailing spaces.
* ld-s390/tlspic1_64.s: Likewise. Fix extracting of TCB.
* ld-s390/tlslib.s: Remove trailing comma from .globl directive.
* ld-s390/tlslib_64.s: Likewise.
* ld-s390/tlsbin.dd: Adapt expected test output patterns to test
changes. Use "prologue/epilogue" terminology.
* ld-s390/tlsbin_64.dd: Likewise.
* ld-s390/tlspic.dd: Likewise.
* ld-s390/tlspic_64.dd: Likewise.
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
ld/testsuite/ld-s390/s390.exp | 4 +--
ld/testsuite/ld-s390/tlsbin.dd | 42 +++++++++++++-------------
ld/testsuite/ld-s390/tlsbin.s | 26 ++++++++--------
ld/testsuite/ld-s390/tlsbin_64.dd | 47 ++++++++++++++---------------
ld/testsuite/ld-s390/tlsbin_64.s | 28 ++++++++---------
ld/testsuite/ld-s390/tlsbinpic.s | 21 ++++++-------
ld/testsuite/ld-s390/tlsbinpic_64.s | 29 +++++++++---------
ld/testsuite/ld-s390/tlslib.s | 2 +-
ld/testsuite/ld-s390/tlslib_64.s | 2 +-
ld/testsuite/ld-s390/tlspic.dd | 14 ++++-----
ld/testsuite/ld-s390/tlspic1.s | 25 ++++++++-------
ld/testsuite/ld-s390/tlspic1_64.s | 27 ++++++++---------
ld/testsuite/ld-s390/tlspic_64.dd | 16 +++++-----
13 files changed, 139 insertions(+), 144 deletions(-)
diff --git a/ld/testsuite/ld-s390/s390.exp b/ld/testsuite/ld-s390/s390.exp
index 014754f94862..74dd20b7d43c 100644
--- a/ld/testsuite/ld-s390/s390.exp
+++ b/ld/testsuite/ld-s390/s390.exp
@@ -41,7 +41,7 @@ set s390tests {
{{readelf -Ssrl tlspic.rd} {objdump -dzrj.text tlspic.dd}
{objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
"libtlspic.so"}
- {"Helper shared library" "-shared -melf_s390" ""
+ {"TLS helper shared library" "-shared -melf_s390" ""
"-m31" {tlslib.s} {} "libtlslib.so"}
{"TLS -fpic and -fno-pic exec transitions"
"-melf_s390 tmpdir/libtlslib.so --hash-style=sysv" ""
@@ -89,7 +89,7 @@ set s390xtests {
{{readelf -WSsrl tlspic_64.rd} {objdump -dzrj.text tlspic_64.dd}
{objdump -sj.got tlspic_64.sd} {objdump -sj.tdata tlspic_64.td}}
"libtlspic_64.so"}
- {"Helper shared library" "-shared -melf64_s390" ""
+ {"TLS helper shared library" "-shared -melf64_s390" ""
"-m64 -Aesame" {tlslib_64.s} {} "libtlslib_64.so"}
{"TLS -fpic and -fno-pic exec transitions"
"-melf64_s390 tmpdir/libtlslib_64.so --hash-style=sysv --no-ld-generated-unwind-info" ""
diff --git a/ld/testsuite/ld-s390/tlsbin.dd b/ld/testsuite/ld-s390/tlsbin.dd
index 2d6a34ef2c47..ce5f59a411f6 100644
--- a/ld/testsuite/ld-s390/tlsbin.dd
+++ b/ld/testsuite/ld-s390/tlsbin.dd
@@ -19,8 +19,8 @@
Disassembly of section .text:
0+[0-9a-f]+ <fn2>:
-# function prolog
- +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+# function prologue
+ +[0-9a-f]+: 90 6f f0 18 stm %r6,%r15,24\(%r15\)
+[0-9a-f]+: a7 d5 00 24 bras %r13,[0-9a-f]+ <fn2\+0x4c>
# _GLOBAL_OFFSET_TABLE_
+[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
@@ -56,13 +56,13 @@ Disassembly of section .text:
+[0-9a-f]+: ff ff ff 80 .long 0xffffff80
# sh1@gotntpoff
+[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
-# function prolog
- +[0-9a-f]+: 18 ef lr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: 18 bf lr %r11,%r15
+[0-9a-f]+: 58 c0 d0 00 l %r12,0\(%r13\)
+[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
+[0-9a-f]+: 41 cc d0 00 la %r12,0\(%r12,%r13\)
- +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
-# Extract TCB and load branch offset
+ +[0-9a-f]+: 50 b0 f0 00 st %r11,0\(%r15\)
+# extract TCB and load branch offset
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+[0-9a-f]+: 58 70 d0 04 l %r7,4\(%r13\)
# GD -> IE because variable is not defined in executable
@@ -104,8 +104,8 @@ Disassembly of section .text:
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
# IE against global var
+[0-9a-f]+: 58 30 d0 34 l %r3,52\(%r13\)
- +[0-9a-f]+: 58 33 c0 00 l %r3,0\(%r3,%r12\)
- +[0-9a-f]+: 58 33 90 00 l %r3,0\(%r3,%r9\)
+ +[0-9a-f]+: 58 43 c0 00 l %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 58 54 90 00 l %r5,0\(%r4,%r9\)
# IE -> LE against global var defined in exec
+[0-9a-f]+: 58 30 d0 38 l %r3,56\(%r13\)
+[0-9a-f]+: 18 43 lr %r4,%r3
@@ -134,8 +134,8 @@ Disassembly of section .text:
# IE against hidden var with small got access (no optimization)
+[0-9a-f]+: 58 30 c0 1c l %r3,28\(%r12\)
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
-# function epilog
- +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+# function epilogue
+ +[0-9a-f]+: 98 6f f0 78 lm %r6,%r15,120\(%r15\)
+[0-9a-f]+: 07 fe br %r14
+[0-9a-f]+: 07 07 nopr %r7
+[0-9a-f]+: 07 07 nopr %r7
@@ -147,8 +147,8 @@ Disassembly of section .text:
+[0-9a-f]+: 07 07 nopr %r7
0+[0-9a-f]+ <_start>:
-# function prolog
- +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+# function prologue
+ +[0-9a-f]+: 90 6f f0 18 stm %r6,%r15,24\(%r15\)
+[0-9a-f]+: a7 d5 00 0c bras %r13,[0-9a-f]+ <_start\+0x1c>
# sG6@indntpoff
+[0-9a-f]+: 00 40 15 64 .long 0x00401564
@@ -158,18 +158,18 @@ Disassembly of section .text:
+[0-9a-f]+: ff ff ff f4 .long 0xfffffff4
# sh6@indntpoff
+[0-9a-f]+: ff ff ff b4 .long 0xffffffb4
-# sg3@indntpoff
+# sg3@ntpoff
+[0-9a-f]+: ff ff ff 68 .long 0xffffff68
-# function prolog
- +[0-9a-f]+: 18 ef lr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: 18 bf lr %r11,%r15
+[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
- +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
-# Extract TCB
+ +[0-9a-f]+: 50 b0 f0 00 st %r11,0\(%r15\)
+# extract TCB
+[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 33 c0 00 l %r3,0\(%r3,%r12\)
- +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+ +[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\)
+[0-9a-f]+: 18 43 lr %r4,%r3
@@ -188,6 +188,6 @@ Disassembly of section .text:
# LE, global var defined in exec
+[0-9a-f]+: 58 40 d0 10 l %r4,16\(%r13\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
-# function epilog
- +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+# function epilogue
+ +[0-9a-f]+: 98 6f f0 78 lm %r6,%r15,120\(%r15\)
+[0-9a-f]+: 07 fe br %r14
diff --git a/ld/testsuite/ld-s390/tlsbin.s b/ld/testsuite/ld-s390/tlsbin.s
index 4da50e79cd87..80498d2d3c2d 100644
--- a/ld/testsuite/ld-s390/tlsbin.s
+++ b/ld/testsuite/ld-s390/tlsbin.s
@@ -20,8 +20,8 @@ bl8: .space 4
.globl _start
.type _start,@function
_start:
- /* Function prolog */
- stm %r6,%r14,24(%r15)
+ /* Function prologue */
+ stm %r6,%r15,24(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -34,40 +34,40 @@ _start:
.LC3:
.long sh6@indntpoff
.LC4:
- .long sg3@indntpoff
+ .long sg3@ntpoff
.LTN1:
- /* Function prolog */
- lr %r14,%r15
+ /* Function prologue (cont.) */
+ lr %r11,%r15
ahi %r15,-96
- st %r14,0(%r14)
+ st %r11,0(%r15)
/* Extract TCB */
ear %r9,%a0
/* IE against global var */
l %r3,.LC0-.LT1(%r13)
- l %r3,0(%r3,%r12):tls_load:sG6
- la %r3,0(%r3,%r9)
+ 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 */
l %r4,.LC4-.LT1(%r13)
la %r5,0(%r4,%r9)
- /* Function epilog */
- lm %r6,%r14,120(%r15)
+ /* Function epilogue */
+ lm %r6,%r15,120(%r15)
br %r14
diff --git a/ld/testsuite/ld-s390/tlsbin_64.dd b/ld/testsuite/ld-s390/tlsbin_64.dd
index 124c268b5646..d6afd3586429 100644
--- a/ld/testsuite/ld-s390/tlsbin_64.dd
+++ b/ld/testsuite/ld-s390/tlsbin_64.dd
@@ -19,8 +19,8 @@
Disassembly of section .text:
0+[0-9a-f]+ <fn2>:
-# function prolog
- +[0-9a-f]+: eb 6e f0 30 00 24 stmg %r6,%r14,48\(%r15\)
+# function prologue
+ +[0-9a-f]+: eb 6f f0 30 00 24 stmg %r6,%r15,48\(%r15\)
+[0-9a-f]+: a7 d5 00 3e bras %r13,[0-9a-f]+ <fn2\+0x82>
# sG1@tlsgd
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
@@ -67,17 +67,17 @@ Disassembly of section .text:
# sh1@gotntpoff
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
+[0-9a-f]+: ff ff ff a0 .long 0xffffffa0
-# function prolog
- +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: b9 04 00 bf lgr %r11,%r15
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
+[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
- +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+ +[0-9a-f]+: e3 b0 f0 00 00 24 stg %r11,0\(%r15\)
# extract TCB
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
- +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: eb 99 00 20 00 0d sllg %r9,%r9,32
+[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
# GD -> IE because variable is not defined in executable
- +[0-9a-f]+: e3 c0 d0 00 00 04 lg %r12,0\(%r13\)
+ +[0-9a-f]+: e3 20 d0 00 00 04 lg %r2,0\(%r13\)
+[0-9a-f]+: e3 22 c0 00 00 04 lg %r2,0\(%r2,%r12\)
+[0-9a-f]+: 41 22 90 00 la %r2,0\(%r2,%r9\)
# GD -> IE because variable is not defined in executable where
@@ -114,8 +114,8 @@ Disassembly of section .text:
+[0-9a-f]+: 41 54 30 00 la %r5,0\(%r4,%r3\)
# IE against global var
+[0-9a-f]+: e3 30 d0 58 00 04 lg %r3,88\(%r13\)
- +[0-9a-f]+: e3 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
- +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+ +[0-9a-f]+: e3 43 c0 00 00 04 lg %r4,0\(%r3,%r12\)
+ +[0-9a-f]+: 41 34 90 00 la %r3,0\(%r4,%r9\)
# IE -> LE against global var defined in exec
+[0-9a-f]+: e3 30 d0 60 00 04 lg %r3,96\(%r13\)
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
@@ -157,8 +157,8 @@ Disassembly of section .text:
# IE against hidden var with small got access (no optimization)
+[0-9a-f]+: e3 30 c0 38 00 04 lg %r3,56\(%r12\)
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
-# function epilog
- +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+# function epilogue
+ +[0-9a-f]+: eb 6f f0 d0 00 04 lmg %r6,%r15,208\(%r15\)
+[0-9a-f]+: 07 fe br %r14
+[0-9a-f]+: 07 07 nopr %r7
+[0-9a-f]+: 07 07 nopr %r7
@@ -172,9 +172,9 @@ Disassembly of section .text:
+[0-9a-f]+: 07 07 nopr %r7
0+[0-9a-f]+ <_start>:
-# function prolog
- +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
- +[0-9a-f]+: a7 d5 00 16 bras %r13,[0-9a-f]+ <_start\+0x30>
+# function prologue
+ +[0-9a-f]+: eb 6f f0 30 00 24 stmg %r6,%r15,48\(%r15\)
+ +[0-9a-f]+: a7 d5 00 16 bras %r13,[0-9a-f]+ <_start\+0x32>
# sG6@indntpoff
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
+[0-9a-f]+: 01 00 18 08 .long 0x01001808
@@ -187,21 +187,21 @@ Disassembly of section .text:
# sh6@indntpoff
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
+[0-9a-f]+: ff ff ff b4 .long 0xffffffb4
-# sg3@indntpoff
+# sg3@ntpoff
+[0-9a-f]+: ff ff ff ff .long 0xffffffff
+[0-9a-f]+: ff ff ff 68 .long 0xffffff68
-# function prolog
- +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: b9 04 00 bf lgr %r11,%r15
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
- +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+ +[0-9a-f]+: e3 b0 f0 00 00 24 stg %r11,0\(%r15\)
# extract TCB
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
- +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: eb 99 00 20 00 0d sllg %r9,%r9,32
+[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 33 c0 00 00 04 lg %r3,0\(%r3,%r12\)
- +[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
+ +[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\)
+[0-9a-f]+: eb 43 00 00 00 0d sllg %r4,%r3,0
@@ -217,7 +217,6 @@ Disassembly of section .text:
# LE, global var defined in exec
+[0-9a-f]+: e3 40 d0 20 00 04 lg %r4,32\(%r13\)
+[0-9a-f]+: 41 54 90 00 la %r5,0\(%r4,%r9\)
-# function epilog
- +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+# function epilogue
+ +[0-9a-f]+: eb 6f f0 d0 00 04 lmg %r6,%r15,208\(%r15\)
+[0-9a-f]+: 07 fe br %r14
- +[0-9a-f]+: 07 07 nopr %r7
diff --git a/ld/testsuite/ld-s390/tlsbin_64.s b/ld/testsuite/ld-s390/tlsbin_64.s
index c40fcfc21029..457f7276aa4f 100644
--- a/ld/testsuite/ld-s390/tlsbin_64.s
+++ b/ld/testsuite/ld-s390/tlsbin_64.s
@@ -20,8 +20,8 @@ bl8: .space 4
.globl _start
.type _start,@function
_start:
- /* Function prolog */
- stm %r6,%r14,24(%r15)
+ /* Function prologue */
+ stmg %r6,%r15,48(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -34,42 +34,42 @@ _start:
.LC3:
.quad sh6@indntpoff
.LC4:
- .quad sg3@indntpoff
+ .quad sg3@ntpoff
.LTN1:
- /* Function prolog */
- lgr %r14,%r15
+ /* Function prologue (cont.) */
+ lgr %r11,%r15
aghi %r15,-160
- stg %r14,0(%r14)
+ stg %r11,0(%r15)
/* Extract TCB */
ear %r9,%a0
- sllg %r9,%r4,32
+ sllg %r9,%r9,32
ear %r9,%a1
/* IE against global var */
lg %r3,.LC0-.LT1(%r13)
- lg %r3,0(%r3,%r12):tls_load:sG6
- la %r3,0(%r3,%r9)
+ 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 */
lg %r4,.LC4-.LT1(%r13)
la %r5,0(%r4,%r9)
- /* Function epilog */
- lmg %r6,%r14,208(%r15)
+ /* Function epilogue */
+ lmg %r6,%r15,208(%r15)
br %r14
diff --git a/ld/testsuite/ld-s390/tlsbinpic.s b/ld/testsuite/ld-s390/tlsbinpic.s
index e52e3a4a064b..4a5bdb71022c 100644
--- a/ld/testsuite/ld-s390/tlsbinpic.s
+++ b/ld/testsuite/ld-s390/tlsbinpic.s
@@ -3,7 +3,6 @@
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
- .hidden sh1, sh2
sg1: .long 17
sg2: .long 18
sg3: .long 19
@@ -33,8 +32,8 @@ sh8: .long 264
.type fn2,@function
.balign 64
fn2:
- /* Function prolog */
- stm %r6,%r14,24(%r15)
+ /* Function prologue */
+ stm %r6,%r15,24(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -73,17 +72,17 @@ fn2:
.LC16:
.long sh1@gotntpoff
.LTN1:
- /* Function prolog */
- lr %r14,%r15
+ /* Function prologue (cont.) */
+ lr %r11,%r15
l %r12,.LC0-.LT1(%r13)
ahi %r15,-96
la %r12,0(%r12,%r13)
- st %r14,0(%r14)
+ st %r11,0(%r15)
/* Extract TCB and load branch offset */
ear %r9,%a0
l %r7,.LC1-.LT1(%r13)
-
+
/* GD -> IE because variable is not defined in executable */
l %r2,.LC2-.LT1(%r13)
bas %r14,0(%r7,%r13):tls_gdcall:sG1
@@ -130,8 +129,8 @@ fn2:
/* IE against global var */
l %r3,.LC13-.LT1(%r13)
- l %r3,0(%r3,%r12):tls_load:sG2
- l %r3,0(%r3,%r9)
+ l %r4,0(%r3,%r12):tls_load:sG2
+ l %r5,0(%r4,%r9)
/* IE -> LE against global var defined in exec */
l %r3,.LC14-.LT1(%r13)
@@ -165,6 +164,6 @@ fn2:
l %r3,sh3@gotntpoff(%r12)
la %r3,0(%r3,%r9)
- /* Function epilog */
- lm %r6,%r14,120(%r15)
+ /* Function epilogue */
+ lm %r6,%r15,120(%r15)
br %r14
diff --git a/ld/testsuite/ld-s390/tlsbinpic_64.s b/ld/testsuite/ld-s390/tlsbinpic_64.s
index eeda6caaa133..945b3e44ef06 100644
--- a/ld/testsuite/ld-s390/tlsbinpic_64.s
+++ b/ld/testsuite/ld-s390/tlsbinpic_64.s
@@ -3,7 +3,6 @@
.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
- .hidden sh1, sh2
sg1: .long 17
sg2: .long 18
sg3: .long 19
@@ -33,8 +32,8 @@ sh8: .long 264
.type fn2,@function
.balign 64
fn2:
- /* Function prolog */
- stmg %r6,%r14,48(%r15)
+ /* Function prologue */
+ stmg %r6,%r15,48(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -69,19 +68,19 @@ fn2:
.LC16:
.quad sh1@gotntpoff
.LTN1:
- /* Function prolog */
- lgr %r14,%r15
+ /* Function prologue (cont.) */
+ lgr %r11,%r15
aghi %r15,-160
larl %r12,_GLOBAL_OFFSET_TABLE_
- stg %r14,0(%r14)
+ stg %r11,0(%r15)
/* Extract TCB */
ear %r9,%a0
- sllg %r9,%r4,32
+ sllg %r9,%r9,32
ear %r9,%a1
/* GD -> IE because variable is not defined in executable */
- lg %r12,.LC2-.LT1(%r13)
+ lg %r2,.LC2-.LT1(%r13)
brasl %r14,__tls_get_offset@plt:tls_gdcall:sG1
la %r2,0(%r2,%r9)
@@ -126,8 +125,8 @@ fn2:
/* IE against global var */
lg %r3,.LC13-.LT1(%r13)
- lg %r3,0(%r3,%r12):tls_load:sG2
- la %r3,0(%r3,%r9)
+ lg %r4,0(%r3,%r12):tls_load:sG2
+ la %r3,0(%r4,%r9)
/* IE -> LE against global var defined in exec */
lg %r3,.LC14-.LT1(%r13)
@@ -136,7 +135,7 @@ fn2:
/* IE -> LE against local var */
lg %r3,.LC15-.LT1(%r13)
- lg %r4,0(%r3,%r12):tls_load:sl2
+ lg %r4,0(%r3,%r12):tls_load:sl1
la %r5,0(%r4,%r9)
/* IE -> LE against hidden var */
@@ -158,7 +157,7 @@ fn2:
larl %r3,sl3@indntpoff
lg %r4,0(%r3,%r12):tls_load:sl3
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
@@ -180,7 +179,7 @@ fn2:
/* IE against hidden var with small got access (no optimization) */
lg %r3,sh3@gotntpoff(%r12)
la %r3,0(%r3,%r9)
-
- /* Function epilog */
- lmg %r6,%r14,208(%r15)
+
+ /* Function epilogue */
+ lmg %r6,%r15,208(%r15)
br %r14
diff --git a/ld/testsuite/ld-s390/tlslib.s b/ld/testsuite/ld-s390/tlslib.s
index 3ec87c22f9d4..301f15f60de2 100644
--- a/ld/testsuite/ld-s390/tlslib.s
+++ b/ld/testsuite/ld-s390/tlslib.s
@@ -1,5 +1,5 @@
.section ".tdata", "awT", @progbits
- .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8,
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
sG1: .long 513
sG2: .long 514
sG3: .long 515
diff --git a/ld/testsuite/ld-s390/tlslib_64.s b/ld/testsuite/ld-s390/tlslib_64.s
index 3ec87c22f9d4..301f15f60de2 100644
--- a/ld/testsuite/ld-s390/tlslib_64.s
+++ b/ld/testsuite/ld-s390/tlslib_64.s
@@ -1,5 +1,5 @@
.section ".tdata", "awT", @progbits
- .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8,
+ .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
sG1: .long 513
sG2: .long 514
sG3: .long 515
diff --git a/ld/testsuite/ld-s390/tlspic.dd b/ld/testsuite/ld-s390/tlspic.dd
index d5caeaf253de..d759875e568c 100644
--- a/ld/testsuite/ld-s390/tlspic.dd
+++ b/ld/testsuite/ld-s390/tlspic.dd
@@ -10,8 +10,8 @@
Disassembly of section .text:
0+[0-9a-f]+ <fn1>:
-# function prolog
- +[0-9a-f]+: 90 6e f0 18 stm %r6,%r14,24\(%r15\)
+# function prologue
+ +[0-9a-f]+: 90 6f f0 18 stm %r6,%r15,24\(%r15\)
+[0-9a-f]+: a7 d5 00 30 bras %r13,[0-9a-f]+ <fn1\+0x64>
# _GLOBAL_OFFSET_TABLE_-.LT1
+[0-9a-f]+: [0-9a-f ]+ .long 0x[0-9a-f]+
@@ -59,12 +59,12 @@ Disassembly of section .text:
+[0-9a-f]+: 00 00 00 54 .long 0x00000054
# sH2@gotntpoff
+[0-9a-f]+: 00 00 00 30 .long 0x00000030
-# function prolog
- +[0-9a-f]+: 18 ef lr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: 18 bf lr %r11,%r15
+[0-9a-f]+: 58 c0 d0 00 l %r12,0\(%r13\)
+[0-9a-f]+: a7 fa ff a0 ahi %r15,-96
+[0-9a-f]+: 41 cc d0 00 la %r12,0\(%r12,%r13\)
- +[0-9a-f]+: 50 e0 e0 00 st %r14,0\(%r14\)
+ +[0-9a-f]+: 50 b0 f0 00 st %r11,0\(%r15\)
# Extract TCB and load branch offset
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
+[0-9a-f]+: 58 70 d0 04 l %r7,4\(%r13\)
@@ -156,8 +156,8 @@ Disassembly of section .text:
# (no optimization)
+[0-9a-f]+: 58 30 c0 44 l %r3,68\(%r12\)
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
-# function prolog
- +[0-9a-f]+: 98 6e f0 78 lm %r6,%r14,120\(%r15\)
+# function epilogue
+ +[0-9a-f]+: 98 6f f0 78 lm %r6,%r15,120\(%r15\)
+[0-9a-f]+: 07 fe br %r14
+[0-9a-f]+: 07 07 nopr %r7
+[0-9a-f]+: 07 07 nopr %r7
diff --git a/ld/testsuite/ld-s390/tlspic1.s b/ld/testsuite/ld-s390/tlspic1.s
index e423985ae00b..34a91285539f 100644
--- a/ld/testsuite/ld-s390/tlspic1.s
+++ b/ld/testsuite/ld-s390/tlspic1.s
@@ -32,8 +32,8 @@ sh8: .long 264
.type fn1,@function
.balign 64
fn1:
- /* Function prolog */
- stm %r6,%r14,24(%r15)
+ /* Function prologue */
+ stm %r6,%r15,24(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -83,13 +83,13 @@ fn1:
.long sh2@gotntpoff
.LC22:
.long sH2@gotntpoff
-.LTN1:
- /* Function prolog */
- lr %r14,%r15
+.LTN1:
+ /* Function prologue (cont.) */
+ lr %r11,%r15
l %r12,.LC0-.LT1(%r13)
ahi %r15,-96
la %r12,0(%r12,%r13)
- st %r14,0(%r14)
+ st %r11,0(%r15)
/* Extract TCB and load branch offset */
ear %r9,%a0
@@ -109,7 +109,7 @@ fn1:
l %r2,.LC4-.LT1(%r13)
bas %r14,0(%r7,%r13):tls_gdcall:sl1
la %r2,0(%r2,%r9)
-
+
/* GD -> IE against local variable referenced through IE too */
l %r2,.LC5-.LT1(%r13)
bas %r14,0(%r7,%r13):tls_gdcall:sl2
@@ -119,7 +119,7 @@ fn1:
l %r2,.LC6-.LT1(%r13)
bas %r14,0(%r7,%r13):tls_gdcall:sh1
la %r2,0(%r2,%r9)
-
+
/* GD -> IE against hidden and local variable referenced through
IE too */
l %r2,.LC7-.LT1(%r13)
@@ -154,7 +154,7 @@ fn1:
la %r5,0(%r4,%r3)
l %r4,.LC13-.LT1(%r13)
la %r5,0(%r5,%r3)
-
+
/* LD against hidden but not local variables */
l %r2,.LC16-.LT1(%r13)
bas %r14,0(%r7,%r13):tls_ldcall:sH1
@@ -178,7 +178,7 @@ fn1:
l %r3,.LC21-.LT1(%r13)
l %r4,0(%r3,%r12):tls_load:sh2
la %r5,0(%r4,%r3)
-
+
/* IE against hidden but not local var */
l %r3,.LC22-.LT1(%r13)
l %r4,0(%r3,%r12):tls_load:sH2
@@ -202,7 +202,6 @@ fn1:
l %r3,sH5@gotntpoff(%r12)
la %r3,0(%r3,%r9)
- /* Function epilog */
- lm %r6,%r14,120(%r15)
+ /* Function epilogue */
+ lm %r6,%r15,120(%r15)
br %r14
-
diff --git a/ld/testsuite/ld-s390/tlspic1_64.s b/ld/testsuite/ld-s390/tlspic1_64.s
index 31abd78f8a74..efc9fae2ba58 100644
--- a/ld/testsuite/ld-s390/tlspic1_64.s
+++ b/ld/testsuite/ld-s390/tlspic1_64.s
@@ -32,8 +32,8 @@ sh8: .long 264
.type fn1,@function
.balign 64
fn1:
- /* Function prolog */
- stmg %r6,%r14,48(%r15)
+ /* Function prologue */
+ stmg %r6,%r15,48(%r15)
bras %r13,.LTN1
/* Literal pool */
.LT1:
@@ -79,16 +79,16 @@ fn1:
.quad sh2@gotntpoff
.LC22:
.quad sH2@gotntpoff
-.LTN1:
- /* Function prolog */
- lgr %r14,%r15
+.LTN1:
+ /* Function prologue (cont.) */
+ lgr %r11,%r15
larl %r12,_GLOBAL_OFFSET_TABLE_
aghi %r15,-160
- stg %r14,0(%r14)
+ stg %r11,0(%r15)
/* Extract TCB */
ear %r9,%a0
- sllg %r9,%r4,32
+ sllg %r9,%r9,32
ear %r9,%a1
/* GD */
@@ -115,7 +115,7 @@ fn1:
lg %r2,.LC6-.LT1(%r13)
brasl %r14,__tls_get_offset@plt:tls_gdcall:sh1
la %r2,0(%r2,%r9)
-
+
/* GD -> IE against hidden and local variable referenced through
IE too */
lg %r2,.LC7-.LT1(%r13)
@@ -150,7 +150,7 @@ fn1:
la %r5,0(%r4,%r3)
lg %r4,.LC15-.LT1(%r13)
la %r5,0(%r4,%r3)
-
+
/* LD against hidden but not local variables */
lg %r2,.LC16-.LT1(%r13)
brasl %r14,__tls_get_offset@plt:tls_ldcall:sH1
@@ -174,7 +174,7 @@ fn1:
lg %r3,.LC21-.LT1(%r13)
lg %r4,0(%r3,%r12):tls_load:sh2
la %r5,0(%r4,%r9)
-
+
/* IE against hidden but not local var */
lg %r3,.LC22-.LT1(%r13)
lg %r4,0(%r3,%r12):tls_load:sH2
@@ -194,7 +194,7 @@ fn1:
larl %r3,sh5@indntpoff
lg %r4,0(%r3,%r12):tls_load:sh2
la %r5,0(%r4,%r9)
-
+
/* IE against hidden but not local var with larl got access */
larl %r3,sH5@indntpoff
lg %r4,0(%r3,%r12):tls_load:sH2
@@ -218,7 +218,6 @@ fn1:
lg %r3,sH5@gotntpoff(%r12)
la %r3,0(%r3,%r9)
- /* Function epilog */
- lmg %r6,%r14,208(%r15)
+ /* Function epilogue */
+ lmg %r6,%r15,208(%r15)
br %r14
-
diff --git a/ld/testsuite/ld-s390/tlspic_64.dd b/ld/testsuite/ld-s390/tlspic_64.dd
index 86fdbbd6fdbf..34d31c2299cf 100644
--- a/ld/testsuite/ld-s390/tlspic_64.dd
+++ b/ld/testsuite/ld-s390/tlspic_64.dd
@@ -10,8 +10,8 @@
Disassembly of section .text:
0+[0-9a-f]+ <fn1>:
-# function prolog
- +[0-9a-f]+: eb 6e f0 30 00 24 stmg %r6,%r14,48\(%r15\)
+# function prologue
+ +[0-9a-f]+: eb 6f f0 30 00 24 stmg %r6,%r15,48\(%r15\)
+[0-9a-f]+: a7 d5 00 56 bras %r13,[0-9a-f]+ <fn1\+0xb2>
# sg1@tlsgd
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
@@ -76,14 +76,14 @@ Disassembly of section .text:
# sH2@gotntpoff
+[0-9a-f]+: 00 00 00 00 .long 0x00000000
+[0-9a-f]+: 00 00 00 60 .long 0x00000060
-# function prolog
- +[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
+# function prologue (cont.)
+ +[0-9a-f]+: b9 04 00 bf lgr %r11,%r15
+[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
- +[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
+ +[0-9a-f]+: e3 b0 f0 00 00 24 stg %r11,0\(%r15\)
# extract TCB
+[0-9a-f]+: b2 4f 00 90 ear %r9,%a0
- +[0-9a-f]+: eb 94 00 20 00 0d sllg %r9,%r4,32
+ +[0-9a-f]+: eb 99 00 20 00 0d sllg %r9,%r9,32
+[0-9a-f]+: b2 4f 00 91 ear %r9,%a1
# GD
+[0-9a-f]+: e3 20 d0 00 00 04 lg %r2,0\(%r13\)
@@ -189,8 +189,8 @@ Disassembly of section .text:
# (no optimization)
+[0-9a-f]+: e3 30 c0 88 00 04 lg %r3,136\(%r12\)
+[0-9a-f]+: 41 33 90 00 la %r3,0\(%r3,%r9\)
-# function epilog
- +[0-9a-f]+: eb 6e f0 d0 00 04 lmg %r6,%r14,208\(%r15\)
+# function epilogue
+ +[0-9a-f]+: eb 6f f0 d0 00 04 lmg %r6,%r15,208\(%r15\)
+[0-9a-f]+: 07 fe br %r14
+[0-9a-f]+: 07 07 nopr %r7
+[0-9a-f]+: 07 07 nopr %r7
--
2.48.1
More information about the Binutils
mailing list