summaryrefslogtreecommitdiffstats
path: root/EmulatorPkg/Unix/Host/X64/Gasket.S
diff options
context:
space:
mode:
Diffstat (limited to 'EmulatorPkg/Unix/Host/X64/Gasket.S')
-rw-r--r--EmulatorPkg/Unix/Host/X64/Gasket.S3262
1 files changed, 1631 insertions, 1631 deletions
diff --git a/EmulatorPkg/Unix/Host/X64/Gasket.S b/EmulatorPkg/Unix/Host/X64/Gasket.S
index c339461cd8..118a218818 100644
--- a/EmulatorPkg/Unix/Host/X64/Gasket.S
+++ b/EmulatorPkg/Unix/Host/X64/Gasket.S
@@ -1,1631 +1,1631 @@
-#------------------------------------------------------------------------------
-#
-# Manage differenced between UNIX ABI and EFI/Windows ABI
-#
-# EFI Arg passing: RCX, RDX, R8, R9
-# Callee allocates 32 bytes on stack to spill registers
-# UNIX Arg passing: RDI, RSI, RDX, RCX, R8, R9
-# RSI, RDI calle-save on EFI, scatch on UNIX callign
-#
-# Copyright (c) 2008 - 2011, 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
-
-
-
- .text
-
-//
-// EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
-//
-
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSecWriteStdErr)
-ASM_PFX(GasketSecWriteStdErr):
- 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(SecWriteStdErr)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecConfigStdIn)
-ASM_PFX(GasketSecConfigStdIn):
- 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(SecConfigStdIn)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecWriteStdOut)
-ASM_PFX(GasketSecWriteStdOut):
- 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(SecWriteStdOut)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecReadStdIn)
-ASM_PFX(GasketSecReadStdIn):
- 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(SecReadStdIn)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecPollStdIn)
-ASM_PFX(GasketSecPollStdIn):
- 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(SecPollStdIn)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecMalloc)
-ASM_PFX(GasketSecMalloc):
- 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(SecMalloc)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecValloc)
-ASM_PFX(GasketSecValloc):
- 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(SecValloc)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecFree)
-ASM_PFX(GasketSecFree):
- 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(SecFree)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecSetTimer)
-ASM_PFX(GasketSecSetTimer):
- 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(SecSetTimer)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecEnableInterrupt)
-ASM_PFX(GasketSecEnableInterrupt):
- 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(SecEnableInterrupt)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecDisableInterrupt)
-ASM_PFX(GasketSecDisableInterrupt):
- 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(SecDisableInterrupt)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketQueryPerformanceFrequency)
-ASM_PFX(GasketQueryPerformanceFrequency):
- 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(QueryPerformanceFrequency)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketQueryPerformanceCounter)
-ASM_PFX(GasketQueryPerformanceCounter):
- 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(QueryPerformanceCounter)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecSleep)
-ASM_PFX(GasketSecSleep):
- 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(SecSleep)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecCpuSleep)
-ASM_PFX(GasketSecCpuSleep):
- 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(SecCpuSleep)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecExit)
-ASM_PFX(GasketSecExit):
- pushq %rbp // stack frame is for the debugger
- movq %rsp, %rbp
-
- movq %rcx, %rdi // Swizzle args
- call ASM_PFX(SecExit) // 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(GasketSecGetTime)
-ASM_PFX(GasketSecGetTime):
- 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(SecGetTime)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketSecSetTime)
-ASM_PFX(GasketSecSetTime):
- 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(SecSetTime)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecGetNextProtocol)
-ASM_PFX(GasketSecGetNextProtocol):
- 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(SecGetNextProtocol)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-// PPIs produced by SEC
-
-ASM_GLOBAL ASM_PFX(GasketSecPeCoffGetEntryPoint)
-ASM_PFX(GasketSecPeCoffGetEntryPoint):
- 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(GasketSecPeCoffRelocateImageExtraAction)
-ASM_PFX(GasketSecPeCoffRelocateImageExtraAction):
- 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(GasketSecPeCoffUnloadImageExtraAction)
-ASM_PFX(GasketSecPeCoffUnloadImageExtraAction):
- 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(SecPeCoffUnloadImageExtraAction)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSecEmuThunkAddress)
-ASM_PFX(GasketSecEmuThunkAddress):
- 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(SecEmuThunkAddress)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-//
-// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
-//
-
-ASM_GLOBAL ASM_PFX(GasketX11Size)
-ASM_PFX(GasketX11Size):
- 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(X11Size)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11CheckKey)
-ASM_PFX(GasketX11CheckKey):
- 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(X11CheckKey)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketX11GetKey)
-ASM_PFX(GasketX11GetKey):
- 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(X11GetKey)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11KeySetState)
-ASM_PFX(GasketX11KeySetState):
- 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(X11KeySetState)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11RegisterKeyNotify)
-ASM_PFX(GasketX11RegisterKeyNotify):
- 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(X11RegisterKeyNotify)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11Blt)
-ASM_PFX(GasketX11Blt):
- 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(X11Blt)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11CheckPointer)
-ASM_PFX(GasketX11CheckPointer):
- 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(X11CheckPointer)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11GetPointerState)
-ASM_PFX(GasketX11GetPointerState):
- 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(X11GetPointerState)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowOpen)
-ASM_PFX(GasketX11GraphicsWindowOpen):
- 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(X11GraphicsWindowOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowClose)
-ASM_PFX(GasketX11GraphicsWindowClose):
- 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 %r9, %rcx
-
- call ASM_PFX(X11GraphicsWindowClose)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-// Pthreads
-
-ASM_GLOBAL ASM_PFX(GasketPthreadMutexLock)
-ASM_PFX(GasketPthreadMutexLock):
- 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(PthreadMutexLock)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadMutexUnLock)
-ASM_PFX(GasketPthreadMutexUnLock):
- 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(PthreadMutexUnLock)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketPthreadMutexTryLock)
-ASM_PFX(GasketPthreadMutexTryLock):
- 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(PthreadMutexTryLock)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketPthreadMutexInit)
-ASM_PFX(GasketPthreadMutexInit):
- 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(PthreadMutexInit)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadMutexDestroy)
-ASM_PFX(GasketPthreadMutexDestroy):
- 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(PthreadMutexDestroy)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadCreate)
-ASM_PFX(GasketPthreadCreate):
- 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(PthreadCreate)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadExit)
-ASM_PFX(GasketPthreadExit):
- 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(PthreadExit)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadSelf)
-ASM_PFX(GasketPthreadSelf):
- 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(PthreadSelf)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadOpen)
-ASM_PFX(GasketPthreadOpen):
- 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(PthreadOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPthreadClose)
-ASM_PFX(GasketPthreadClose):
- 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(PthreadClose)
-
- 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
-
-
-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(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
-
-
-// EmuIoThunk SimpleFileSystem
-
-ASM_GLOBAL ASM_PFX(GasketPosixOpenVolume)
-ASM_PFX(GasketPosixOpenVolume):
- 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(PosixOpenVolume)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileOpen)
-ASM_PFX(GasketPosixFileOpen):
- 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 48(%rbp), %r8
-
- call ASM_PFX(PosixFileOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileCLose)
-ASM_PFX(GasketPosixFileCLose):
- 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(PosixFileCLose)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileDelete)
-ASM_PFX(GasketPosixFileDelete):
- 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(PosixFileDelete)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileRead)
-ASM_PFX(GasketPosixFileRead):
- 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(PosixFileRead)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileWrite)
-ASM_PFX(GasketPosixFileWrite):
- 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(PosixFileWrite)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileSetPossition)
-ASM_PFX(GasketPosixFileSetPossition):
- 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(PosixFileSetPossition)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileGetPossition)
-ASM_PFX(GasketPosixFileGetPossition):
- 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(PosixFileGetPossition)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileGetInfo)
-ASM_PFX(GasketPosixFileGetInfo):
- 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(PosixFileGetInfo)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileSetInfo)
-ASM_PFX(GasketPosixFileSetInfo):
- 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(PosixFileSetInfo)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileFlush)
-ASM_PFX(GasketPosixFileFlush):
- 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(PosixFileFlush)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkOpen)
-ASM_PFX(GasketPosixFileSystmeThunkOpen):
- 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(PosixFileSystmeThunkOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkClose)
-ASM_PFX(GasketPosixFileSystmeThunkClose):
- 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(PosixFileSystmeThunkClose)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReset)
-ASM_PFX(GasketEmuBlockIoReset):
- 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(EmuBlockIoReset)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReadBlocks)
-ASM_PFX(GasketEmuBlockIoReadBlocks):
- 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 48(%rbp), %r8
- movq 56(%rbp), %r9
-
- call ASM_PFX(EmuBlockIoReadBlocks)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketEmuBlockIoWriteBlocks)
-ASM_PFX(GasketEmuBlockIoWriteBlocks):
- 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 48(%rbp), %r8
- movq 56(%rbp), %r9
-
- call ASM_PFX(EmuBlockIoWriteBlocks)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketEmuBlockIoFlushBlocks)
-ASM_PFX(GasketEmuBlockIoFlushBlocks):
- 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(EmuBlockIoFlushBlocks)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketEmuBlockIoCreateMapping)
-ASM_PFX(GasketEmuBlockIoCreateMapping):
- 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(EmuBlockIoCreateMapping)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketBlockIoThunkOpen)
-ASM_PFX(GasketBlockIoThunkOpen):
- 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(EmuBlockIoThunkOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketBlockIoThunkClose)
-ASM_PFX(GasketBlockIoThunkClose):
- 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(EmuBlockIoThunkClose)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpCreateMapping)
-ASM_PFX(GasketSnpCreateMapping):
- 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(EmuSnpCreateMapping)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpStart)
-ASM_PFX(GasketSnpStart):
- 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(EmuSnpStart)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpStop)
-ASM_PFX(GasketSnpStop):
- 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(EmuSnpStop)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpInitialize)
-ASM_PFX(GasketSnpInitialize):
- 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(EmuSnpInitialize)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpReset)
-ASM_PFX(GasketSnpReset):
- 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(EmuSnpReset)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpShutdown)
-ASM_PFX(GasketSnpShutdown):
- 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(EmuSnpShutdown)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpReceiveFilters)
-ASM_PFX(GasketSnpReceiveFilters):
- 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 48(%rbp), %r8
- movq 56(%rbp), %r9
-
- call ASM_PFX(EmuSnpReceiveFilters)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpStationAddress)
-ASM_PFX(GasketSnpStationAddress):
- 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(EmuSnpStationAddress)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpStatistics)
-ASM_PFX(GasketSnpStatistics):
- 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(EmuSnpStatistics)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpMCastIpToMac)
-ASM_PFX(GasketSnpMCastIpToMac):
- 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(EmuSnpMCastIpToMac)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpNvData)
-ASM_PFX(GasketSnpNvData):
- 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 48(%rbp), %r8
-
- call ASM_PFX(EmuSnpNvData)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpGetStatus)
-ASM_PFX(GasketSnpGetStatus):
- 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(EmuSnpGetStatus)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpTransmit)
-ASM_PFX(GasketSnpTransmit):
- pushq %rbp // stack frame is for the debugger
- movq %rsp, %rbp
- subq $16, %rsp // Allocate space for args on the stack
-
- 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 48(%rbp), %r8
- movq 56(%rbp), %r9
- movq 64(%rbp), %rax
- movq %rax, (%rsp)
-
- call ASM_PFX(EmuSnpTransmit)
- addq $16, %rsp
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpReceive)
-ASM_PFX(GasketSnpReceive):
- pushq %rbp // stack frame is for the debugger
- movq %rsp, %rbp
- subq $16, %rsp // Allocate space for args on the stack
-
- 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 48(%rbp), %r8
- movq 56(%rbp), %r9
- movq 64(%rbp), %rax
- movq %rax, (%rsp)
-
- call ASM_PFX(EmuSnpReceive)
- addq $16, %rsp
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpThunkOpen)
-ASM_PFX(GasketSnpThunkOpen):
- 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(EmuSnpThunkOpen)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
-ASM_GLOBAL ASM_PFX(GasketSnpThunkClose)
-ASM_PFX(GasketSnpThunkClose):
- 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(EmuSnpThunkClose)
-
- popq %rdi // restore state
- popq %rsi
- popq %rbp
- ret
-
-
+#------------------------------------------------------------------------------
+#
+# Manage differenced between UNIX ABI and EFI/Windows ABI
+#
+# EFI Arg passing: RCX, RDX, R8, R9
+# Callee allocates 32 bytes on stack to spill registers
+# UNIX Arg passing: RDI, RSI, RDX, RCX, R8, R9
+# RSI, RDI calle-save on EFI, scatch on UNIX callign
+#
+# Copyright (c) 2008 - 2011, 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
+
+
+
+ .text
+
+//
+// EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
+//
+
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSecWriteStdErr)
+ASM_PFX(GasketSecWriteStdErr):
+ 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(SecWriteStdErr)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecConfigStdIn)
+ASM_PFX(GasketSecConfigStdIn):
+ 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(SecConfigStdIn)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecWriteStdOut)
+ASM_PFX(GasketSecWriteStdOut):
+ 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(SecWriteStdOut)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecReadStdIn)
+ASM_PFX(GasketSecReadStdIn):
+ 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(SecReadStdIn)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecPollStdIn)
+ASM_PFX(GasketSecPollStdIn):
+ 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(SecPollStdIn)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecMalloc)
+ASM_PFX(GasketSecMalloc):
+ 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(SecMalloc)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecValloc)
+ASM_PFX(GasketSecValloc):
+ 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(SecValloc)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecFree)
+ASM_PFX(GasketSecFree):
+ 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(SecFree)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecSetTimer)
+ASM_PFX(GasketSecSetTimer):
+ 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(SecSetTimer)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecEnableInterrupt)
+ASM_PFX(GasketSecEnableInterrupt):
+ 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(SecEnableInterrupt)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecDisableInterrupt)
+ASM_PFX(GasketSecDisableInterrupt):
+ 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(SecDisableInterrupt)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketQueryPerformanceFrequency)
+ASM_PFX(GasketQueryPerformanceFrequency):
+ 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(QueryPerformanceFrequency)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketQueryPerformanceCounter)
+ASM_PFX(GasketQueryPerformanceCounter):
+ 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(QueryPerformanceCounter)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecSleep)
+ASM_PFX(GasketSecSleep):
+ 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(SecSleep)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecCpuSleep)
+ASM_PFX(GasketSecCpuSleep):
+ 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(SecCpuSleep)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecExit)
+ASM_PFX(GasketSecExit):
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
+
+ movq %rcx, %rdi // Swizzle args
+ call ASM_PFX(SecExit) // 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(GasketSecGetTime)
+ASM_PFX(GasketSecGetTime):
+ 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(SecGetTime)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketSecSetTime)
+ASM_PFX(GasketSecSetTime):
+ 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(SecSetTime)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecGetNextProtocol)
+ASM_PFX(GasketSecGetNextProtocol):
+ 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(SecGetNextProtocol)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+// PPIs produced by SEC
+
+ASM_GLOBAL ASM_PFX(GasketSecPeCoffGetEntryPoint)
+ASM_PFX(GasketSecPeCoffGetEntryPoint):
+ 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(GasketSecPeCoffRelocateImageExtraAction)
+ASM_PFX(GasketSecPeCoffRelocateImageExtraAction):
+ 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(GasketSecPeCoffUnloadImageExtraAction)
+ASM_PFX(GasketSecPeCoffUnloadImageExtraAction):
+ 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(SecPeCoffUnloadImageExtraAction)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSecEmuThunkAddress)
+ASM_PFX(GasketSecEmuThunkAddress):
+ 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(SecEmuThunkAddress)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+//
+// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
+//
+
+ASM_GLOBAL ASM_PFX(GasketX11Size)
+ASM_PFX(GasketX11Size):
+ 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(X11Size)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11CheckKey)
+ASM_PFX(GasketX11CheckKey):
+ 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(X11CheckKey)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketX11GetKey)
+ASM_PFX(GasketX11GetKey):
+ 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(X11GetKey)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11KeySetState)
+ASM_PFX(GasketX11KeySetState):
+ 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(X11KeySetState)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11RegisterKeyNotify)
+ASM_PFX(GasketX11RegisterKeyNotify):
+ 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(X11RegisterKeyNotify)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11Blt)
+ASM_PFX(GasketX11Blt):
+ 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(X11Blt)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11CheckPointer)
+ASM_PFX(GasketX11CheckPointer):
+ 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(X11CheckPointer)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11GetPointerState)
+ASM_PFX(GasketX11GetPointerState):
+ 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(X11GetPointerState)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowOpen)
+ASM_PFX(GasketX11GraphicsWindowOpen):
+ 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(X11GraphicsWindowOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowClose)
+ASM_PFX(GasketX11GraphicsWindowClose):
+ 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 %r9, %rcx
+
+ call ASM_PFX(X11GraphicsWindowClose)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+// Pthreads
+
+ASM_GLOBAL ASM_PFX(GasketPthreadMutexLock)
+ASM_PFX(GasketPthreadMutexLock):
+ 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(PthreadMutexLock)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadMutexUnLock)
+ASM_PFX(GasketPthreadMutexUnLock):
+ 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(PthreadMutexUnLock)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketPthreadMutexTryLock)
+ASM_PFX(GasketPthreadMutexTryLock):
+ 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(PthreadMutexTryLock)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketPthreadMutexInit)
+ASM_PFX(GasketPthreadMutexInit):
+ 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(PthreadMutexInit)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadMutexDestroy)
+ASM_PFX(GasketPthreadMutexDestroy):
+ 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(PthreadMutexDestroy)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadCreate)
+ASM_PFX(GasketPthreadCreate):
+ 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(PthreadCreate)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadExit)
+ASM_PFX(GasketPthreadExit):
+ 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(PthreadExit)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadSelf)
+ASM_PFX(GasketPthreadSelf):
+ 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(PthreadSelf)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadOpen)
+ASM_PFX(GasketPthreadOpen):
+ 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(PthreadOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPthreadClose)
+ASM_PFX(GasketPthreadClose):
+ 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(PthreadClose)
+
+ 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
+
+
+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(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
+
+
+// EmuIoThunk SimpleFileSystem
+
+ASM_GLOBAL ASM_PFX(GasketPosixOpenVolume)
+ASM_PFX(GasketPosixOpenVolume):
+ 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(PosixOpenVolume)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileOpen)
+ASM_PFX(GasketPosixFileOpen):
+ 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 48(%rbp), %r8
+
+ call ASM_PFX(PosixFileOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileCLose)
+ASM_PFX(GasketPosixFileCLose):
+ 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(PosixFileCLose)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileDelete)
+ASM_PFX(GasketPosixFileDelete):
+ 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(PosixFileDelete)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileRead)
+ASM_PFX(GasketPosixFileRead):
+ 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(PosixFileRead)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileWrite)
+ASM_PFX(GasketPosixFileWrite):
+ 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(PosixFileWrite)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileSetPossition)
+ASM_PFX(GasketPosixFileSetPossition):
+ 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(PosixFileSetPossition)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileGetPossition)
+ASM_PFX(GasketPosixFileGetPossition):
+ 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(PosixFileGetPossition)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileGetInfo)
+ASM_PFX(GasketPosixFileGetInfo):
+ 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(PosixFileGetInfo)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileSetInfo)
+ASM_PFX(GasketPosixFileSetInfo):
+ 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(PosixFileSetInfo)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileFlush)
+ASM_PFX(GasketPosixFileFlush):
+ 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(PosixFileFlush)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkOpen)
+ASM_PFX(GasketPosixFileSystmeThunkOpen):
+ 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(PosixFileSystmeThunkOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkClose)
+ASM_PFX(GasketPosixFileSystmeThunkClose):
+ 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(PosixFileSystmeThunkClose)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReset)
+ASM_PFX(GasketEmuBlockIoReset):
+ 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(EmuBlockIoReset)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReadBlocks)
+ASM_PFX(GasketEmuBlockIoReadBlocks):
+ 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 48(%rbp), %r8
+ movq 56(%rbp), %r9
+
+ call ASM_PFX(EmuBlockIoReadBlocks)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketEmuBlockIoWriteBlocks)
+ASM_PFX(GasketEmuBlockIoWriteBlocks):
+ 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 48(%rbp), %r8
+ movq 56(%rbp), %r9
+
+ call ASM_PFX(EmuBlockIoWriteBlocks)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketEmuBlockIoFlushBlocks)
+ASM_PFX(GasketEmuBlockIoFlushBlocks):
+ 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(EmuBlockIoFlushBlocks)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketEmuBlockIoCreateMapping)
+ASM_PFX(GasketEmuBlockIoCreateMapping):
+ 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(EmuBlockIoCreateMapping)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketBlockIoThunkOpen)
+ASM_PFX(GasketBlockIoThunkOpen):
+ 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(EmuBlockIoThunkOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketBlockIoThunkClose)
+ASM_PFX(GasketBlockIoThunkClose):
+ 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(EmuBlockIoThunkClose)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpCreateMapping)
+ASM_PFX(GasketSnpCreateMapping):
+ 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(EmuSnpCreateMapping)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpStart)
+ASM_PFX(GasketSnpStart):
+ 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(EmuSnpStart)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpStop)
+ASM_PFX(GasketSnpStop):
+ 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(EmuSnpStop)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpInitialize)
+ASM_PFX(GasketSnpInitialize):
+ 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(EmuSnpInitialize)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpReset)
+ASM_PFX(GasketSnpReset):
+ 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(EmuSnpReset)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpShutdown)
+ASM_PFX(GasketSnpShutdown):
+ 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(EmuSnpShutdown)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpReceiveFilters)
+ASM_PFX(GasketSnpReceiveFilters):
+ 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 48(%rbp), %r8
+ movq 56(%rbp), %r9
+
+ call ASM_PFX(EmuSnpReceiveFilters)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpStationAddress)
+ASM_PFX(GasketSnpStationAddress):
+ 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(EmuSnpStationAddress)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpStatistics)
+ASM_PFX(GasketSnpStatistics):
+ 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(EmuSnpStatistics)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpMCastIpToMac)
+ASM_PFX(GasketSnpMCastIpToMac):
+ 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(EmuSnpMCastIpToMac)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpNvData)
+ASM_PFX(GasketSnpNvData):
+ 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 48(%rbp), %r8
+
+ call ASM_PFX(EmuSnpNvData)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpGetStatus)
+ASM_PFX(GasketSnpGetStatus):
+ 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(EmuSnpGetStatus)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpTransmit)
+ASM_PFX(GasketSnpTransmit):
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
+ subq $16, %rsp // Allocate space for args on the stack
+
+ 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 48(%rbp), %r8
+ movq 56(%rbp), %r9
+ movq 64(%rbp), %rax
+ movq %rax, (%rsp)
+
+ call ASM_PFX(EmuSnpTransmit)
+ addq $16, %rsp
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpReceive)
+ASM_PFX(GasketSnpReceive):
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
+ subq $16, %rsp // Allocate space for args on the stack
+
+ 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 48(%rbp), %r8
+ movq 56(%rbp), %r9
+ movq 64(%rbp), %rax
+ movq %rax, (%rsp)
+
+ call ASM_PFX(EmuSnpReceive)
+ addq $16, %rsp
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpThunkOpen)
+ASM_PFX(GasketSnpThunkOpen):
+ 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(EmuSnpThunkOpen)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+
+ASM_GLOBAL ASM_PFX(GasketSnpThunkClose)
+ASM_PFX(GasketSnpThunkClose):
+ 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(EmuSnpThunkClose)
+
+ popq %rdi // restore state
+ popq %rsi
+ popq %rbp
+ ret
+
+