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