x86_abi_support.asm revision 90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd
190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Copyright (c) 2010 The VP8 project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Use of this source code is governed by a BSD-style license and patent 590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; grant that can be found in the LICENSE file in the root of the source 690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; tree. All contributing project authors may be found in the AUTHORS 790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; file in the root of the source tree. 890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%include "vpx_config.asm" 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 32/64 bit compatibility macros 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; In general, we make the source use 64 bit syntax, then twiddle with it using 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; the preprocessor to get the 32 bit syntax on 32 bit platforms. 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifidn __OUTPUT_FORMAT__,elf32 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define ABI_IS_32BIT 1 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%elifidn __OUTPUT_FORMAT__,macho32 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define ABI_IS_32BIT 1 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%elifidn __OUTPUT_FORMAT__,win32 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define ABI_IS_32BIT 1 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define ABI_IS_32BIT 0 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%if ABI_IS_32BIT 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rax eax 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rbx ebx 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rcx ecx 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rdx edx 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rsi esi 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rdi edi 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rsp esp 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define rbp ebp 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define movsxd mov 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; sym() 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Return the proper symbol name for the target ABI. 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Certain ABIs, notably MS COFF and Darwin MACH-O, require that symbols 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; with C linkage be prefixed with an underscore. 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifidn __OUTPUT_FORMAT__,elf32 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define sym(x) x 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%elifidn __OUTPUT_FORMAT__,elf64 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define sym(x) x 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%elifidn __OUTPUT_FORMAT__,x64 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define sym(x) x 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define sym(x) _ %+ x 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; arg() 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Return the address specification of the given argument 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%if ABI_IS_32BIT 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define arg(x) [ebp+8+4*x] 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ; 64 bit ABI passes arguments in registers. This is a workaround to get up 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ; and running quickly. Relies on SHADOW_ARGS_TO_STACK 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %ifidn __OUTPUT_FORMAT__,x64 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define arg(x) [rbp+16+8*x] 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %else 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define arg(x) [rbp-8-8*x] 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; REG_SZ_BYTES, REG_SZ_BITS 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Size of a register 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%if ABI_IS_32BIT 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define REG_SZ_BYTES 4 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define REG_SZ_BITS 32 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define REG_SZ_BYTES 8 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define REG_SZ_BITS 64 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; ALIGN_STACK <alignment> <register> 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; This macro aligns the stack to the given alignment (in bytes). The stack 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; is left such that the previous value of the stack pointer is the first 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; argument on the stack (ie, the inverse of this macro is 'pop rsp.') 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; This macro uses one temporary register, which is not preserved, and thus 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; must be specified as an argument. 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%macro ALIGN_STACK 2 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov %2, rsp 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber and rsp, -%1 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber sub rsp, %1 - REG_SZ_BYTES 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push %2 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endmacro 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; The Microsoft assembler tries to impose a certain amount of type safety in 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; its register usage. YASM doesn't recognize these directives, so we just 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; %define them away to maintain as much compatibility as possible with the 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; original inline assembler we're porting from. 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%idefine PTR 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%idefine XMMWORD 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%idefine MMWORD 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; PIC macros 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%if ABI_IS_32BIT 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if CONFIG_PIC=1 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %ifidn __OUTPUT_FORMAT__,elf32 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define WRT_PLT wrt ..plt 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro GET_GOT 1 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber extern _GLOBAL_OFFSET_TABLE_ 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push %1 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber call %%get_got 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %%get_got: 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pop %1 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add %1, _GLOBAL_OFFSET_TABLE_ + $$ - %%get_got wrt ..gotpc 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %undef GLOBAL 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define GLOBAL + %1 wrt ..gotoff 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %undef RESTORE_GOT 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define RESTORE_GOT pop %1 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endmacro 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %elifidn __OUTPUT_FORMAT__,macho32 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro GET_GOT 1 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push %1 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber call %%get_got 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %%get_got: 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pop %1 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add %1, fake_got - %%get_got 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %undef GLOBAL 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define GLOBAL + %1 - fake_got 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %undef RESTORE_GOT 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define RESTORE_GOT pop %1 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endmacro 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro GET_GOT 1 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endmacro 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define GLOBAL wrt rip 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %ifidn __OUTPUT_FORMAT__,elf64 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define WRT_PLT wrt ..plt 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifnmacro GET_GOT 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro GET_GOT 1 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endmacro 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define GLOBAL 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifndef RESTORE_GOT 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define RESTORE_GOT 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifndef WRT_PLT 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define WRT_PLT 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%if ABI_IS_32BIT 16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro SHADOW_ARGS_TO_STACK 1 16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endm 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define UNSHADOW_ARGS 16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifidn __OUTPUT_FORMAT__,x64 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro SHADOW_ARGS_TO_STACK 1 ; argc 16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 0 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov arg(0),rcx 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 1 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov arg(1),rdx 17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 2 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov arg(2),r8 17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 3 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov arg(3),r9 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endm 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %macro SHADOW_ARGS_TO_STACK 1 ; argc 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 0 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rdi 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 1 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rsi 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 2 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rdx 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 3 19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rcx 19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 4 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push r8 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 5 19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push r9 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 6 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov rax,[rbp+16] 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rax 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 7 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov rax,[rbp+24] 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rax 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %if %1 > 8 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov rax,[rbp+32] 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber push rax 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endif 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %endm 21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber %define UNSHADOW_ARGS mov rsp, rbp 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; Name of the rodata section 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; .rodata seems to be an elf-ism, as it doesn't work on OSX. 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%ifidn __OUTPUT_FORMAT__,macho64 22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define SECTION_RODATA section .text 22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%elifidn __OUTPUT_FORMAT__,macho32 22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%macro SECTION_RODATA 0 22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersection .text 22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfake_got: 22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endmacro 22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%else 23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%define SECTION_RODATA section .rodata 23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber%endif 232