Hi Michael, Michael Käppler <xmichae...@web.de> skribis:
> From f9222ec96209c59c9a9a409c019ff59c0c20917c Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Michael=20K=C3=A4ppler?= <xmichae...@web.de> > Date: Sat, 7 Sep 2024 22:52:22 +0200 > Subject: [PATCH] Fix setjmp/longjmp-related crashes on Windows > > * libguile/Makefile.am: add new header file setjump-win.h > * libguile/continuations.h, libguile/dynstack.c, libguile/dynstack.h, > libguile/intrinsics.h, libguile/vm.h: > supply custom `setjmp` macro on Windows > > Mingw implements `setjmp (env)` as a macro that expands to > > _setjmp (env, faddr) > > where `faddr` is set to the current frame address. > > This address is then stored as first element in the jump buffer `env`. > When `longjmp` is called, it tries to unwind the stack up > to the saved address by calling `RtlUnwindEx` from MSVCRT, > which will fail, if the stack frames are interwoven with > JIT-generated code, that violate the Windows x64 calling conventions. > > Thus implement the macro ourselves as > > _setjmp (env, NULL) > > which will toggle a code path in `longjmp` that does no unwinding. Applied, thanks! Ludo’.