configure: Require SEH support for PE builds.
This commit is contained in:
parent
d37f0892be
commit
4a138da761
4 changed files with 67 additions and 14 deletions
49
configure
vendored
49
configure
vendored
|
@ -10819,6 +10819,55 @@ printf "%s\n" "$res" >&6; }
|
||||||
as_fn_append ${wine_arch}_CC " $res" ;;
|
as_fn_append ${wine_arch}_CC " $res" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test "x$wine_arch" = xi386
|
||||||
|
then :
|
||||||
|
|
||||||
|
else $as_nop
|
||||||
|
as_wine_cv_seh_support=`printf "%s\n" "ac_cv_${wine_arch}_seh_support" | $as_tr_sh`
|
||||||
|
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports SEH directives" >&5
|
||||||
|
printf %s "checking whether $CC supports SEH directives... " >&6; }
|
||||||
|
if eval test \${$as_wine_cv_seh_support+y}
|
||||||
|
then :
|
||||||
|
printf %s "(cached) " >&6
|
||||||
|
else $as_nop
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
asm(".text\nac_test:\t.seh_proc ac_test\n\tnop\n\t.seh_stackalloc 16\n\t.seh_endprologue\n\t.seh_endproc");
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"
|
||||||
|
then :
|
||||||
|
eval "$as_wine_cv_seh_support=yes"
|
||||||
|
else $as_nop
|
||||||
|
eval "$as_wine_cv_seh_support=no"
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
eval ac_res=\$$as_wine_cv_seh_support
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||||
|
printf "%s\n" "$ac_res" >&6; }
|
||||||
|
eval res=\$$as_wine_cv_seh_support
|
||||||
|
|
||||||
|
if test "x$res" = xyes
|
||||||
|
then :
|
||||||
|
|
||||||
|
else $as_nop
|
||||||
|
if test ${enable_archs+y}
|
||||||
|
then :
|
||||||
|
as_fn_error $? "The $wine_arch cross-compiler doesn't support SEH directives.
|
||||||
|
This is an error since --enable-archs=$wine_arch was requested." "$LINENO" 5
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
as_fn_append PE_ARCHS " $wine_arch"
|
as_fn_append PE_ARCHS " $wine_arch"
|
||||||
{ as_ac_var=`printf "%s\n" "ac_cv_${wine_arch}_cflags_-fno-strict-aliasing" | $as_tr_sh`
|
{ as_ac_var=`printf "%s\n" "ac_cv_${wine_arch}_cflags_-fno-strict-aliasing" | $as_tr_sh`
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-strict-aliasing" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-strict-aliasing" >&5
|
||||||
|
|
13
configure.ac
13
configure.ac
|
@ -954,6 +954,19 @@ This is an error since --enable-archs=$wine_arch was requested.])])
|
||||||
AS_VAR_APPEND([${wine_arch}_CC],[" $res"]) ;;
|
AS_VAR_APPEND([${wine_arch}_CC],[" $res"]) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
AS_VAR_IF([wine_arch],[i386],[],
|
||||||
|
[AS_VAR_PUSHDEF([wine_cv_seh_support],[ac_cv_${wine_arch}_seh_support])
|
||||||
|
AC_CACHE_CHECK([whether $CC supports SEH directives], wine_cv_seh_support,
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[asm(".text\nac_test:\t.seh_proc ac_test\n\tnop\n\t.seh_stackalloc 16\n\t.seh_endprologue\n\t.seh_endproc");]])],
|
||||||
|
[AS_VAR_SET([wine_cv_seh_support],[yes])],[AS_VAR_SET([wine_cv_seh_support],[no])]))
|
||||||
|
AS_VAR_COPY([res],[wine_cv_seh_support])
|
||||||
|
AS_VAR_POPDEF([wine_cv_seh_support])
|
||||||
|
AS_VAR_IF([res],[yes],[],
|
||||||
|
[AS_VAR_SET_IF([enable_archs],
|
||||||
|
[AC_MSG_ERROR([The $wine_arch cross-compiler doesn't support SEH directives.
|
||||||
|
This is an error since --enable-archs=$wine_arch was requested.])])
|
||||||
|
continue])])
|
||||||
|
|
||||||
AS_VAR_APPEND([PE_ARCHS],[" $wine_arch"])
|
AS_VAR_APPEND([PE_ARCHS],[" $wine_arch"])
|
||||||
WINE_TRY_PE_CFLAGS([-fno-strict-aliasing])
|
WINE_TRY_PE_CFLAGS([-fno-strict-aliasing])
|
||||||
dnl clang needs to be told to fail on unknown options
|
dnl clang needs to be told to fail on unknown options
|
||||||
|
|
|
@ -369,7 +369,7 @@ DWORD __cdecl nested_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTR
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* exception_handler_call_wrapper
|
* exception_handler_call_wrapper
|
||||||
*/
|
*/
|
||||||
#ifdef __ASM_SEH_SUPPORTED
|
#ifdef __WINE_PE_BUILD
|
||||||
DWORD WINAPI exception_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
DWORD WINAPI exception_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
||||||
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
||||||
|
|
||||||
|
@ -1077,7 +1077,7 @@ DWORD __cdecl unwind_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTR
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* unwind_handler_call_wrapper
|
* unwind_handler_call_wrapper
|
||||||
*/
|
*/
|
||||||
#ifdef __ASM_SEH_SUPPORTED
|
#ifdef __WINE_PE_BUILD
|
||||||
DWORD WINAPI unwind_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
DWORD WINAPI unwind_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
||||||
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
||||||
|
|
||||||
|
@ -1666,7 +1666,7 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* RtlUserThreadStart (NTDLL.@)
|
* RtlUserThreadStart (NTDLL.@)
|
||||||
*/
|
*/
|
||||||
#ifdef __ASM_SEH_SUPPORTED
|
#ifdef __WINE_PE_BUILD
|
||||||
__ASM_GLOBAL_FUNC( RtlUserThreadStart,
|
__ASM_GLOBAL_FUNC( RtlUserThreadStart,
|
||||||
"subq $0x28,%rsp\n\t"
|
"subq $0x28,%rsp\n\t"
|
||||||
".seh_stackalloc 0x28\n\t"
|
".seh_stackalloc 0x28\n\t"
|
||||||
|
|
|
@ -45,17 +45,8 @@
|
||||||
# define __ASM_EHABI(str)
|
# define __ASM_EHABI(str)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__SEH__) || (defined(_MSC_VER) && defined(__clang__) && (defined(__x86_64__) || defined(__aarch64__)))
|
#if defined(__WINE_PE_BUILD) && !defined(__i386__)
|
||||||
# if defined(__aarch64__) && defined(__clang_major__) && (__clang_major__ < 12 || defined(__apple_build_version__))
|
# define __ASM_SEH(str) str
|
||||||
/* Clang got support for aarch64 SEH assembly directives in Clang 12,
|
|
||||||
* before that, only .seh_startproc/.seh_endproc but nothing else was
|
|
||||||
* supported. Support for it doesn't exist in any Apple branded version
|
|
||||||
* of Clang yet. */
|
|
||||||
# define __ASM_SEH(str)
|
|
||||||
# else
|
|
||||||
# define __ASM_SEH(str) str
|
|
||||||
# define __ASM_SEH_SUPPORTED
|
|
||||||
# endif
|
|
||||||
#else
|
#else
|
||||||
# define __ASM_SEH(str)
|
# define __ASM_SEH(str)
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue