[Mesa-dev] [PATCH] mesa: use build flag to ensure stack is realigned on x86
Timothy Arceri
t_arceri at yahoo.com.au
Sat Dec 6 20:52:10 PST 2014
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.
https://bugs.freedesktop.org/show_bug.cgi?id=86788
---
The bug reporter has tested that this fixes the problem. But I haven't
tested the cross compile stuff. e.g. building 64-bit from 32-bit
not sure if anyone would acctaully be building that way.
Please note if this patch is ok it should also be applied to 10.4 with
the last hunk removed.
configure.ac | 17 +++++++++++++++++
src/mesa/Makefile.am | 4 ++++
src/mesa/main/sse_minmax.c | 3 ---
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index b0df1bb..6bb43f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -474,6 +474,21 @@ fi
dnl
dnl Arch/platform-specific settings
dnl
+align_check_arch=""
+if test "x$cross_compiling" = xno; then
+ case "$host_cpu" in
+ x86_64|amd64)
+ align_check_arch=x86_64
+ ;;
+ esac
+else
+ case "$host_cpu" in
+ i?86)
+ align_check_arch=x86_64
+ ;;
+ esac
+fi
+
AC_ARG_ENABLE([asm],
[AS_HELP_STRING([--disable-asm],
[disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
@@ -2087,6 +2102,8 @@ AM_CONDITIONAL(HAVE_X11_DRIVER, test "x$enable_xlib_glx" = xyes)
AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
+AM_CONDITIONAL(HAVE_16BYTE_ALIGN, test "x$align_check_arch" = xx86_64)
+
AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am
index 932db4f..36d4223 100644
--- a/src/mesa/Makefile.am
+++ b/src/mesa/Makefile.am
@@ -153,7 +153,11 @@ libmesagallium_la_LIBADD = \
libmesa_sse41_la_SOURCES = \
main/streaming-load-memcpy.c \
main/sse_minmax.c
+if HAVE_16BYTE_ALIGN
libmesa_sse41_la_CFLAGS = $(AM_CFLAGS) -msse4.1
+else
+libmesa_sse41_la_CFLAGS = $(AM_CFLAGS) -msse4.1 -mstackrealign
+endif
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gl.pc
diff --git a/src/mesa/main/sse_minmax.c b/src/mesa/main/sse_minmax.c
index 93cf2a6..222ac14 100644
--- a/src/mesa/main/sse_minmax.c
+++ b/src/mesa/main/sse_minmax.c
@@ -31,9 +31,6 @@
#include <stdint.h>
void
-#if !defined(__x86_64__)
- __attribute__((force_align_arg_pointer))
-#endif
_mesa_uint_array_min_max(const unsigned *ui_indices, unsigned *min_index,
unsigned *max_index, const unsigned count)
{
--
1.9.3
More information about the mesa-dev
mailing list