[Top][All Lists]
[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
>
- [Qemu-devel] [PATCH 12/20] w64: Fix data types in softmmu*.h, (continued)
- [Qemu-devel] [PATCH 12/20] w64: Fix data types in softmmu*.h, Stefan Weil, 2012/04/15
- [Qemu-devel] [PATCH 20/20] block: Avoid compiler warning for w64, Stefan Weil, 2012/04/15
- [Qemu-devel] [PATCH 18/20] nbd: Fix compiler warning (w64), Stefan Weil, 2012/04/15
- [Qemu-devel] [PATCH 15/20] target-ppc: Fix type casts for w64 (uintptr_t), Stefan Weil, 2012/04/15
- [Qemu-devel] [PATCH 17/20] disas: Replace 'unsigned long' by 'uintptr_t', Stefan Weil, 2012/04/15
- [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Stefan Weil, 2012/04/15
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp,
Blue Swirl <=
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Stefan Weil, 2012/04/15
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Blue Swirl, 2012/04/15
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Stefan Weil, 2012/04/15
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Blue Swirl, 2012/04/15
- Re: [Qemu-devel] [PATCH 07/20] w64: Fix definition of setjmp, Stefan Weil, 2012/04/15
[Qemu-devel] [PATCH 10/20] softmmu: Use uintptr_t for physaddr, Stefan Weil, 2012/04/15
[Qemu-devel] [PATCH 04/20] w64: Fix data types in cpu-all.h, exec.c, Stefan Weil, 2012/04/15