Properly use GET_GOT/RESTORE_GOT when using GLOBAL(). This should fix binaries using PIC on x86-32. Also should fix issue 343. Change-Id: I591de3ad68c8a8bb16054bd8f987a75b4e2bad02
diff --git a/vp8/common/x86/recon_sse2.asm b/vp8/common/x86/recon_sse2.asm index 00b7438..0e23116 100644 --- a/vp8/common/x86/recon_sse2.asm +++ b/vp8/common/x86/recon_sse2.asm
@@ -593,8 +593,11 @@ push rsi push rdi %ifidn %1, ssse3 +%ifndef GET_GOT_SAVE_ARG push rbx %endif + GET_GOT rbx +%endif ; end prolog ; read from left and write out @@ -606,9 +609,9 @@ mov rdi, arg(0) ;dst; movsxd rcx, dword ptr arg(1) ;dst_stride %ifidn %1, ssse3 - lea rbx, [rax*3] lea rdx, [rcx*3] movdqa xmm2, [GLOBAL(dc_00001111)] + lea rbx, [rax*3] %endif dec rsi %ifidn %1, mmx2 @@ -656,8 +659,11 @@ ; begin epilog %ifidn %1, ssse3 + RESTORE_GOT +%ifndef GET_GOT_SAVE_ARG pop rbx %endif +%endif pop rdi pop rsi UNSHADOW_ARGS
diff --git a/vpx_ports/x86_abi_support.asm b/vpx_ports/x86_abi_support.asm index 37a3205..7382a91 100644 --- a/vpx_ports/x86_abi_support.asm +++ b/vpx_ports/x86_abi_support.asm
@@ -147,6 +147,7 @@ %if ABI_IS_32BIT %if CONFIG_PIC=1 %ifidn __OUTPUT_FORMAT__,elf32 + %define GET_GOT_SAVE_ARG 1 %define WRT_PLT wrt ..plt %macro GET_GOT 1 extern _GLOBAL_OFFSET_TABLE_ @@ -165,6 +166,7 @@ %define RESTORE_GOT pop %1 %endmacro %elifidn __OUTPUT_FORMAT__,macho32 + %define GET_GOT_SAVE_ARG 1 %macro GET_GOT 1 push %1 call %%get_got