summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2018-03-13 00:13:55 +0200
committerMartin Storsjö <martin@martin.st>2018-03-13 15:25:12 +0200
commit847190ebd99ffd57dc89bd568a33bf2d5c424129 (patch)
tree5d91c54b541db9f9946a5b30b7956089bb722d2c /configure
parent43778a501f1bfbceeddc8eaeea2ea2b3506beeda (diff)
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>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure11
1 files changed, 10 insertions, 1 deletions
diff --git a/configure b/configure
index 42465edf94..95e6006440 100755
--- a/configure
+++ b/configure
@@ -4960,7 +4960,16 @@ elif enabled gcc; then
elif enabled llvm_gcc; then
check_cflags -mllvm -stack-alignment=16
elif enabled clang; then
- check_cflags -mllvm -stack-alignment=16
+ 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
+ fi
check_cflags -Qunused-arguments
check_cflags -Werror=implicit-function-declaration
check_cflags -Werror=missing-prototypes