Copy PIC handling code from x86_abi_support
Change-Id: Ifcd9493802f0c957d7a3b16ce641b989e166792f
This commit is contained in:
parent
e0ab364701
commit
e15b535791
1
third_party/x86inc/README.libvpx
vendored
1
third_party/x86inc/README.libvpx
vendored
@ -16,3 +16,4 @@ Expand PIC default to macho64 and respect CONFIG_PIC from libvpx
|
||||
Catch all elf formats for 'hidden' status and SECTION notes.
|
||||
Avoid 'amdnop' when building with nasm.
|
||||
Set 'private_extern' visibility for macho targets.
|
||||
Copy PIC 'GLOBAL' macros from x86_abi_support.asm
|
||||
|
92
third_party/x86inc/x86inc.asm.new
vendored
92
third_party/x86inc/x86inc.asm.new
vendored
@ -86,21 +86,91 @@
|
||||
SECTION .text align=%1
|
||||
%endmacro
|
||||
|
||||
%if WIN64
|
||||
%define PIC
|
||||
%elifidn __OUTPUT_FORMAT__,macho64
|
||||
%define PIC
|
||||
%elif ARCH_X86_64 == 0
|
||||
; x86_32 doesn't require PIC.
|
||||
; Some distros prefer shared objects to be PIC, but nothing breaks if
|
||||
; the code contains a few textrels, so we'll skip that complexity.
|
||||
%undef PIC
|
||||
%elif CONFIG_PIC
|
||||
%define PIC
|
||||
; PIC macros are copied from vpx_ports/x86_abi_support.asm. The "define PIC"
|
||||
; from original code is added in for 64bit.
|
||||
%ifidn __OUTPUT_FORMAT__,elf32
|
||||
%define ABI_IS_32BIT 1
|
||||
%elifidn __OUTPUT_FORMAT__,macho32
|
||||
%define ABI_IS_32BIT 1
|
||||
%elifidn __OUTPUT_FORMAT__,win32
|
||||
%define ABI_IS_32BIT 1
|
||||
%elifidn __OUTPUT_FORMAT__,aout
|
||||
%define ABI_IS_32BIT 1
|
||||
%else
|
||||
%define ABI_IS_32BIT 0
|
||||
%endif
|
||||
|
||||
%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_
|
||||
push %1
|
||||
call %%get_got
|
||||
%%sub_offset:
|
||||
jmp %%exitGG
|
||||
%%get_got:
|
||||
mov %1, [esp]
|
||||
add %1, _GLOBAL_OFFSET_TABLE_ + $$ - %%sub_offset wrt ..gotpc
|
||||
ret
|
||||
%%exitGG:
|
||||
%undef GLOBAL
|
||||
%define GLOBAL(x) x + %1 wrt ..gotoff
|
||||
%undef RESTORE_GOT
|
||||
%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
|
||||
%%get_got:
|
||||
pop %1
|
||||
%undef GLOBAL
|
||||
%define GLOBAL(x) x + %1 - %%get_got
|
||||
%undef RESTORE_GOT
|
||||
%define RESTORE_GOT pop %1
|
||||
%endmacro
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if ARCH_X86_64 == 0
|
||||
%undef PIC
|
||||
%endif
|
||||
|
||||
%else
|
||||
%macro GET_GOT 1
|
||||
%endmacro
|
||||
%define GLOBAL(x) rel x
|
||||
%define WRT_PLT wrt ..plt
|
||||
|
||||
%if WIN64
|
||||
%define PIC
|
||||
%elifidn __OUTPUT_FORMAT__,macho64
|
||||
%define PIC
|
||||
%elif CONFIG_PIC
|
||||
%define PIC
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifnmacro GET_GOT
|
||||
%macro GET_GOT 1
|
||||
%endmacro
|
||||
%define GLOBAL(x) x
|
||||
%endif
|
||||
%ifndef RESTORE_GOT
|
||||
%define RESTORE_GOT
|
||||
%endif
|
||||
%ifndef WRT_PLT
|
||||
%define WRT_PLT
|
||||
%endif
|
||||
|
||||
%ifdef PIC
|
||||
default rel
|
||||
%endif
|
||||
; Done with PIC macros
|
||||
|
||||
; Macros to eliminate most code duplication between x86_32 and x86_64:
|
||||
; Currently this works only for leaf functions which load all their arguments
|
||||
|
Loading…
Reference in New Issue
Block a user