GNU bug report logs -
#73167
[PATCH] Fix setjmp/longjmp-related crashes on Windows
Previous Next
Reported by: Michael Käppler <xmichael-k <at> web.de>
Date: Tue, 10 Sep 2024 12:47:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #10 received at 73167-done <at> debbugs.gnu.org (full text, mbox):
Hi Michael,
Michael Käppler <xmichael-k <at> web.de> skribis:
> From f9222ec96209c59c9a9a409c019ff59c0c20917c Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Michael=20K=C3=A4ppler?= <xmichael-k <at> 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’.
This bug report was last modified 210 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.