Bug 1448189 - Realign stack before using SSE2 in Skia. r=lsalzman
--- a/gfx/skia/generate_mozbuild.py
+++ b/gfx/skia/generate_mozbuild.py
@@ -74,16 +74,24 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
SOURCES['skia/src/jumper/SkJumper_generated_win.S'].flags += ['-safeseh']
DEFINES['UNICODE'] = True
DEFINES['_UNICODE'] = True
UNIFIED_SOURCES += [
'skia/src/fonts/SkFontMgr_indirect.cpp',
'skia/src/fonts/SkRemotableFontMgr.cpp',
]
+# Work around a crash when jumping into assembly on platforms where
+# Clang has 4-byte stack alignment (BSDs, Windows).
+if CONFIG['CPU_ARCH'] == 'x86' and CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
+ SOURCES['skia/src/jumper/SkJumper.cpp'].flags += [
+ '-mstack-alignment=16',
+ '-mstackrealign'
+ ]
+
# We should autogenerate these SSE related flags.
if CONFIG['INTEL_ARCHITECTURE'] and (CONFIG['CC_TYPE'] in ('clang', 'clang-cl', 'gcc')):
SOURCES['skia/src/opts/SkBitmapProcState_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
SOURCES['skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp'].flags += ['-mssse3']
SOURCES['skia/src/opts/SkBlitRow_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
SOURCES['skia/src/opts/SkOpts_ssse3.cpp'].flags += ['-mssse3']
SOURCES['skia/src/opts/SkOpts_sse41.cpp'].flags += ['-msse4.1']
--- a/gfx/skia/moz.build
+++ b/gfx/skia/moz.build
@@ -749,16 +749,24 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
SOURCES['skia/src/jumper/SkJumper_generated_win.S'].flags += ['-safeseh']
DEFINES['UNICODE'] = True
DEFINES['_UNICODE'] = True
UNIFIED_SOURCES += [
'skia/src/fonts/SkFontMgr_indirect.cpp',
'skia/src/fonts/SkRemotableFontMgr.cpp',
]
+# Work around a crash when jumping into assembly on platforms where
+# Clang has 4-byte stack alignment (BSDs, Windows).
+if CONFIG['CPU_ARCH'] == 'x86' and CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
+ SOURCES['skia/src/jumper/SkJumper.cpp'].flags += [
+ '-mstack-alignment=16',
+ '-mstackrealign'
+ ]
+
# We should autogenerate these SSE related flags.
if CONFIG['INTEL_ARCHITECTURE'] and (CONFIG['CC_TYPE'] in ('clang', 'clang-cl', 'gcc')):
SOURCES['skia/src/opts/SkBitmapProcState_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
SOURCES['skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp'].flags += ['-mssse3']
SOURCES['skia/src/opts/SkBlitRow_opts_SSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
SOURCES['skia/src/opts/SkOpts_ssse3.cpp'].flags += ['-mssse3']
SOURCES['skia/src/opts/SkOpts_sse41.cpp'].flags += ['-msse4.1']