From c8a23ad3f44fdd70fbe759d3d6e27f1e03fb37b9 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Thu, 30 Jun 2011 14:04:27 -0700 Subject: [PATCH] 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 --- vp8/common/x86/recon_sse2.asm | 8 +++++++- vpx_ports/x86_abi_support.asm | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/vp8/common/x86/recon_sse2.asm b/vp8/common/x86/recon_sse2.asm index 00b74387c..0e23116ce 100644 --- a/vp8/common/x86/recon_sse2.asm +++ b/vp8/common/x86/recon_sse2.asm @@ -593,7 +593,10 @@ sym(vp8_intra_pred_uv_ho_%1): push rsi push rdi %ifidn %1, ssse3 +%ifndef GET_GOT_SAVE_ARG push rbx +%endif + GET_GOT rbx %endif ; end prolog @@ -606,9 +609,9 @@ sym(vp8_intra_pred_uv_ho_%1): 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,7 +659,10 @@ vp8_intra_pred_uv_ho_%1_loop: ; begin epilog %ifidn %1, ssse3 + RESTORE_GOT +%ifndef GET_GOT_SAVE_ARG pop rbx +%endif %endif pop rdi pop rsi diff --git a/vpx_ports/x86_abi_support.asm b/vpx_ports/x86_abi_support.asm index 37a3205b2..7382a9134 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 -- 2.40.0