mirror of https://github.com/acidanthera/audk.git
1299 lines
29 KiB
ArmAsm
1299 lines
29 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
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketrmdir)
|
|
ASM_PFX(Gasketrmdir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq ASM_PFX(gUnixRmDir)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketopendir)
|
|
ASM_PFX(Gasketopendir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq ASM_PFX(gUnixOpenDir)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketstat)
|
|
ASM_PFX(Gasketstat):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
movq ASM_PFX(gUnixStat)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketstatfs)
|
|
ASM_PFX(Gasketstatfs):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
movq ASM_PFX(gUnixStatFs)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketrewinddir)
|
|
ASM_PFX(Gasketrewinddir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq ASM_PFX(gUnixRewinddir)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketreaddir)
|
|
ASM_PFX(Gasketreaddir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
movq ASM_PFX(gUnixReaddir)@GOTPCREL(%rip), %rax // Get function name mangled by C
|
|
movq (%rax), %rax
|
|
call *%rax
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketmsSleep)
|
|
ASM_PFX(GasketmsSleep):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(msSleep)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketexit)
|
|
ASM_PFX(Gasketexit):
|
|
movq %rcx, %rdi // Swizzle args
|
|
call ASM_PFX(exit) // Less to do as we will never return to EFI ABI world
|
|
LDEAD_LOOP:
|
|
jmp LDEAD_LOOP // _exit should never return
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSetTimer)
|
|
ASM_PFX(GasketSetTimer):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(SetTimer)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketGetLocalTime)
|
|
ASM_PFX(GasketGetLocalTime):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(GetLocalTime)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketgmtime)
|
|
ASM_PFX(Gasketgmtime):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(localtime)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketGetTimeZone)
|
|
ASM_PFX(GasketGetTimeZone):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(GetTimeZone)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketGetDayLight)
|
|
ASM_PFX(GasketGetDayLight):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(GetDayLight)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketpoll)
|
|
ASM_PFX(Gasketpoll):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(poll)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketread)
|
|
ASM_PFX(Gasketread):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(read)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketwrite)
|
|
ASM_PFX(Gasketwrite):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(write)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketgetenv)
|
|
ASM_PFX(Gasketgetenv):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(getenv)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketopen)
|
|
ASM_PFX(Gasketopen):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(open)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketlseek)
|
|
ASM_PFX(Gasketlseek):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(lseek)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketftruncate)
|
|
ASM_PFX(Gasketftruncate):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(ftruncate)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketclose)
|
|
ASM_PFX(Gasketclose):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(close)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketmkdir)
|
|
ASM_PFX(Gasketmkdir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(mkdir)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketunlink)
|
|
ASM_PFX(Gasketunlink):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(unlink)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketGetErrno)
|
|
ASM_PFX(GasketGetErrno):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(GetErrno)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketclosedir)
|
|
ASM_PFX(Gasketclosedir):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(closedir)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketrename)
|
|
ASM_PFX(Gasketrename):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(rename)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketmktime)
|
|
ASM_PFX(Gasketmktime):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(mktime)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketfsync)
|
|
ASM_PFX(Gasketfsync):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(fsync)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketchmod)
|
|
ASM_PFX(Gasketchmod):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(chmod)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketutime)
|
|
ASM_PFX(Gasketutime):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(utime)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gaskettcflush)
|
|
ASM_PFX(Gaskettcflush):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(tcflush)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaCreate)
|
|
ASM_PFX(GasketUgaCreate):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(UgaCreate)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketperror)
|
|
ASM_PFX(Gasketperror):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(perror)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketioctl)
|
|
ASM_PFX(Gasketioctl):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(UnixIoCtl1)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketfcntl)
|
|
ASM_PFX(Gasketfcntl):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(UnixFcntl1)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketcfsetispeed)
|
|
ASM_PFX(Gasketcfsetispeed):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(cfsetispeed)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketcfsetospeed)
|
|
ASM_PFX(Gasketcfsetospeed):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(cfsetospeed)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gaskettcgetattr)
|
|
ASM_PFX(Gaskettcgetattr):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(tcgetattr)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gaskettcsetattr)
|
|
ASM_PFX(Gaskettcsetattr):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(tcsetattr)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUnixPeCoffGetEntryPoint)
|
|
ASM_PFX(GasketUnixPeCoffGetEntryPoint):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(SecPeCoffGetEntryPoint)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUnixPeCoffRelocateImageExtraAction)
|
|
ASM_PFX(GasketUnixPeCoffRelocateImageExtraAction):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(SecPeCoffRelocateImageExtraAction)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUnixPeCoffUnloadImageExtraAction)
|
|
ASM_PFX(GasketUnixPeCoffUnloadImageExtraAction):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(SecPeCoffLoaderUnloadImageExtraAction)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketsocket)
|
|
ASM_PFX(Gasketsocket):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(socket)
|
|
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(Gasketgetifaddrs)
|
|
ASM_PFX(Gasketgetifaddrs):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(getifaddrs)
|
|
|
|
|
|
popq %rbp
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL _Gasketfreeifaddrs
|
|
_Gasketfreeifaddrs:
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call _freeifaddrs
|
|
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaClose)
|
|
ASM_PFX(GasketUgaClose):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(UgaClose)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaSize)
|
|
ASM_PFX(GasketUgaSize):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(UgaSize)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaCheckKey)
|
|
ASM_PFX(GasketUgaCheckKey):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(UgaCheckKey)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaGetKey)
|
|
ASM_PFX(GasketUgaGetKey):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(UgaGetKey)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaKeySetState)
|
|
ASM_PFX(GasketUgaKeySetState):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(UgaKeySetState)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaRegisterKeyNotify)
|
|
ASM_PFX(GasketUgaRegisterKeyNotify):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(UgaRegisterKeyNotify)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaBlt)
|
|
ASM_PFX(GasketUgaBlt):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile 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 ASM_PFX(UgaBlt)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaCheckPointer)
|
|
ASM_PFX(GasketUgaCheckPointer):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
|
|
call ASM_PFX(UgaCheckPointer)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUgaGetPointerState)
|
|
ASM_PFX(GasketUgaGetPointerState):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
|
|
call ASM_PFX(UgaGetPointerState)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUnixEnableInterrupt)
|
|
ASM_PFX(GasketUnixEnableInterrupt):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(UnixEnableInterrupt)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketUnixDisableInterrupt)
|
|
ASM_PFX(GasketUnixDisableInterrupt):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(UnixDisableInterrupt)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
//
|
|
// UNIX ABI to EFI ABI call
|
|
//
|
|
// UINTN
|
|
// ReverseGasketUint64 (
|
|
// void *Api,
|
|
// UINTN Arg1
|
|
// );
|
|
ASM_GLOBAL ASM_PFX(ReverseGasketUint64)
|
|
ASM_PFX(ReverseGasketUint64):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
movq %rdi, %rax // Swizzle args
|
|
movq %rsi, %rcx
|
|
|
|
subq $32, %rsp // 32-byte shadow space
|
|
call *%rax
|
|
addq $32, %rsp
|
|
|
|
popq %rbp
|
|
ret
|
|
|
|
//
|
|
// UNIX ABI to EFI ABI call
|
|
//
|
|
// UINTN
|
|
// ReverseGasketUint64Uint64 (
|
|
// void *Api,
|
|
// UINTN Arg1
|
|
// UINTN Arg2
|
|
// );
|
|
ASM_GLOBAL ASM_PFX(ReverseGasketUint64Uint64)
|
|
ASM_PFX(ReverseGasketUint64Uint64):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
movq %rdi, %rax // Swizzle args
|
|
movq %rsi, %rcx
|
|
|
|
subq $32, %rsp // 32-byte shadow space
|
|
call *%rax
|
|
addq $32, %rsp
|
|
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
// Sec PPI Callbacks
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecUnixPeiLoadFile)
|
|
ASM_PFX(GasketSecUnixPeiLoadFile):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile 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 ASM_PFX(SecUnixPeiLoadFile)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecUnixPeiAutoScan)
|
|
ASM_PFX(GasketSecUnixPeiAutoScan):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
|
|
call ASM_PFX(SecUnixPeiAutoScan)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecUnixUnixThunkAddress)
|
|
ASM_PFX(GasketSecUnixUnixThunkAddress):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
call ASM_PFX(SecUnixUnixThunkAddress)
|
|
|
|
|
|
popq %rdi
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecPeiReportStatusCode)
|
|
ASM_PFX(GasketSecPeiReportStatusCode):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
|
|
pushq %rdi
|
|
|
|
movq %rcx, %rdi // Swizzle args
|
|
movq %rdx, %rsi
|
|
movq %r8, %rdx
|
|
movq %r9, %rcx
|
|
movq $0, %r8 // BugBug: This should come from the stack
|
|
movq $0, %r9 // But we can cheat since they are optional for bringup....
|
|
|
|
call ASM_PFX(SecPeiReportStatusCode)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecUnixFdAddress)
|
|
ASM_PFX(GasketSecUnixFdAddress):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile 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 ASM_PFX(SecUnixFdAddress)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
ASM_GLOBAL ASM_PFX(GasketSecTemporaryRamSupport)
|
|
ASM_PFX(GasketSecTemporaryRamSupport):
|
|
pushq %rbp // stack frame is for the debugger
|
|
movq %rsp, %rbp
|
|
|
|
pushq %rsi // %rsi & %rdi are volatile 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 ASM_PFX(SecTemporaryRamSupport)
|
|
|
|
popq %rdi // restore state
|
|
popq %rsi
|
|
popq %rbp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|