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