diff options
author | AJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-06 02:00:37 +0000 |
---|---|---|
committer | AJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-06 02:00:37 +0000 |
commit | 7ee3b61338de1fa592227c719eca20f7813ea606 (patch) | |
tree | 057ca20e53d6384346f3e61114e450eb9bd1bc9c /UnixPkg/Sec/X64 | |
parent | 2ef2b01e07c02db339f34004445734a2dbdd80e1 (diff) | |
download | edk2-platforms-7ee3b61338de1fa592227c719eca20f7813ea606.tar.xz |
Added support for Xcode on Snow Leopard. Upaded with bug fixes for Snow Leopard.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9519 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'UnixPkg/Sec/X64')
-rw-r--r-- | UnixPkg/Sec/X64/Gasket.S | 1026 |
1 files changed, 1026 insertions, 0 deletions
diff --git a/UnixPkg/Sec/X64/Gasket.S b/UnixPkg/Sec/X64/Gasket.S new file mode 100644 index 0000000000..bce19f3d0d --- /dev/null +++ b/UnixPkg/Sec/X64/Gasket.S @@ -0,0 +1,1026 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2008-2009 Apple Inc. All rights reserved. +# All rights reserved. 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. +# +# Abstract: +# +# EFI uses a simplified version of the MSFT calling convention, and every one else, +# Mac OS X, BSD, Linux, uses a different one. We can skip dealing with floating point +# other than making sure non volatile registers are preserved. +# +# Register for arguments +# MSFT Every One Else +# ---- -------------- +# rcx rdi +# rdx rsi +# r8 rdx +# r9 rcx +# r8 +# r9 +# +# Callee saved registers +# MSFT Every One Else +# ---- -------------- +# rbx rbx +# rbp rbp +# r12-r15 r12-r15 +# rsi +# rdi +# xmm6-xmm15 +# +# cat t.c +##include <stdio.h> +##include <sys/stat.h> +# +#int chmod (int fd, mode_t len){ +# long m = (long)fd; +#} +# +#int Gasketchmod (int fd, mode_t len){ +# return chmod (fd, len); +#} +# +# gcc -arch x86_64 -S t.c +# cat t.s +# this gives you the starting point.... +# +# +#------------------------------------------------------------------------------ + +#include <ProcessorBind.h> + + .text + +# +# +# EFI_UNIX_THUNK_PROTOCOL that gets exported +# +# + +#------------------------------------------------------------------------------ +# VOID GasketmsSleep (unsigned long Milliseconds); +#------------------------------------------------------------------------------ +.globl _GasketmsSleep +_GasketmsSleep: + pushl %rbp + movq %rsp, %rbp # does leave use rbp or rsp??? + subq $148, %rsp + + # save registers the OS X will think are volatile + movaps %xmm6, -8(%rbp) + movaps %xmm7, -24(%rbp) + movaps %xmm8, -40(%rbp) + movaps %xmm9, -56(%rbp) + movaps %xmm10, -72(%rbp) + movaps %xmm11, -88(%rbp) + movaps %xmm12, -104(%rbp) + movaps %xmm13, -120(%rbp) + movaps %xmm14, -136(%rbp) + movaps %xmm15, -152(%rbp) + movq %rsi, -160(%rbp) + movq %rdi, -168(%rbp) + + movq %rcx, %rdi + call _msSleep + + movaps -8(%rbp), %xmm6, + movaps -24(%rbp), %xmm7 + movaps -40(%rbp), %xmm8 + movaps -56(%rbp), %xmm9 + movaps -72(%rbp), %xmm10 + movaps -88(%rbp), %xmm11 + movaps -104(%rbp), %xmm12 + movaps -120(%rbp), %xmm13 + movaps -136(%rbp), %xmm14 + movaps -152(%rbp), %xmm15 + movq -160(%rbp), %rsi + movq -168(%rbp), %rdi + + leave + ret + + +#------------------------------------------------------------------------------ +# void Gasketexit (int status); +#------------------------------------------------------------------------------ +.globl _Gasketexit +_Gasketexit: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _exit + leave + ret + + +#------------------------------------------------------------------------------ +# void GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs)); +#------------------------------------------------------------------------------ +.globl _GasketSetTimer +_GasketSetTimer: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, -16(%ebp) + movl 12(%ebp), %eax + movl %eax, -12(%ebp) + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl -16(%ebp), %eax + movl -12(%ebp), %edx + movl %eax, (%esp) + movl %edx, 4(%esp) + call _SetTimer + leave + ret + + + +#------------------------------------------------------------------------------ +# void GasketGetLocalTime (EFI_TIME *Time); +#------------------------------------------------------------------------------ +.globl _GasketGetLocalTime +_GasketGetLocalTime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _GetLocalTime + leave + ret + + + +#------------------------------------------------------------------------------ +# struct tm *Gasketgmtime (const time_t *clock); +#------------------------------------------------------------------------------ +.globl _Gasketgmtime +_Gasketgmtime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _gmtime + leave + ret + + + + +#------------------------------------------------------------------------------ +# long GasketGetTimeZone(void); +#------------------------------------------------------------------------------ +.globl _GasketGetTimeZone +_GasketGetTimeZone: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetTimeZone + leave + ret + + +#------------------------------------------------------------------------------ +# int GasketGetDayLight (void); +#------------------------------------------------------------------------------ +.globl _GasketGetDayLight +_GasketGetDayLight: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetDayLight + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketpoll (struct pollfd *pfd, int nfds, int timeout); +#------------------------------------------------------------------------------ +.globl _Gasketpoll +_Gasketpoll: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _poll + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketread (int fd, void *buf, int count); +#------------------------------------------------------------------------------ +.globl _Gasketread +_Gasketread: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _read + leave + ret + + +#------------------------------------------------------------------------------ +# int Gasketwrite (int fd, const void *buf, int count); +#------------------------------------------------------------------------------ +.globl _Gasketwrite +_Gasketwrite: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _write + leave + ret + + + +#------------------------------------------------------------------------------ +# char *Gasketgetenv (const char *name); +#------------------------------------------------------------------------------ +.globl _Gasketgetenv +_Gasketgetenv: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _getenv + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketopen (const char *name, int flags, int mode); +#------------------------------------------------------------------------------ +.globl _Gasketopen +_Gasketopen: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _open + leave + ret + + + +#------------------------------------------------------------------------------ +# off_t Gasketlseek (int fd, off_t off, int whence); +#------------------------------------------------------------------------------ +.globl _Gasketlseek +_Gasketlseek: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, -16(%ebp) + movl 16(%ebp), %eax + movl %eax, -12(%ebp) + movl 20(%ebp), %eax + movl %eax, 12(%esp) + movl -16(%ebp), %eax + movl -12(%ebp), %edx + movl %eax, 4(%esp) + movl %edx, 8(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _lseek + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketftruncate (int fd, long int len); +#------------------------------------------------------------------------------ +.globl _Gasketftruncate +_Gasketftruncate: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _truncate + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketclose (int fd); +#------------------------------------------------------------------------------ +.globl _Gasketclose +_Gasketclose: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _close + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketmkdir (const char *pathname, mode_t mode); +#------------------------------------------------------------------------------ +.globl _Gasketmkdir +_Gasketmkdir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _mkdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketrmdir (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketrmdir +_Gasketrmdir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rmdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketunlink (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketunlink +_Gasketunlink: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _unlink + leave + ret + + + +#------------------------------------------------------------------------------ +# int GasketGetErrno (void); +#------------------------------------------------------------------------------ +.globl _GasketGetErrno +_GasketGetErrno: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetErrno + leave + ret + + + +#------------------------------------------------------------------------------ +# DIR *Gasketopendir (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketopendir +_Gasketopendir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _opendir + leave + ret + + + +#------------------------------------------------------------------------------ +# void *Gasketrewinddir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketrewinddir +_Gasketrewinddir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rewinddir + leave + ret + + + +#------------------------------------------------------------------------------ +# struct dirent *Gasketreaddir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketreaddir +_Gasketreaddir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _readdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketclosedir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketclosedir +_Gasketclosedir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _closedir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketstat (const char *path, struct stat *buf); +#------------------------------------------------------------------------------ +.globl _Gasketstat +_Gasketstat: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _stat + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketstatfs (const char *path, struct statfs *buf); +#------------------------------------------------------------------------------ +.globl _Gasketstatfs +_Gasketstatfs: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _statfs + leave + ret + + + + +#------------------------------------------------------------------------------ +# int Gasketrename (const char *oldpath, const char *newpath); +#------------------------------------------------------------------------------ +.globl _Gasketrename +_Gasketrename: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + + + +#------------------------------------------------------------------------------ +# time_t Gasketmktime (struct tm *tm); +#------------------------------------------------------------------------------ +.globl _Gasketmktime +_Gasketmktime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _mktime + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketfsync (int fd); +#------------------------------------------------------------------------------ +.globl _Gasketfsync +_Gasketfsync: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _fsync + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketchmod (const char *path, mode_t mode); +#------------------------------------------------------------------------------ +.globl _Gasketchmod +_Gasketchmod: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movw %ax, -12(%ebp) + movzwl -12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _chmod + leave + ret + +#------------------------------------------------------------------------------ +# int Gasketutime (const char *filename, const struct utimbuf *buf); +#------------------------------------------------------------------------------ +.globl _Gasketutime +_Gasketutime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gaskettcflush (int fildes, int queue_selector); +#------------------------------------------------------------------------------ +.globl _Gaskettcflush +_Gaskettcflush: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + +#------------------------------------------------------------------------------ +# EFI_STATUS UgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title); +#------------------------------------------------------------------------------ +.globl _GasketUgaCreate +_GasketUgaCreate: + pushl %ebp + movl %esp, %ebp + subl $40, %esp #sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaCreate + leave + ret + + +#------------------------------------------------------------------------------ +# void Gasketperror (__const char *__s); +#------------------------------------------------------------------------------ +.globl _Gasketperror +_Gasketperror: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _perror + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketioctl (int fd, unsigned long int __request, ...); +# +# ... is really int or pointer to structure, so we can treat like an int +# +#------------------------------------------------------------------------------ +.globl _Gasketioctl +_Gasketioctl: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _ioctl + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketfcntl (int __fd, int __cmd, ...); +# +# ... is really int or pointer to structure, so we can treat like an int +# +#------------------------------------------------------------------------------ +.globl _Gasketfcntl +_Gasketfcntl: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _fcntl + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed); +#------------------------------------------------------------------------------ +.globl _Gasketcfsetispeed +_Gasketcfsetispeed: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _cfsetispeed + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed); +#------------------------------------------------------------------------------ +.globl _Gasketcfsetospeed +_Gasketcfsetospeed: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _cfsetospeed + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gaskettcgetattr (int __fd, struct termios *__termios_p); +#------------------------------------------------------------------------------ +.globl _Gaskettcgetattr +_Gaskettcgetattr: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _tcgetattr + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p); +#------------------------------------------------------------------------------ +.globl _Gaskettcsetattr +_Gaskettcsetattr: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _tcsetattr + leave + ret + +#------------------------------------------------------------------------------ +# int Gasketsigaction (int sig, const struct sigaction *act, struct sigaction *oact); +#------------------------------------------------------------------------------ +.globl _Gasketsigaction +_Gasketsigaction: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _sigaction + leave + ret + + +#------------------------------------------------------------------------------ +# int Gasketsetcontext (const ucontext_t *ucp); +#------------------------------------------------------------------------------ +.globl _Gasketsetcontext +_Gasketsetcontext: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _setcontext + leave + ret + +#------------------------------------------------------------------------------ +# int Gasketgetcontext (ucontext_t *ucp); +#------------------------------------------------------------------------------ +.globl _Gasketgetcontext +_Gasketgetcontext: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _getcontext + leave + ret + +#------------------------------------------------------------------------------ +# int Gasketsigemptyset (sigset_t *set); +#------------------------------------------------------------------------------ +.globl _Gasketsigemptyset +_Gasketsigemptyset: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _sigemptyset + leave + ret + + +#------------------------------------------------------------------------------ +# int Gasketsigaltstack (const stack_t *ss, stack_t *oss); +#------------------------------------------------------------------------------ +.globl _Gasketsigaltstack +_Gasketsigaltstack: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _sigaltstack + leave + ret + +# +# +# UGA Functions that get exported +# +# + +#------------------------------------------------------------------------------ +# EFI_STATUS GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo); +#------------------------------------------------------------------------------ +.globl _GasketUgaClose +_GasketUgaClose: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaClose + leave + ret + +#------------------------------------------------------------------------------ +# EFI_STATUS GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height); +#------------------------------------------------------------------------------ +.globl _GasketUgaSize +_GasketUgaSize: + pushl %ebp + movl %esp, %ebp + subl $40, %esp + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaSize + leave + ret + + +#------------------------------------------------------------------------------ +# EFI_STATUS GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo); +#------------------------------------------------------------------------------ +.globl _GasketUgaCheckKey +_GasketUgaCheckKey: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaCheckKey + leave + ret + +#------------------------------------------------------------------------------ +# EFI_STATUS GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key); +#------------------------------------------------------------------------------ +.globl _GasketUgaGetKey +_GasketUgaGetKey: + pushl %ebp + movl %esp, %ebp + subl $40, %esp #sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaGetKey + leave + ret + + +#------------------------------------------------------------------------------ +# EFI_STATUS +# GasketUgaBlt( +# EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, +# IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, +# IN EFI_UGA_BLT_OPERATION BltOperation, +# IN UINTN SourceX, +# IN UINTN SourceY, +# IN UINTN DestinationX, +# IN UINTN DestinationY, +# IN UINTN Width, +# IN UINTN Height, +# IN UINTN Delta OPTIONAL +# ); +#------------------------------------------------------------------------------ +.globl _GasketUgaBlt +_GasketUgaBlt: + pushl %ebp + movl %esp, %ebp + subl $88, %esp #sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl $0, -12(%ebp) + movl 44(%ebp), %eax + movl %eax, 36(%esp) + movl 40(%ebp), %eax + movl %eax, 32(%esp) + movl 36(%ebp), %eax + movl %eax, 28(%esp) + movl 32(%ebp), %eax + movl %eax, 24(%esp) + movl 28(%ebp), %eax + movl %eax, 20(%esp) + movl 24(%ebp), %eax + movl %eax, 16(%esp) + movl 20(%ebp), %eax + movl %eax, 12(%esp) + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaBlt + leave + ret + + + |