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" ;;
|
||||
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_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
|
||||
|
|
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"]) ;;
|
||||
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"])
|
||||
WINE_TRY_PE_CFLAGS([-fno-strict-aliasing])
|
||||
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
|
||||
*/
|
||||
#ifdef __ASM_SEH_SUPPORTED
|
||||
#ifdef __WINE_PE_BUILD
|
||||
DWORD WINAPI exception_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
||||
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
||||
|
||||
|
@ -1077,7 +1077,7 @@ DWORD __cdecl unwind_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTR
|
|||
/***********************************************************************
|
||||
* unwind_handler_call_wrapper
|
||||
*/
|
||||
#ifdef __ASM_SEH_SUPPORTED
|
||||
#ifdef __WINE_PE_BUILD
|
||||
DWORD WINAPI unwind_handler_call_wrapper( EXCEPTION_RECORD *rec, void *frame,
|
||||
CONTEXT *context, DISPATCHER_CONTEXT *dispatch );
|
||||
|
||||
|
@ -1666,7 +1666,7 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
|
|||
/***********************************************************************
|
||||
* RtlUserThreadStart (NTDLL.@)
|
||||
*/
|
||||
#ifdef __ASM_SEH_SUPPORTED
|
||||
#ifdef __WINE_PE_BUILD
|
||||
__ASM_GLOBAL_FUNC( RtlUserThreadStart,
|
||||
"subq $0x28,%rsp\n\t"
|
||||
".seh_stackalloc 0x28\n\t"
|
||||
|
|
|
@ -45,17 +45,8 @@
|
|||
# define __ASM_EHABI(str)
|
||||
#endif
|
||||
|
||||
#if defined(__SEH__) || (defined(_MSC_VER) && defined(__clang__) && (defined(__x86_64__) || defined(__aarch64__)))
|
||||
# if defined(__aarch64__) && defined(__clang_major__) && (__clang_major__ < 12 || defined(__apple_build_version__))
|
||||
/* 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
|
||||
#if defined(__WINE_PE_BUILD) && !defined(__i386__)
|
||||
# define __ASM_SEH(str) str
|
||||
#else
|
||||
# define __ASM_SEH(str)
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue