From 7ee3b61338de1fa592227c719eca20f7813ea606 Mon Sep 17 00:00:00 2001 From: AJFISH Date: Sun, 6 Dec 2009 02:00:37 +0000 Subject: 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 --- UnixPkg/Sec/Ia32/Gasket.S | 1128 ++++++++------------------------------------- 1 file changed, 191 insertions(+), 937 deletions(-) (limited to 'UnixPkg/Sec/Ia32/Gasket.S') diff --git a/UnixPkg/Sec/Ia32/Gasket.S b/UnixPkg/Sec/Ia32/Gasket.S index 80d033675c..77e8296b0b 100644 --- a/UnixPkg/Sec/Ia32/Gasket.S +++ b/UnixPkg/Sec/Ia32/Gasket.S @@ -1,5 +1,21 @@ #------------------------------------------------------------------------------ # +# OS X Application requires 16 byte stack alignment. The problem is these +# APIs are exposed to code that does not have this requirement via +# EFI_UNIX_THUNK_PROTOCOL. So these are wrapper functions that make sure +# the stack is aligned. This code should also work if the stack is already +# aligned. Extra stack padding is really the same as local varaibles so +# it gets freed by the leave instruction +# +# I basically used the compiler, added extra 16 bytes to the local stack and +# made sure %esp ended in 0 before the call (16 byte algined) +# +# The EFI_UNIX_THUNK_PROTOCOL member functions call a C API that then calls +# one of these generic assembly routines. We do it that way to work around +# some magic name changing that happens in C. For example stat() is _stat() +# on Leopard and _stat$INDOE64 on Snow Leopard. That is why we pass stat() +# into one of these gaskets from C code. +# # 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 @@ -9,975 +25,213 @@ # 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: -# -# OS X Application requires 16 byte stack alignment. The problem is these -# APIs are exposed to code that does not have this requirement via -# EFI_UNIX_THUNK_PROTOCOL. So these are wrapper functions that make sure -# the stack is aligned. This code should also work if the stack is already -# aligned. Extra stack padding is really the same as local varaibles so -# it gets freed by the leave instruction -# -# I basically used the compiler, added extra 16 bytes to the local stack and -# made sure %esp ended in 0 before the call (16 byte algined) -# -# cat t.c -##include -##include -# -#int chmod (int fd, mode_t len){ -# long m = (long)fd; -#} -# -#int Gasketchmod (int fd, mode_t len){ -# return chmod (fd, len); -#} -# -# gcc -S t.c -# cat t.s -# this gives you the starting point.... -# -# #------------------------------------------------------------------------------ -#include - .text - -# -# -# EFI_UNIX_THUNK_PROTOCOL that gets exported -# -# - -#------------------------------------------------------------------------------ -# VOID GasketmsSleep (unsigned long Milliseconds); -#------------------------------------------------------------------------------ -.globl _GasketmsSleep -_GasketmsSleep: - 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 _msSleep - 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 +# int GasketVoid (void *api) +#------------------------------------------------------------------------------ +.globl _GasketVoid +_GasketVoid: + pushl %ebp + movl %esp, %ebp + subl $34, %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, -12(%ebp) + movl -12(%ebp), %eax + call *%eax 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 - +.globl _GasketUintn +_GasketUintn: + pushl %ebp + movl %esp, %ebp + subl $50, %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, -12(%ebp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + 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 +.globl _GasketUintnUintn +_GasketUintnUintn: + pushl %ebp + movl %esp, %ebp + subl $50, %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, -12(%ebp) + movl 16(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + 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 +.globl _GasketUintnUintnUintn +_GasketUintnUintnUintn: + pushl %ebp + movl %esp, %ebp + subl $50, %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, -12(%ebp) + movl 20(%ebp), %eax + movl %eax, 8(%esp) + movl 16(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + 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 - +.globl _GasketUintnUintnUintnUintn +_GasketUintnUintnUintnUintn: + pushl %ebp + movl %esp, %ebp + subl $50, %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, -12(%ebp) + movl 24(%ebp), %eax + movl %eax, 12(%esp) + movl 20(%ebp), %eax + movl %eax, 8(%esp) + movl 16(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + 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 -# -# +.globl _GasketUintn10Args +_GasketUintn10Args: + pushl %ebp + movl %esp, %ebp + subl $82, %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, -12(%ebp) + movl 48(%ebp), %eax + movl %eax, 36(%esp) + movl 44(%ebp), %eax + movl %eax, 32(%esp) + movl 40(%ebp), %eax + movl %eax, 28(%esp) + movl 36(%ebp), %eax + movl %eax, 24(%esp) + movl 32(%ebp), %eax + movl %eax, 20(%esp) + movl 28(%ebp), %eax + movl %eax, 16(%esp) + movl 24(%ebp), %eax + movl %eax, 12(%esp) + movl 20(%ebp), %eax + movl %eax, 8(%esp) + movl 16(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + leave + ret -#------------------------------------------------------------------------------ -# 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 +.globl _GasketUint64Uintn +_GasketUint64Uintn: + pushl %ebp + movl %esp, %ebp + subl $66, %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, -32(%ebp) + movl 16(%ebp), %eax + movl %eax, -28(%ebp) + movl 8(%ebp), %eax + movl %eax, -12(%ebp) + movl 20(%ebp), %eax + movl %eax, 8(%esp) + movl -32(%ebp), %eax + movl -28(%ebp), %edx + movl %eax, (%esp) + movl %edx, 4(%esp) + movl -12(%ebp), %eax + call *%eax + 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 +.globl _GasketUintnUint64Uintn +_GasketUintnUint64Uintn: + pushl %ebp + movl %esp, %ebp + subl $66, %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, -32(%ebp) + movl 20(%ebp), %eax + movl %eax, -28(%ebp) + movl 8(%ebp), %eax + movl %eax, -12(%ebp) + movl 24(%ebp), %eax + movl %eax, 12(%esp) + movl -32(%ebp), %eax + movl -28(%ebp), %edx + movl %eax, 4(%esp) + movl %edx, 8(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax 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 +.globl _GasketUintnUint16 +_GasketUintnUint16: + pushl %ebp + movl %esp, %ebp + subl $66, %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 + movw %ax, -28(%ebp) + movl 8(%ebp), %eax + movl %eax, -12(%ebp) + movzwl -28(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + movl -12(%ebp), %eax + call *%eax + leave + ret + .subsections_via_symbols -- cgit v1.2.3