audk/UnixPkg/Sec/Ia32/Gasket.S

984 lines
29 KiB
ArmAsm

#------------------------------------------------------------------------------
#
# 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:
#
# 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 <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 -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 %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
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