mirror of https://github.com/acidanthera/audk.git
785 lines
16 KiB
ArmAsm
785 lines
16 KiB
ArmAsm
#------------------------------------------------------------------------------
|
|
#
|
|
# This template was generated from GasketEfiTemplate.c Unix x86_64 ABI
|
|
#
|
|
# The EFI_UNIX_THUNK_PROTOCOL member functions call these these generic assembly
|
|
# routines.
|
|
#
|
|
# Some OS X POSIX calls get name mangled in C code and we need to fill in a C global
|
|
# to get the correct binding (does not work from assembly). So we have 4 functions
|
|
# that do an indirect call, while the others call POSIX APIs directly
|
|
#
|
|
# movq _gUnixRmDir@GOTPCREL(%rip), %rax
|
|
#
|
|
#
|
|
# UNIX Arg passing: RCX, RDX, R8, R9
|
|
# EFI Arg passing: RDI, RSI, RDX, RCX, R8, R9
|
|
# Callee allocates 32 bytes on stack to spill registers
|
|
# RSI, RDI calle-save on EFI, scatch on UNIX callign
|
|
#
|
|
#
|
|
# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
# This program and the accompanying materials
|
|
# are licensed and made available under the terms and conditions of the BSD License
|
|
# which accompanies this distribution. The full text of the license may be found at
|
|
# http://opensource.org/licenses/bsd-license.php
|
|
#
|
|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
//
|
|
// Gaskets are EFI ABI to UNIX ABI calls
|
|
// EFI ABI code will sub 40 (0x28) from %rsp before calling a function
|
|
// This is the 32 (0x20) byte to spill registers and 8 bytes to align stack on 16 byte boundry.
|
|
//
|
|
.text
|
|
|
|
// 32 byte shadow to spill rcx-r9, 8 bytes to align stack on 16 byte boundry
|
|
// Any call with 0 - 4 arguments allocates 40 bytes on the stack.
|
|
// For more than 4 args you always have to increase in quanta of 16 so 5 or 6 args is 56,
|
|
// 7 or 8 args is 72, and 9 or 10 args is 88
|
|
#define EFI_STACK_SHADOW_SPACE 40
|
|
#define EFI_STACK_SHADOW_SPACE_5_6 56
|
|
#define EFI_STACK_SHADOW_SPACE_7_8 72
|
|
#define EFI_STACK_SHADOW_SPACE_9_10 88
|
|
|
|
|
|
|
|
.text
|
|
|
|
|
|
.globl _Gasketrmdir
|
|
_Gasketrmdir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq _gUnixRmDir@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
pushq %rdi // restore state
|
|
pushq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketopendir
|
|
_Gasketopendir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq _gUnixOpenDir@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketstat
|
|
_Gasketstat:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
movq _gUnixStat@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketstatfs
|
|
_Gasketstatfs:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
movq _gUnixStatFs@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
.globl _Gasketrewinddir
|
|
_Gasketrewinddir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq _gUnixRewinddir@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
.globl _Gasketreaddir
|
|
_Gasketreaddir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq _gUnixReaddir@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketmsSleep
|
|
_GasketmsSleep:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _msSleep
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketexit
|
|
_Gasketexit:
|
|
movq %rcx, %rdi // Swizzle args
|
|
call _exit // Less to do as we will never return to EFI ABI world
|
|
LDEAD_LOOP:
|
|
jmp LDEAD_LOOP: // _exit should never return
|
|
|
|
|
|
|
|
.globl _GasketSetTimer
|
|
_GasketSetTimer:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _SetTimer
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketGetLocalTime
|
|
_GasketGetLocalTime:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _GetLocalTime
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketgmtime
|
|
_Gasketgmtime:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _localtime
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _GasketGetTimeZone
|
|
_GasketGetTimeZone:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call _GetTimeZone
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketGetDayLight
|
|
_GasketGetDayLight:
|
|
LFB26:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call _GetDayLight
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketpoll
|
|
_Gasketpoll:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _poll
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketread
|
|
_Gasketread:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _read
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketwrite
|
|
_Gasketwrite:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _write
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketgetenv
|
|
_Gasketgetenv:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _getenv
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketopen
|
|
_Gasketopen:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _open
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketlseek
|
|
_Gasketlseek:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _lseek
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketftruncate
|
|
_Gasketftruncate:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _ftruncate
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketclose
|
|
_Gasketclose:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _close
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketmkdir
|
|
_Gasketmkdir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _mkdir
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketunlink
|
|
_Gasketunlink:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _unlink
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketGetErrno
|
|
_GasketGetErrno:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call _GetErrno
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
.globl _Gasketclosedir
|
|
_Gasketclosedir:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _closedir
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketrename
|
|
_Gasketrename:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _rename
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketmktime
|
|
_Gasketmktime:
|
|
LFB42:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _mktime
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketfsync
|
|
_Gasketfsync:
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _fsync
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketchmod
|
|
_Gasketchmod:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _chmod
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketutime
|
|
_Gasketutime:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _utime
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gaskettcflush
|
|
_Gaskettcflush:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _tcflush
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
call
|
|
|
|
|
|
.globl _GasketUgaCreate
|
|
_GasketUgaCreate:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _UgaCreate
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketperror
|
|
_Gasketperror:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _perror
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketioctl
|
|
_Gasketioctl:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _UnixIoCtl1
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gasketfcntl
|
|
_Gasketfcntl:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _UnixFctl1
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketcfsetispeed
|
|
_Gasketcfsetispeed:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _cfsetispeed
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _Gasketcfsetospeed
|
|
_Gasketcfsetospeed:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _cfsetospeed
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gaskettcgetattr
|
|
_Gaskettcgetattr:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _tcgetattr
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _Gaskettcsetattr
|
|
_Gaskettcsetattr:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _tcsetattr
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUnixPeCoffGetEntryPoint
|
|
_GasketUnixPeCoffGetEntryPoint:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _SecPeCoffGetEntryPoint
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
|
|
.globl _GasketUnixPeCoffRelocateImageExtraAction
|
|
_GasketUnixPeCoffRelocateImageExtraAction:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _SecPeCoffRelocateImageExtraAction
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUnixPeCoffUnloadImageExtraAction
|
|
_GasketUnixPeCoffUnloadImageExtraAction:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _SecPeCoffLoaderUnloadImageExtraAction
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUgaClose
|
|
_GasketUgaClose:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _UgaClose
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUgaSize
|
|
_GasketUgaSize:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call _UgaSize
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUgaCheckKey
|
|
_GasketUgaCheckKey:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _UgaCheckKey
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUgaGetKey
|
|
_GasketUgaGetKey:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call _UgaGetKey
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
ret
|
|
|
|
|
|
.globl _GasketUgaBlt
|
|
_GasketUgaBlt:
|
|
pushq %rsi // %rsi & %rdi are volatie in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
movq %r9, %rcx
|
|
|
|
call _UgaBlt
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
|
|
|
|
|
|
//
|
|
// UNIX ABI to EFI ABI call
|
|
//
|
|
// UINTN
|
|
// ReverseGasketUint64 (
|
|
// void *Api,
|
|
// UINTN Arg1,
|
|
// UINTN Arg2,
|
|
// UINTN Arg3
|
|
// );
|
|
.globl _ReverseGasketUint64
|
|
_ReverseGasketUint64:
|
|
movq %rdi, %rax // Swizzle args
|
|
movq %rsi, %r9
|
|
// movq %rdx, %rdx
|
|
movq %rcx, %r8
|
|
movq %r9, %rcx
|
|
|
|
subq 40, %rsp // 32-byte shadow space plus alignment pad
|
|
call *%rax
|
|
addq 40, %rsp
|
|
|
|
ret
|
|
|
|
|