public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] Avoid padding in _init and _fini. [BZ #31042]
@ 2023-11-30 12:32 Stefan Liebler
  0 siblings, 0 replies; only message in thread
From: Stefan Liebler @ 2023-11-30 12:32 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=807849965bbdeaa9b0a8f675d098efc520eeaaa8

commit 807849965bbdeaa9b0a8f675d098efc520eeaaa8
Author: Stefan Liebler <stli@linux.ibm.com>
Date:   Tue Nov 21 13:33:03 2023 +0100

    Avoid padding in _init and _fini. [BZ #31042]
    
    The linker just concatenates the .init and .fini sections which
    results in the complete _init and _fini functions. If needed the
    linker adds padding bytes due to an alignment. GNU ld is adding
    NOPs, which is fine.  But e.g. mold is adding traps which results
    in broken _init and _fini functions.
    
    Thus this patch removes the alignment in .init and .fini sections
    in crtn.S files.
    
    We keep the 4 byte function alignment in crti.S files. As the
    assembler now also outputs the start of _init and _fini functions
    as multiples of 4 byte, it perhaps has to fill it. Although GNU as
    is using NOPs here, to be sure, we just keep the alignment with
    0x07 (=NOPs) at the end of crti.S.
    
    In order to avoid an obvious NOP slide in _fini, this patch also
    uses an lg instead of lgr instruction. Then the emitted instructions
    needs a multiple of 4 bytes.

Diff:
---
 sysdeps/s390/s390-64/crti.S | 2 +-
 sysdeps/s390/s390-64/crtn.S | 2 --
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S
index 11ab75e8d9..4c8246da26 100644
--- a/sysdeps/s390/s390-64/crti.S
+++ b/sysdeps/s390/s390-64/crti.S
@@ -85,7 +85,7 @@ _init:
 	.type	_fini,@function
 _fini:
 	stmg	%r6,%r15,48(%r15)
-	lgr	%r1,%r15
+	lg	%r1,120(%r15)
 	aghi	%r15,-160
 	stg	%r1,0(%r15)
 	larl	%r12,_GLOBAL_OFFSET_TABLE_
diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/s390-64/crtn.S
index 0eabcb346c..6bb1bc9dcf 100644
--- a/sysdeps/s390/s390-64/crtn.S
+++ b/sysdeps/s390/s390-64/crtn.S
@@ -37,13 +37,11 @@
    corresponding to the prologues in crti.S. */
 
 	.section .init
-	.align	4
 	lg	%r4,272(%r15)
 	lmg	%r6,%r15,208(%r15)
 	br	%r4
 
 	.section .fini
-	.align	4
 	lg	%r4,272(%r15)
 	lmg	%r6,%r15,208(%r15)
 	br	%r4

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-11-30 12:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-30 12:32 [glibc] Avoid padding in _init and _fini. [BZ #31042] Stefan Liebler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).