summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2018-03-15 23:47:22 +0200
committerMartin Storsjö <martin@martin.st>2018-03-17 22:27:42 +0200
commitea2f72a2c14c67a3b35dac6426d1e3c0fae33fd5 (patch)
treeee1789f9f55b3f08d73993e98f441f20a818f088 /configure
parentdeefca02c275ce4bc5ccbee690463ffef81a18b8 (diff)
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>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure22
1 files changed, 20 insertions, 2 deletions
diff --git a/configure b/configure
index 95e6006440..78a2065208 100755
--- a/configure
+++ b/configure
@@ -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