configure: Don't assume an aligned stack on clang on windows

If we'd enable a 16 byte aligned stack, clang/llvm would also assume
that alignment everywhere and produce code that strictly requires it.
That would require adding realignment (via attribute_align_arg) on every
single public library function or enable -mstackrealign (which does the
same on every single function).

Also relatedly; the parameter currently tested (-mllvm
-stack-alignment=16) hasn't actually been supported for quite some
time; current clang versions use -mstack-alignment=16 for the same.
Actually testing for that parameter would be a different change
though, since it has a real risk of changing behaviour on any other
platform where clang is used.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2018-03-13 00:13:55 +02:00
parent 43778a501f
commit 847190ebd9
1 changed files with 10 additions and 1 deletions

9
configure vendored
View File

@ -4960,7 +4960,16 @@ elif enabled gcc; then
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
# 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
else
check_cflags -mllvm -stack-alignment=16 check_cflags -mllvm -stack-alignment=16
fi
check_cflags -Qunused-arguments check_cflags -Qunused-arguments
check_cflags -Werror=implicit-function-declaration check_cflags -Werror=implicit-function-declaration
check_cflags -Werror=missing-prototypes check_cflags -Werror=missing-prototypes