From 9aff2faa394190f1ac752d4ffb633bb2536506e0 Mon Sep 17 00:00:00 2001 From: Alex Chronopoulos Date: Mon, 25 Mar 2019 22:51:31 +0000 Subject: [PATCH] Bug 1537725 - Use the default stack alignment in windows x86 for libdav1d. r=TD-Linux Differential Revision: https://phabricator.services.mozilla.com/D24785 --HG-- extra : moz-landing-system : lando --- media/libdav1d/asm/moz.build | 13 ++++++---- media/libdav1d/asm/x86_32/win/config.asm | 2 +- media/libdav1d/moz.build | 30 +++++++++++++++--------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/media/libdav1d/asm/moz.build b/media/libdav1d/asm/moz.build index b12240139789..ca89221c98cf 100644 --- a/media/libdav1d/asm/moz.build +++ b/media/libdav1d/asm/moz.build @@ -25,16 +25,17 @@ CFLAGS += [ '-I%s/dist/include/dav1d/' % TOPOBJDIR, ] -# Default stack aligment is 16 bytes. -stack_alignment = 16 - +stack_alignment = 0 # Attaching config.asm file if CONFIG['CPU_ARCH'] == 'x86': + # Default stack alignment can be 4 bytes. if CONFIG['OS_TARGET'] == 'WINNT': + stack_alignment = 4 ASFLAGS += ['-I%s/media/libdav1d/asm/x86_32/win/' % TOPSRCDIR] else: ASFLAGS += ['-I%s/media/libdav1d/asm/x86_32/' % TOPSRCDIR] - # Default stack aligment can be 4 bytes, change it to 16 bytes. + stack_alignment = 16 + # Change stack alignment to 16 bytes. if CONFIG['CC_TYPE'] == 'clang': CFLAGS += ['-mstack-alignment=16'] elif CONFIG['CC_TYPE'] == 'gcc': @@ -42,6 +43,8 @@ if CONFIG['CPU_ARCH'] == 'x86': if CONFIG['CPU_ARCH'] == 'x86_64': + # Default stack aligment is 16 bytes. + stack_alignment = 16 if CONFIG['OS_TARGET'] == 'Darwin': ASFLAGS += ['-I%s/media/libdav1d/asm/x86_64/osx/' % TOPSRCDIR] elif CONFIG['OS_TARGET'] == 'WINNT': @@ -62,6 +65,8 @@ if CONFIG['CPU_ARCH'] == 'x86_64': CFLAGS += ['-mpreferred-stack-boundary=5'] # Set the macro here instead of config.h +if stack_alignment == 0: + error('Stack alignment cannot be zero.') DEFINES['STACK_ALIGNMENT'] = stack_alignment if CONFIG['CPU_ARCH'] in ('x86', 'x86_64'): diff --git a/media/libdav1d/asm/x86_32/win/config.asm b/media/libdav1d/asm/x86_32/win/config.asm index e5f09a91a86d..f701a081aa86 100644 --- a/media/libdav1d/asm/x86_32/win/config.asm +++ b/media/libdav1d/asm/x86_32/win/config.asm @@ -9,5 +9,5 @@ %define PREFIX 1 -%define STACK_ALIGNMENT 16 +%define STACK_ALIGNMENT 4 diff --git a/media/libdav1d/moz.build b/media/libdav1d/moz.build index 788c1a5ab971..9a3b686d3b60 100644 --- a/media/libdav1d/moz.build +++ b/media/libdav1d/moz.build @@ -32,20 +32,26 @@ DEFINES['DAV1D_API'] = '' if CONFIG['MOZ_DAV1D_ASM']: DIRS += ['asm'] + # Store the stack alignment that will be used. + stack_alignment = 0 + # Default stack alignment can be 4 bytes on x86. if CONFIG['CPU_ARCH'] == 'x86': - # Update stack alignment to 16 bytes. - if CONFIG['CC_TYPE'] == 'clang': - CFLAGS += ['-mstack-alignment=16'] - for ep in entrypoint_source_files: - SOURCES[ep].flags += ['-mstackrealign'] - elif CONFIG['CC_TYPE'] == 'gcc': - CFLAGS += ['-mpreferred-stack-boundary=4'] - for ep in entrypoint_source_files: - SOURCES[ep].flags += ['-mincoming-stack-boundary=2'] + if CONFIG['OS_TARGET'] == 'WINNT': + # Allow the default to avoid crashes + stack_alignment = 4 + else: + # Update stack alignment to 16 bytes. + stack_alignment = 16 + if CONFIG['CC_TYPE'] == 'clang': + CFLAGS += ['-mstack-alignment=16'] + for ep in entrypoint_source_files: + SOURCES[ep].flags += ['-mstackrealign'] + elif CONFIG['CC_TYPE'] == 'gcc': + CFLAGS += ['-mpreferred-stack-boundary=4'] + for ep in entrypoint_source_files: + SOURCES[ep].flags += ['-mincoming-stack-boundary=2'] - # Expect stack alignment of 16 bytes. - stack_alignment = 16 # The default stack alignment in x86_64 is 16 bytes. On all Linux flavors the # default is used due to crashes with 32 bytes stack alignment. @@ -62,6 +68,8 @@ if CONFIG['MOZ_DAV1D_ASM']: SOURCES[ep].flags += ['-mincoming-stack-boundary=4'] # Set the macro here instead of config.h + if stack_alignment == 0: + error('Stack alignment cannot be zero.') DEFINES['STACK_ALIGNMENT'] = stack_alignment if CONFIG['OS_TARGET'] == 'Linux':