[klibc] [klibc:master] {set, long}jmp [s390x]: save/restore the correct registers
klibc-bot for mirabilos
tg at debian.org
Sun Dec 26 13:06:12 PST 2021
Commit-ID: 12db27ba0db4fabe1230d1d9b8be56453991e6a9
Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=12db27ba0db4fabe1230d1d9b8be56453991e6a9
Author: mirabilos <tg at debian.org>
AuthorDate: Wed, 5 May 2021 21:26:33 +0200
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Sun, 26 Dec 2021 18:56:52 +0100
{set,long}jmp [s390x]: save/restore the correct registers
The s390x ABI actually has FPU registers f8‥f15, not f1/f3/f5/f7,
to be saved. (Closes: Debian #943425)
Signed-off-by: mirabilos <tg at debian.org>
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
---
usr/include/arch/s390/klibc/archsetjmp.h | 2 +-
usr/klibc/arch/s390/setjmp.S | 24 ++++++++++++++++--------
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/usr/include/arch/s390/klibc/archsetjmp.h b/usr/include/arch/s390/klibc/archsetjmp.h
index 728780ad..1167c8b6 100644
--- a/usr/include/arch/s390/klibc/archsetjmp.h
+++ b/usr/include/arch/s390/klibc/archsetjmp.h
@@ -16,7 +16,7 @@ struct __jmp_buf {
struct __jmp_buf {
uint64_t __gregs[10]; /* general registers r6-r15 */
- uint64_t __fpregs[4]; /* fp registers f1, f3, f5, f7 */
+ uint64_t __fpregs[8]; /* fp registers f8-f15 */
};
#endif /* __s390x__ */
diff --git a/usr/klibc/arch/s390/setjmp.S b/usr/klibc/arch/s390/setjmp.S
index c36a0517..1386419a 100644
--- a/usr/klibc/arch/s390/setjmp.S
+++ b/usr/klibc/arch/s390/setjmp.S
@@ -38,10 +38,14 @@ longjmp:
setjmp:
stmg %r6,%r15,0(%r2) # save all general registers
- std %f1,80(%r2) # save fp registers f4 and f6
- std %f3,88(%r2)
- std %f5,96(%r2)
- std %f7,104(%r2)
+ std %f8,80(%r2) # save fp registers f8 to f15
+ std %f9,88(%r2)
+ std %f10,96(%r2)
+ std %f11,104(%r2)
+ std %f12,112(%r2)
+ std %f13,120(%r2)
+ std %f14,128(%r2)
+ std %f15,136(%r2)
lghi %r2,0 # return 0
br %r14
@@ -54,10 +58,14 @@ setjmp:
longjmp:
lgr %r1,%r2 # jmp_buf
lgr %r2,%r3 # return value
- ld %f7,104(%r1) # restore all saved registers
- ld %f5,96(%r1)
- ld %f3,88(%r1)
- ld %f1,80(%r1)
+ ld %f15,136(%r1) # restore all saved registers
+ ld %f14,128(%r1)
+ ld %f13,120(%r1)
+ ld %f12,112(%r1)
+ ld %f11,104(%r1)
+ ld %f10,96(%r1)
+ ld %f9,88(%r1)
+ ld %f8,80(%r1)
lmg %r6,%r15,0(%r1)
br %r14 # return to restored address
More information about the klibc
mailing list