qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp
Date: Sun, 15 Apr 2012 17:02:15 +0000

On Sun, Apr 15, 2012 at 14:13, Stefan Weil <address@hidden> wrote:
> The default definition of setjmp which is implemented in MinGW-w64
> cannot be used with programs like QEMU which call longjmp from
> code without structured exception handling (SEH).

We're currently compiling QEMU with -no-seh, is that correct for Mingw64?

>
> This code therefore disables stack unwinding.
>
> We could also implement SEH for QEMU's generated JIT code, but
> that is much more difficult. Stack unwinding would also cost
> execution time.
>
> Signed-off-by: Stefan Weil <address@hidden>
> ---
>  qemu-os-win32.h |    9 +++++++++
>  1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/qemu-os-win32.h b/qemu-os-win32.h
> index b6533c0..753679b 100644
> --- a/qemu-os-win32.h
> +++ b/qemu-os-win32.h
> @@ -56,6 +56,15 @@
>  # define EWOULDBLOCK  WSAEWOULDBLOCK
>  #endif
>
> +#if defined(_WIN64)
> +/* On w64, setjmp is implemented by _setjmp which needs a second parameter.
> + * If this parameter is NULL, longjump does no stack unwinding.
> + * That is what we need for QEMU. Passing the value of register rsp (default)
> + * lets longjmp try a stack unwinding which will crash with generated code. 
> */
> +# undef setjmp
> +# define setjmp(env) _setjmp(env, NULL)
> +#endif
> +
>  /* Declaration of ffs() is missing in MinGW's strings.h. */
>  int ffs(int i);
>
> --
> 1.7.0.4
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]