Commit ea2f72a2 authored by Martin Storsjö's avatar Martin Storsjö

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: 's avatarMartin Storsjö <martin@martin.st>
parent deefca02
......@@ -4957,16 +4957,34 @@ elif enabled gcc; then
check_cflags -Werror=format-security
check_cflags -fdiagnostics-color=auto
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
check_cflags -mllvm -stack-alignment=16
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
# same alignment in every function. If 16 byte alignment would be
# enabled, one would also have to either add attribute_align_arg on
# every single entry point into the libraries or enable -mstackrealign
# (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
check_cflags -mllvm -stack-alignment=16
fi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment