Bug 1448189 - Realign stack before using SSE2 in Skia. r=lsalzman draft
authorJan Beich <jbeich@FreeBSD.org>
Fri, 23 Mar 2018 06:40:27 +0000
changeset 771983 02910ab736ff9762a84e5d0518612ea91f4f56ec
parent 771980 945baa8bc9603cd870bf0f9806b437506765fe15
push id103815
push userbmo:jbeich@FreeBSD.org
push dateSat, 24 Mar 2018 10:40:50 +0000
reviewerslsalzman
bugs1448189
milestone61.0a1
Bug 1448189 - Realign stack before using SSE2 in Skia. r=lsalzman
gfx/skia/generate_mozbuild.py
gfx/skia/moz.build
--- 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']