[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