about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
diff options
context:
space:
mode:
authorStefan Liebler <stli@linux.ibm.com>2024-02-22 15:03:27 +0100
committerStefan Liebler <stli@linux.ibm.com>2024-02-27 11:08:08 +0100
commite0910f1d3278f05439fb434ee528fc9be1b6bd5e (patch)
tree5f35f75e69506b5867bc3900e0e190561ce197bb /sysdeps/unix/sysv/linux/s390/s390-64/clone.S
parentd0724994de40934c552f1f68de89053848a44927 (diff)
downloadglibc-e0910f1d3278f05439fb434ee528fc9be1b6bd5e.tar.gz
glibc-e0910f1d3278f05439fb434ee528fc9be1b6bd5e.tar.xz
glibc-e0910f1d3278f05439fb434ee528fc9be1b6bd5e.zip
S390: Do not clobber r7 in clone [BZ #31402]
Starting with commit e57d8fc97b90127de4ed3e3a9cdf663667580935
"S390: Always use svc 0"
clone clobbers the call-saved register r7 in error case:
function or stack is NULL.

This patch restores the saved registers also in the error case.
Furthermore the existing test misc/tst-clone is extended to check
all error cases and that clone does not clobber registers in this
error case.

(cherry picked from commit 02782fd12849b6673cb5c2728cb750e8ec295aa3)
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-64/clone.S')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/clone.S1
1 files changed, 1 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
index 4eb104be71..c552a6b8de 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
@@ -54,6 +54,7 @@ ENTRY(__clone)
 	br	%r14
 error:
 	lghi	%r2,-EINVAL
+	lmg	%r6,%r7,48(%r15)	/* Restore registers.  */
 	jg	SYSCALL_ERROR_LABEL
 PSEUDO_END (__clone)