diff options
author | Timothy Arceri <[email protected]> | 2014-12-07 00:09:40 +1100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2014-12-11 13:54:53 +0000 |
commit | e340a28dba8be3184b7fad5e27b4e4c45dacb42f (patch) | |
tree | ff6b310c2c0dc4aece0b2193ccc57b522af1065e | |
parent | 6b908efd58f8f12b9ab1518bc1738fb9072ded8e (diff) |
mesa: use build flag to ensure stack is realigned on x86
Nowadays GCC assumes stack pointer is 16-byte aligned even on 32-bits, but that is an assumption OpenGL drivers (or any dynamic library for that matter) can't afford to make as there are many closed- and open- source application binaries out there that only assume 4-byte stack alignment.
V4: fix comment and indentation
V3: move all sse4.1 build flag config to the same location
and add comment as to why we need to do the realign
V2: use $target_cpu rather than $host_cpu
and setup build flags in config rather than makefile
https://bugs.freedesktop.org/show_bug.cgi?id=86788
Signed-off-by: Timothy Arceri <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
CC: "10.4" <[email protected]>
(cherry picked from commit f1b5f2b157a092e93590bd43544fbf2671edab36)
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | src/mesa/Makefile.am | 2 |
2 files changed, 11 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index f99ea3d27f8..506be34a64f 100644 --- a/configure.ac +++ b/configure.ac @@ -252,8 +252,16 @@ AC_SUBST([VISIBILITY_CXXFLAGS]) dnl dnl Optional flags, check for compiler support dnl +SSE41_CFLAGS="-msse4.1" +dnl Code compiled by GCC with -msse* assumes a 16 byte aligned +dnl stack, but on x86-32 such alignment is not guaranteed. +case "$target_cpu" in +i?86) + SSE41_CFLAGS="$SSE41_CFLAGS -mstackrealign" + ;; +esac save_CFLAGS="$CFLAGS" -CFLAGS="-msse4.1 $CFLAGS" +CFLAGS="$SSE41_CFLAGS $CFLAGS" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include <smmintrin.h> int main () { @@ -266,6 +274,7 @@ if test "x$SSE41_SUPPORTED" = x1; then DEFINES="$DEFINES -DUSE_SSE41" fi AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1]) +AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS) dnl Can't have static and shared libraries, default to static if user dnl explicitly requested. If both disabled, set to static since shared diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am index 932db4fb87c..3b685737950 100644 --- a/src/mesa/Makefile.am +++ b/src/mesa/Makefile.am @@ -153,7 +153,7 @@ libmesagallium_la_LIBADD = \ libmesa_sse41_la_SOURCES = \ main/streaming-load-memcpy.c \ main/sse_minmax.c -libmesa_sse41_la_CFLAGS = $(AM_CFLAGS) -msse4.1 +libmesa_sse41_la_CFLAGS = $(AM_CFLAGS) $(SSE41_CFLAGS) pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gl.pc |