include: Fix setjmp() support with 32-bit ucrtbase.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2020-11-06 12:11:17 +01:00
parent 3bf9092590
commit 3d72d2600f
1 changed files with 16 additions and 4 deletions

View File

@ -143,17 +143,29 @@ typedef _JBTYPE jmp_buf[_JBLEN];
extern "C" {
#endif
int __cdecl _setjmp(jmp_buf);
void __cdecl longjmp(jmp_buf,int);
#if defined(_WIN64) && defined(__GNUC__)
#ifdef _WIN64
# ifdef _UCRT
# define _setjmpex __intrinsic_setjmpex
# endif
# ifdef __GNUC__
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmpex(jmp_buf,void*);
# define setjmp(buf) _setjmpex(buf,__builtin_frame_address(0))
# define setjmpex(buf) _setjmpex(buf,__builtin_frame_address(0))
# endif
#else /* _WIN64 */
# ifdef _UCRT
# define _setjmp __intrinsic_setjmp
# endif
# ifdef __GNUC__
int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp(jmp_buf);
# else
int __cdecl _setjmp(jmp_buf);
# endif
#endif /* _WIN64 */
#ifndef setjmp
#define setjmp _setjmp
#endif