configure: Don't assume a 16 byte aligned stack on BSDs on i386
With GCC, request it to maintain 16 byte alignment, and the existing entry points already align it via attribute_align_arg. With clang, do the same as for mingw; disable the aligned stack and let the assembly functions that require it do the alignment instead. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
deefca02c2
commit
ea2f72a2c1
22
configure
vendored
22
configure
vendored
@ -4957,16 +4957,34 @@ elif enabled gcc; then
|
|||||||
check_cflags -Werror=format-security
|
check_cflags -Werror=format-security
|
||||||
check_cflags -fdiagnostics-color=auto
|
check_cflags -fdiagnostics-color=auto
|
||||||
enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
|
enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
|
||||||
|
if enabled x86_32; then
|
||||||
|
case $target_os in
|
||||||
|
*bsd*)
|
||||||
|
# BSDs don't guarantee a 16 byte aligned stack, but we can
|
||||||
|
# request GCC to try to maintain 16 byte alignment throughout
|
||||||
|
# function calls. Library entry points that might call assembly
|
||||||
|
# functions align the stack. (The parameter means 2^4 bytes.)
|
||||||
|
check_cflags -mpreferred-stack-boundary=4
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
elif enabled llvm_gcc; then
|
elif enabled llvm_gcc; then
|
||||||
check_cflags -mllvm -stack-alignment=16
|
check_cflags -mllvm -stack-alignment=16
|
||||||
elif enabled clang; then
|
elif enabled clang; then
|
||||||
if [ "$target_os" = "mingw32" -o "$target_os" = "win32" ] && enabled x86_32; then
|
if enabled x86_32; then
|
||||||
# Clang doesn't support maintaining alignment without assuming the
|
# Clang doesn't support maintaining alignment without assuming the
|
||||||
# same alignment in every function. If 16 byte alignment would be
|
# same alignment in every function. If 16 byte alignment would be
|
||||||
# enabled, one would also have to either add attribute_align_arg on
|
# enabled, one would also have to either add attribute_align_arg on
|
||||||
# every single entry point into the libraries or enable -mstackrealign
|
# every single entry point into the libraries or enable -mstackrealign
|
||||||
# (doing stack realignment in every single function).
|
# (doing stack realignment in every single function).
|
||||||
disable aligned_stack
|
case $target_os in
|
||||||
|
mingw32|win32|*bsd*)
|
||||||
|
disable aligned_stack
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
check_cflags -mllvm -stack-alignment=16
|
||||||
|
;;
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
check_cflags -mllvm -stack-alignment=16
|
check_cflags -mllvm -stack-alignment=16
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user