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
					
				
							
								
								
									
										20
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								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).
 | 
				
			||||||
 | 
					        case $target_os in
 | 
				
			||||||
 | 
					        mingw32|win32|*bsd*)
 | 
				
			||||||
            disable aligned_stack
 | 
					            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