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’.



  • bug#73167: [PAT... Bug reports for GUILE, GNU's Ubiquitous Extension Language
    • bug#73167:... Ludovic Courtès

Reply via email to