summaryrefslogtreecommitdiff
path: root/UnixPkg
diff options
context:
space:
mode:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2009-08-25 07:39:51 +0000
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2009-08-25 07:39:51 +0000
commit6156fca14dcbab904c105d1d2972a4eed2f5288e (patch)
treefac39ed1cb9218bc53d6678825884137368cc089 /UnixPkg
parentccd55824e79865a04b1c872bda4af0f1de1f50be (diff)
downloadedk2-platforms-6156fca14dcbab904c105d1d2972a4eed2f5288e.tar.xz
Add Sec/Ia32/Gasket.S
Remove unreferenced Stack.S git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9195 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'UnixPkg')
-rw-r--r--UnixPkg/Sec/Ia32/Gasket.S983
-rw-r--r--UnixPkg/Sec/Stack.S92
2 files changed, 983 insertions, 92 deletions
diff --git a/UnixPkg/Sec/Ia32/Gasket.S b/UnixPkg/Sec/Ia32/Gasket.S
new file mode 100644
index 0000000000..80d033675c
--- /dev/null
+++ b/UnixPkg/Sec/Ia32/Gasket.S
@@ -0,0 +1,983 @@
+#------------------------------------------------------------------------------
+#
+# 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
+
diff --git a/UnixPkg/Sec/Stack.S b/UnixPkg/Sec/Stack.S
deleted file mode 100644
index ae9fe9ba9e..0000000000
--- a/UnixPkg/Sec/Stack.S
+++ /dev/null
@@ -1,92 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2008, Intel Corporation
-# 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.
-#
-# Module Name:
-#
-# Stack.asm
-#
-# Abstract:
-#
-# Switch the stack from temporary memory to permenent memory.
-#
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# SecSwitchStack (
-# UINT32 TemporaryMemoryBase,
-# UINT32 PermenentMemoryBase
-# );
-#------------------------------------------------------------------------------
-
-#include <ProcessorBind.h>
-
-ASM_GLOBAL ASM_PFX(SecSwitchStack)
-ASM_PFX(SecSwitchStack):
-#
-# Save three register: eax, ebx, ecx
-#
- push %eax
- push %ebx
- push %ecx
- push %edx
-
-#
-# !!CAUTION!! this function address's is pushed into stack after
-# migration of whole temporary memory, so need save it to permenent
-# memory at first!
-#
-
- movl 20(%esp), %ebx # Save the first parameter
- movl 24(%esp), %ecx # Save the second parameter
-
-#
-# Save this function's return address into permenent memory at first.
-# Then, Fixup the esp point to permenent memory
-#
-
- movl %esp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl (%esp), %edx # copy pushed register's value to permenent memory
- movl %edx, (%eax)
- movl 4(%esp), %edx
- movl %edx, 4(%eax)
- movl 8(%esp), %edx
- movl %edx, 8(%eax)
- movl 12(%esp), %edx
- movl %edx, 12(%eax)
- movl 16(%esp), %edx
- movl %edx, 16(%eax)
- movl %eax, %esp # From now, esp is pointed to permenent memory
-
-#
-# Fixup the ebp point to permenent memory
-#
- movl %ebp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl %eax, %ebp # From now, ebp is pointed to permenent memory
-
-#
-# Fixup callee's ebp point for PeiDispatch
-#
- movl (%ebp), %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl %eax, (%ebp) # From now, Temporary's PPI caller's stack is in permenent memory
-
- pop %edx
- pop %ecx
- pop %ebx
- pop %eax
- ret