[PATCH] newlib: increase jump buffer length to 24 to fit all non-volatile registers for aarch64-pc-cygwin

Radek Barton <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <DB9PR83MB0923C1EC285457C32476E0849245A@DB9PR83MB0923.EURPRD83.prod.outlook.com>
Hello.

The `msvcrt` implementation of `setjmp`/`longjmp` saves `x19`-`x28`, `FP`, `LR`, `SP`, `FPCR`, `FPSR`, `d8`-`d15` registers and jump address to the jump buffer.

AFAIK the Cygwin implementation of `setjmp`/`longjmp` should do the same for which the value of `_JBLEN` macro defined here needs to be increased to 24 to fit them all.

Radek

---
From edaea9fa87bebd3a1692a2333e67218f068658bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Barto=C5=88?= <[email protected]>
Date: Thu, 29 May 2025 20:34:56 +0200
Subject: [PATCH] newlib: increase jump buffer length to 24 to fit all
 non-volatile registers for aarch64-pc-cygwin
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Radek Bartoň <[email protected]>
---
 newlib/libc/include/machine/setjmp.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/newlib/libc/include/machine/setjmp.h b/newlib/libc/include/machine/setjmp.h
index 102582c8e..d73e5589e 100644
--- a/newlib/libc/include/machine/setjmp.h
+++ b/newlib/libc/include/machine/setjmp.h
@@ -22,7 +22,15 @@ _BEGIN_STD_C
 #endif
 
 #if defined(__aarch64__)
-#define _JBLEN 22
+# if defined(__CYGWIN__)
+/* 
+ * Windows Arm64 ABI requires saving x19-x28, FP, LR, SP, FPCR, FPSR, d8-d15
+ * and jump address to jmp_buf.
+ */
+#  define _JBLEN 24
+# else
+#  define _JBLEN 22
+# endif
 #define _JBTYPE long long
 #endif
 
-- 
2.49.0.vfs.0.4
0001-newlib-increase-jump-buffer-length-to-24-to-fit-all-non-volatile-registers-for-aarch64-pc-cygwin.patch (application/octet-stream, 1.1 KB)
From edaea9fa87bebd3a1692a2333e67218f068658bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Barto=C5=88?= <[email protected]>
Date: Thu, 29 May 2025 20:34:56 +0200
Subject: [PATCH] newlib: increase jump buffer length to 24 to fit all
 non-volatile registers for aarch64-pc-cygwin
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Radek Bartoň <[email protected]>
---
 newlib/libc/include/machine/setjmp.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/newlib/libc/include/machine/setjmp.h b/newlib/libc/include/machine/setjmp.h
index 102582c8e..d73e5589e 100644
--- a/newlib/libc/include/machine/setjmp.h
+++ b/newlib/libc/include/machine/setjmp.h
@@ -22,7 +22,15 @@ _BEGIN_STD_C
 #endif
 
 #if defined(__aarch64__)
-#define _JBLEN 22
+# if defined(__CYGWIN__)
+/* 
+ * Windows Arm64 ABI requires saving x19-x28, FP, LR, SP, FPCR, FPSR, d8-d15
+ * and jump address to jmp_buf.
+ */
+#  define _JBLEN 24
+# else
+#  define _JBLEN 22
+# endif
 #define _JBTYPE long long
 #endif
 
-- 
2.49.0.vfs.0.4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.