[PATCH 04/15] s390: Linker TLS test fixes and cleanups
Jens Remus
jremus@linux.ibm.com
Fri Nov 7 16:34:47 GMT 2025
More information about the Binutils mailing list
Fri Nov 7 16:34:47 GMT 2025
- Previous message (by thread): [PATCH 03/15] s390: Do not emit orphaned GOT entry for TLS IE to LE transition
- Next message (by thread): [PATCH 04/15] s390: Linker TLS test fixes and cleanups
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message (by thread): [PATCH 03/15] s390: Do not emit orphaned GOT entry for TLS IE to LE transition
- Next message (by thread): [PATCH 04/15] s390: Linker TLS test fixes and cleanups
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list