[gnumeric] win32: patch pixman.



commit 13436a4c9f45d4a6573d1004e7cbd609d215cba2
Author: Morten Welinder <terra gnome org>
Date:   Sat Oct 19 13:22:11 2013 -0400

    win32: patch pixman.

 tools/win32/moduleset.in               |    4 ++-
 tools/win32/patches/pixman-crash.patch |   45 ++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletions(-)
---
diff --git a/tools/win32/moduleset.in b/tools/win32/moduleset.in
index cdbf70c..de2298a 100644
--- a/tools/win32/moduleset.in
+++ b/tools/win32/moduleset.in
@@ -141,7 +141,9 @@
     <autotools id="pixman">
        <branch repo="cairographics"
                module="pixman-0.30.0.tar.gz"
-               version="0.30.0"/>
+               version="0.30.0">
+         <patch file="&patch_dir;pixman-crash.patch" strip="1"/>
+       </branch>
     </autotools>
     <autotools id="cairo">
        <branch repo="cairographics"
diff --git a/tools/win32/patches/pixman-crash.patch b/tools/win32/patches/pixman-crash.patch
new file mode 100644
index 0000000..159d538
--- /dev/null
+++ b/tools/win32/patches/pixman-crash.patch
@@ -0,0 +1,45 @@
+commit 4978392c6d6d6e69bef3bb66ea53f41a58e8eafc
+Author: Søren Sandmann Pedersen <ssp redhat com>
+Date:   Fri Oct 11 00:49:44 2013 -0400
+
+    pixman-glyph.c: Add __force_align_arg_pointer to composite functions
+    
+    The functions pixman_composite_glyphs_no_mask() and
+    pixman_composite_glyphs() can call into code compiled with -msse2,
+    which requires the stack to be aligned to 16 bytes. Since the ABIs on
+    Windows and Linux for x86-32 don't provide this guarantee, we need to
+    use this attribute to make GCC generate a prologue that realigns the
+    stack.
+    
+    This fixes the crash introduced in the previous commit and also
+    
+       https://bugs.freedesktop.org/show_bug.cgi?id=70348
+    
+    and
+    
+       https://bugs.freedesktop.org/show_bug.cgi?id=68300
+
+diff --git a/pixman/pixman-glyph.c b/pixman/pixman-glyph.c
+index 5a271b6..96a349a 100644
+--- a/pixman/pixman-glyph.c
++++ b/pixman/pixman-glyph.c
+@@ -391,6 +391,9 @@ box32_intersect (pixman_box32_t *dest,
+     return dest->x2 > dest->x1 && dest->y2 > dest->y1;
+ }
+ 
++#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
++__attribute__((__force_align_arg_pointer__))
++#endif
+ PIXMAN_EXPORT void
+ pixman_composite_glyphs_no_mask (pixman_op_t            op,
+                                pixman_image_t        *src,
+@@ -630,6 +633,9 @@ out:
+  *   - Trim the mask to the destination clip/image?
+  *   - Trim composite region based on sources, when the op ignores 0s.
+  */
++#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
++__attribute__((__force_align_arg_pointer__))
++#endif
+ PIXMAN_EXPORT void
+ pixman_composite_glyphs (pixman_op_t            op,
+                        pixman_image_t        *src,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]