From 322ea7ff5bce741e0657179f63ee1c1bb54da864 Mon Sep 17 00:00:00 2001 From: Yunqing Wang Date: Thu, 10 Dec 2015 14:25:01 -0800 Subject: [PATCH] Fix the win32 crash when GET_GOT is not defined This patch continues to fix the win32 crash issue: https://bugs.chromium.org/p/webm/issues/detail?id=1105 Johann's patch is here: https://chromium-review.googlesource.com/#/c/316446/2 Change-Id: I7fe191c717e40df8602e229371321efb0d689375 --- third_party/x86inc/x86inc.asm | 4 ++++ vpx_dsp/x86/highbd_subpel_variance_impl_sse2.asm | 12 ++++++++---- vpx_dsp/x86/subpel_variance_sse2.asm | 12 ++++++++---- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/third_party/x86inc/x86inc.asm b/third_party/x86inc/x86inc.asm index be59de311..e4cda88ef 100644 --- a/third_party/x86inc/x86inc.asm +++ b/third_party/x86inc/x86inc.asm @@ -119,6 +119,7 @@ %if ABI_IS_32BIT %if CONFIG_PIC=1 %ifidn __OUTPUT_FORMAT__,elf32 + %define GET_GOT_DEFINED 1 %define GET_GOT_SAVE_ARG 1 %define WRT_PLT wrt ..plt %macro GET_GOT 1 @@ -138,6 +139,7 @@ %define RESTORE_GOT pop %1 %endmacro %elifidn __OUTPUT_FORMAT__,macho32 + %define GET_GOT_DEFINED 1 %define GET_GOT_SAVE_ARG 1 %macro GET_GOT 1 push %1 @@ -149,6 +151,8 @@ %undef RESTORE_GOT %define RESTORE_GOT pop %1 %endmacro + %else + %define GET_GOT_DEFINED 0 %endif %endif diff --git a/vpx_dsp/x86/highbd_subpel_variance_impl_sse2.asm b/vpx_dsp/x86/highbd_subpel_variance_impl_sse2.asm index 5f9c963d4..22d52a2af 100644 --- a/vpx_dsp/x86/highbd_subpel_variance_impl_sse2.asm +++ b/vpx_dsp/x86/highbd_subpel_variance_impl_sse2.asm @@ -123,7 +123,10 @@ SECTION .text %define sec_str sec_stridemp ; Store bilin_filter and pw_8 location in stack - GET_GOT eax + %if GET_GOT_DEFINED == 1 + GET_GOT eax + add esp, 4 ; restore esp + %endif lea ecx, [GLOBAL(bilin_filter_m)] mov g_bilin_filterm, ecx @@ -131,7 +134,6 @@ SECTION .text lea ecx, [GLOBAL(pw_8)] mov g_pw_8m, ecx - RESTORE_GOT ; restore esp LOAD_IF_USED 0, 1 ; load eax, ecx back %else cglobal highbd_sub_pixel_variance%1xh, 7, 7, 13, src, src_stride, \ @@ -140,7 +142,10 @@ SECTION .text %define block_height heightd ; Store bilin_filter and pw_8 location in stack - GET_GOT eax + %if GET_GOT_DEFINED == 1 + GET_GOT eax + add esp, 4 ; restore esp + %endif lea ecx, [GLOBAL(bilin_filter_m)] mov g_bilin_filterm, ecx @@ -148,7 +153,6 @@ SECTION .text lea ecx, [GLOBAL(pw_8)] mov g_pw_8m, ecx - RESTORE_GOT ; restore esp LOAD_IF_USED 0, 1 ; load eax, ecx back %endif %else diff --git a/vpx_dsp/x86/subpel_variance_sse2.asm b/vpx_dsp/x86/subpel_variance_sse2.asm index 1176a2f4c..c655e4b34 100644 --- a/vpx_dsp/x86/subpel_variance_sse2.asm +++ b/vpx_dsp/x86/subpel_variance_sse2.asm @@ -139,7 +139,10 @@ SECTION .text %define sec_str sec_stridemp ;Store bilin_filter and pw_8 location in stack - GET_GOT eax + %if GET_GOT_DEFINED == 1 + GET_GOT eax + add esp, 4 ; restore esp + %endif lea ecx, [GLOBAL(bilin_filter_m)] mov g_bilin_filterm, ecx @@ -147,7 +150,6 @@ SECTION .text lea ecx, [GLOBAL(pw_8)] mov g_pw_8m, ecx - RESTORE_GOT ; restore esp LOAD_IF_USED 0, 1 ; load eax, ecx back %else cglobal sub_pixel_variance%1xh, 7, 7, 13, src, src_stride, x_offset, \ @@ -156,7 +158,10 @@ SECTION .text %define block_height heightd ;Store bilin_filter and pw_8 location in stack - GET_GOT eax + %if GET_GOT_DEFINED == 1 + GET_GOT eax + add esp, 4 ; restore esp + %endif lea ecx, [GLOBAL(bilin_filter_m)] mov g_bilin_filterm, ecx @@ -164,7 +169,6 @@ SECTION .text lea ecx, [GLOBAL(pw_8)] mov g_pw_8m, ecx - RESTORE_GOT ; restore esp LOAD_IF_USED 0, 1 ; load eax, ecx back %endif %else