diff -aurp -x '*.o' qt-everywhere-opensource-src-4.7.4-orig/src/declarative/qml/qdeclarativevmemetaobject.cpp qt-everywhere-opensource-src-4.7.4/src/declarative/qml/qdeclarativevmemetaobject.cpp --- qt-everywhere-opensource-src-4.7.4-orig/src/declarative/qml/qdeclarativevmemetaobject.cpp 2011-08-23 20:02:27.000000000 +0800 +++ qt-everywhere-opensource-src-4.7.4/src/declarative/qml/qdeclarativevmemetaobject.cpp 2011-09-09 21:04:43.729681034 +0800 @@ -89,7 +89,7 @@ public: inline void setValue(const QScriptValue &); private: int type; - void *data[4]; // Large enough to hold all types + void *data[4] __attribute__((aligned(8))); // Large enough to hold all types inline void cleanup(); }; diff -aurp -x '*.o' qt-everywhere-opensource-src-4.7.4-orig/src/gui/painting/qgrayraster.c qt-everywhere-opensource-src-4.7.4/src/gui/painting/qgrayraster.c --- qt-everywhere-opensource-src-4.7.4-orig/src/gui/painting/qgrayraster.c 2011-08-23 20:02:27.000000000 +0800 +++ qt-everywhere-opensource-src-4.7.4/src/gui/painting/qgrayraster.c 2011-09-09 21:01:05.073089927 +0800 @@ -309,7 +309,7 @@ int conic_level; int cubic_level; - qt_ft_jmp_buf jump_buffer; + qt_ft_jmp_buf jump_buffer __attribute__((aligned(8))); void* buffer; long buffer_size; diff -aurp -x '*.o' qt-everywhere-opensource-src-4.7.4-orig/src/gui/painting/qpaintengine_raster.cpp qt-everywhere-opensource-src-4.7.4/src/gui/painting/qpaintengine_raster.cpp --- qt-everywhere-opensource-src-4.7.4-orig/src/gui/painting/qpaintengine_raster.cpp 2011-08-23 20:02:27.000000000 +0800 +++ qt-everywhere-opensource-src-4.7.4/src/gui/painting/qpaintengine_raster.cpp 2011-09-09 21:02:40.261241336 +0800 @@ -4217,7 +4217,12 @@ void QRasterPaintEnginePrivate::rasteriz // 16-byte alignment, hence we hardcode this requirement here.. (unsigned char *) _aligned_malloc(rasterPoolSize, sizeof(void*) * 2); #else - unsigned char rasterPoolOnStack[rasterPoolInitialSize]; + // setjmp & longjmp in qgrayraster.c requires 8-byte alignement for float + // point operation, so set the size of rasterPoolOnStack a little bigger + // than rasterPoolInitialSize to make rasterPoolBase 8-byte alignment + unsigned char rasterPoolOnStackUnalign[rasterPoolInitialSize+sizeof(double)]; + unsigned char *rasterPoolOnStack; + rasterPoolOnStack = (unsigned char *)(((unsigned long)rasterPoolOnStackUnalign + sizeof(double) - 1) & ~(sizeof(double)-1)); rasterPoolBase = rasterPoolOnStack; #endif Q_CHECK_PTR(rasterPoolBase); diff -aurp -x '*.o' qt-everywhere-opensource-src-4.7.4-orig/src/script/bridge/qscriptdeclarativeclass_p.h qt-everywhere-opensource-src-4.7.4/src/script/bridge/qscriptdeclarativeclass_p.h --- qt-everywhere-opensource-src-4.7.4-orig/src/script/bridge/qscriptdeclarativeclass_p.h 2011-08-23 20:02:27.000000000 +0800 +++ qt-everywhere-opensource-src-4.7.4/src/script/bridge/qscriptdeclarativeclass_p.h 2011-09-09 21:03:12.053591160 +0800 @@ -72,7 +72,7 @@ public: QScriptValue toScriptValue(QScriptEngine *) const; private: - char dummy[8]; + char dummy[8] __attribute__((aligned(8))); }; typedef void* Identifier;