summaryrefslogtreecommitdiffstats
path: root/UnixPkg/Sec
diff options
context:
space:
mode:
authorAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>2009-12-06 02:00:37 +0000
committerAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>2009-12-06 02:00:37 +0000
commit7ee3b61338de1fa592227c719eca20f7813ea606 (patch)
tree057ca20e53d6384346f3e61114e450eb9bd1bc9c /UnixPkg/Sec
parent2ef2b01e07c02db339f34004445734a2dbdd80e1 (diff)
downloadedk2-7ee3b61338de1fa592227c719eca20f7813ea606.tar.gz
edk2-7ee3b61338de1fa592227c719eca20f7813ea606.tar.bz2
edk2-7ee3b61338de1fa592227c719eca20f7813ea606.zip
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')
-rw-r--r--UnixPkg/Sec/Gasket.c418
-rw-r--r--UnixPkg/Sec/Gasket.h141
-rw-r--r--UnixPkg/Sec/Ia32/Gasket.S1128
-rw-r--r--UnixPkg/Sec/Ia32/GasketTemplate.c142
-rw-r--r--UnixPkg/Sec/SecMain.c35
-rw-r--r--UnixPkg/Sec/SecMain.h37
-rw-r--r--UnixPkg/Sec/SecMain.inf4
-rw-r--r--UnixPkg/Sec/UgaX11.c33
-rw-r--r--UnixPkg/Sec/UnixThunk.c74
-rw-r--r--UnixPkg/Sec/X64/Gasket.S1026
10 files changed, 1980 insertions, 1058 deletions
diff --git a/UnixPkg/Sec/Gasket.c b/UnixPkg/Sec/Gasket.c
new file mode 100644
index 0000000000..30f06a2479
--- /dev/null
+++ b/UnixPkg/Sec/Gasket.c
@@ -0,0 +1,418 @@
+
+#include "SecMain.h"
+#include "Gasket.h"
+
+//
+// Gasket functions for EFI_UNIX_THUNK_PROTOCOL
+//
+
+void
+GasketmsSleep (unsigned long Milliseconds)
+{
+ GasketUintn (msSleep, Milliseconds);
+ return;
+}
+
+void
+Gasketexit (int status)
+{
+ GasketUintn (exit, status);
+ return;
+}
+
+
+void
+GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs))
+{
+ GasketUint64Uintn (SetTimer, PeriodMs, (UINTN)CallBack);
+ return;
+}
+
+
+void
+GasketGetLocalTime (EFI_TIME *Time)
+{
+ GasketUintn (GetLocalTime, (UINTN)Time);
+ return;
+}
+
+
+struct tm *
+Gasketgmtime (const time_t *clock)
+{
+ return (struct tm *)(UINTN)GasketUintn (localtime, (UINTN)clock);
+}
+
+
+long
+GasketGetTimeZone (void)
+{
+ return GasketVoid (GetTimeZone);
+}
+
+
+int
+GasketGetDayLight (void)
+{
+ return GasketVoid (GetDayLight);
+}
+
+
+int
+Gasketpoll (struct pollfd *pfd, int nfds, int timeout)
+{
+ return GasketUintnUintnUintn (poll, (UINTN)pfd, nfds, timeout);
+}
+
+
+int
+Gasketread (int fd, void *buf, int count)
+{
+ return GasketUintnUintnUintn (read, fd, (UINTN)buf, count);
+}
+
+
+int
+Gasketwrite (int fd, const void *buf, int count)
+{
+ return GasketUintnUintnUintn (write, fd, (UINTN)buf, count);
+}
+
+
+char *
+Gasketgetenv (const char *name)
+{
+ return (char *)(UINTN)GasketUintn (getenv, (UINTN)name);
+}
+
+
+int
+Gasketopen (const char *name, int flags, int mode)
+{
+ return GasketUintnUintnUintn (open, (UINTN)name, flags, mode);
+}
+
+
+off_t
+Gasketlseek (int fd, off_t off, int whence)
+{
+ if (sizeof off == 8) {
+ return GasketUintnUint64Uintn (lseek, fd, off, whence);
+ } else if (sizeof off == 4) {
+ return GasketUintnUintnUintn (lseek, fd, off, whence);
+ }
+}
+
+
+int
+Gasketftruncate (int fd, long int len)
+{
+ return GasketUintnUintn (ftruncate, fd, len);
+}
+
+
+int
+Gasketclose (int fd)
+{
+ return GasketUintn (close, fd);
+}
+
+
+int
+Gasketmkdir (const char *pathname, mode_t mode)
+{
+ return GasketUintnUint16 (mkdir, (UINTN)pathname, mode);
+}
+
+
+int
+Gasketrmdir (const char *pathname)
+{
+ return GasketUintn (rmdir, (UINTN)pathname);
+}
+
+
+int
+Gasketunlink (const char *pathname)
+{
+ return GasketUintn (unlink, (UINTN)pathname);
+}
+
+
+int
+GasketGetErrno (void)
+{
+ return GasketVoid (GetErrno);
+}
+
+
+DIR *
+Gasketopendir (const char *pathname)
+{
+ return (DIR *)(UINTN)GasketUintn (opendir, (UINTN)pathname);
+}
+
+
+void *
+Gasketrewinddir (DIR *dir)
+{
+ return (void *)(UINTN)GasketUintn (rewinddir, (UINTN)dir);
+}
+
+
+struct dirent *
+Gasketreaddir (DIR *dir)
+{
+ return (struct dirent *)(UINTN)GasketUintn (readdir, (UINTN)dir);
+}
+
+
+int
+Gasketclosedir (DIR *dir)
+{
+ return GasketUintn (closedir, (UINTN)dir);
+}
+
+
+int
+Gasketstat (const char *path, STAT_FIX *buf)
+{
+ return GasketUintnUintn (stat, (UINTN)path, (UINTN)buf);
+}
+
+
+int
+Gasketstatfs (const char *path, struct statfs *buf)
+{
+ return GasketUintnUintn (statfs, (UINTN)path, (UINTN)buf);
+}
+
+
+int
+Gasketrename (const char *oldpath, const char *newpath)
+{
+ return GasketUintnUintn (rename, (UINTN)oldpath, (UINTN)newpath);
+}
+
+
+time_t
+Gasketmktime (struct tm *tm)
+{
+ return GasketUintn (mktime, (UINTN)tm);
+}
+
+
+int
+Gasketfsync (int fd)
+{
+ return GasketUintn (fsync, fd);
+}
+
+
+int
+Gasketchmod (const char *path, mode_t mode)
+{
+ return GasketUintnUint16 (chmod, (UINTN)path, mode);
+}
+
+
+int
+Gasketutime (const char *filename, const struct utimbuf *buf)
+{
+ return GasketUintnUintn (utime, (UINTN)filename, (UINTN)buf);
+}
+
+
+int
+Gaskettcflush (int fildes, int queue_selector)
+{
+ return GasketUintnUintn (tcflush, fildes, queue_selector);
+}
+
+
+EFI_STATUS
+GasketUgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title)
+{
+ return GasketUintnUintn (UgaCreate, (UINTN)UgaIo, (UINTN)Title);
+}
+
+
+void
+Gasketperror (__const char *__s)
+{
+ GasketUintn (perror, (UINTN)__s);
+ return;
+}
+
+
+
+//
+// ... is always an int or pointer to device specific data structure
+//
+int
+Gasketioctl (int fd, unsigned long int __request, ...)
+{
+ VA_LIST Marker;
+
+ VA_START (Marker, __request);
+ return GasketUintnUintnUintn (ioctl, fd, __request, VA_ARG (Marker, UINTN));
+}
+
+
+int
+Gasketfcntl (int __fd, int __cmd, ...)
+{
+ VA_LIST Marker;
+
+ VA_START (Marker, __cmd);
+ return GasketUintnUintnUintn (fcntl, __fd, __cmd, VA_ARG (Marker, UINTN));
+}
+
+
+
+int
+Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed)
+{
+ return GasketUintnUintn (cfsetispeed, (UINTN)__termios_p, __speed);
+}
+
+
+int
+Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed)
+{
+ return GasketUintnUintn (cfsetospeed, (UINTN)__termios_p, __speed);
+}
+
+
+int
+Gaskettcgetattr (int __fd, struct termios *__termios_p)
+{
+ return GasketUintnUintn (tcgetattr, __fd, (UINTN)__termios_p);
+}
+
+
+int
+Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p)
+{
+ return GasketUintnUintnUintn (tcsetattr, __fd, __optional_actions, (UINTN)__termios_p);
+}
+
+
+int
+Gasketsigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+{
+ return GasketUintnUintn (sigaction, (UINTN)act, (UINTN)oact);
+}
+
+
+int
+Gasketsetcontext (const ucontext_t *ucp)
+{
+ return GasketUintn (setcontext, (UINTN)ucp);
+}
+
+
+int
+Gasketgetcontext (ucontext_t *ucp)
+{
+ return GasketUintn (getcontext, (UINTN)ucp);
+}
+
+
+int
+Gasketsigemptyset (sigset_t *set)
+{
+ return GasketUintn (sigemptyset, (UINTN)set);
+}
+
+
+int
+Gasketsigaltstack (const stack_t *ss, stack_t *oss)
+{
+ return GasketUintnUintn (sigaltstack, (UINTN)ss, (UINTN)oss);
+}
+
+
+
+RETURN_STATUS
+GasketUnixPeCoffGetEntryPoint (
+ IN VOID *Pe32Data,
+ IN OUT VOID **EntryPoint
+ )
+{
+ return GasketUintnUintn (SecPeCoffGetEntryPoint, (UINTN)Pe32Data, (UINTN)EntryPoint);
+}
+
+
+
+VOID
+GasketUnixPeCoffRelocateImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ )
+{
+ GasketUintn (SecPeCoffRelocateImageExtraAction, (UINTN)ImageContext);
+ return;
+}
+
+
+
+VOID
+GasketPeCoffLoaderUnloadImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ )
+{
+ GasketUintn (SecPeCoffLoaderUnloadImageExtraAction, (UINTN)ImageContext);
+ return;
+}
+
+
+//
+// Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
+//
+
+EFI_STATUS
+EFIAPI
+GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
+{
+ return GasketUintn (UgaClose, (UINTN)UgaIo);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height)
+{
+ return GasketUintnUintnUintn (UgaSize, (UINTN)UgaIo, Width, Height);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
+{
+ return GasketUintn (UgaCheckKey, (UINTN)UgaIo);
+}
+
+EFI_STATUS
+EFIAPI
+GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key)
+{
+ return GasketUintnUintn (UgaGetKey, (UINTN)UgaIo, (UINTN)key);
+}
+
+EFI_STATUS
+EFIAPI
+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
+ )
+{
+ return GasketUintn10Args (UgaBlt, (UINTN)UgaIo, (UINTN)BltBuffer, BltOperation, SourceX, SourceY, DestinationX, DestinationY, Width, Height, Delta);
+}
+
diff --git a/UnixPkg/Sec/Gasket.h b/UnixPkg/Sec/Gasket.h
new file mode 100644
index 0000000000..8343de7feb
--- /dev/null
+++ b/UnixPkg/Sec/Gasket.h
@@ -0,0 +1,141 @@
+
+#ifndef _GASKET_H_
+#define _GASKET_H_
+
+#include <Library/PeCoffLib.h>
+
+#include <Protocol/UgaDraw.h>
+#include <Protocol/SimpleTextIn.h>
+#include <Protocol/UnixUgaIo.h>
+
+
+//
+// Gasket functions for EFI_UNIX_THUNK_PROTOCOL
+//
+
+void GasketmsSleep (unsigned long Milliseconds);
+void Gasketexit (int status);
+void GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs));
+void GasketGetLocalTime (EFI_TIME *Time);
+struct tm *Gasketgmtime (const time_t *clock);
+long GasketGetTimeZone (void);
+int GasketGetDayLight (void);
+int Gasketpoll (struct pollfd *pfd, int nfds, int timeout);
+int Gasketread (int fd, void *buf, int count);
+int Gasketwrite (int fd, const void *buf, int count);
+char *Gasketgetenv (const char *name);
+int Gasketopen (const char *name, int flags, int mode);
+off_t Gasketlseek (int fd, off_t off, int whence);
+int Gasketftruncate (int fd, long int len);
+int Gasketclose (int fd);
+int Gasketmkdir (const char *pathname, mode_t mode);
+int Gasketrmdir (const char *pathname);
+int Gasketunlink (const char *pathname);
+int GasketGetErrno (void);
+DIR *Gasketopendir (const char *pathname);
+void *Gasketrewinddir (DIR *dir);
+struct dirent *Gasketreaddir (DIR *dir);
+int Gasketclosedir (DIR *dir);
+int Gasketstat (const char *path, STAT_FIX *buf);
+int Gasketstatfs (const char *path, struct statfs *buf);
+int Gasketrename (const char *oldpath, const char *newpath);
+time_t Gasketmktime (struct tm *tm);
+int Gasketfsync (int fd);
+int Gasketchmod (const char *path, mode_t mode);
+int Gasketutime (const char *filename, const struct utimbuf *buf);
+int Gaskettcflush (int fildes, int queue_selector);
+EFI_STATUS GasketUgaCreate(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title);
+void Gasketperror (__const char *__s);
+
+//
+// ... is always an int or pointer to device specific data structure
+//
+int Gasketioctl (int fd, unsigned long int __request, ...);
+int Gasketfcntl (int __fd, int __cmd, ...);
+
+int Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed);
+int Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed);
+int Gaskettcgetattr (int __fd, struct termios *__termios_p);
+int Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p);
+int Gasketsigaction (int sig, const struct sigaction *act, struct sigaction *oact);
+int Gasketsetcontext (const ucontext_t *ucp);
+int Gasketgetcontext (ucontext_t *ucp);
+int Gasketsigemptyset (sigset_t *set);
+int Gasketsigaltstack (const stack_t *ss, stack_t *oss);
+
+RETURN_STATUS
+GasketUnixPeCoffGetEntryPoint (
+ IN VOID *Pe32Data,
+ IN OUT VOID **EntryPoint
+ );
+
+VOID
+GasketUnixPeCoffRelocateImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ );
+
+VOID
+GasketPeCoffLoaderUnloadImageExtraAction (
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
+ );
+
+
+int GasketVoid (void *api);
+int GasketUintn (void *api, UINTN a);
+int GasketUintnUintn (void *api, UINTN a, UINTN b);
+int GasketUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c);
+int GasketUintnUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c, UINTN d);
+int GasketUintn10Args (void *api, UINTN a, UINTN b, UINTN c, UINTN d, UINTN e, UINTN f, UINTN g, UINTN h, UINTN i, UINTN j);
+int GasketUint64Uintn (void *api, UINT64 a, UINTN b);
+UINT64 GasketUintnUint64Uintn (void *api, UINTN a, UINT64 b, UINTN c);
+int GasketUintnUint16 (void *api, UINTN a, UINT16 b);
+
+
+//
+// Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
+//
+
+EFI_STATUS EFIAPI GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo);
+EFI_STATUS EFIAPI GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height);
+EFI_STATUS EFIAPI GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo);
+EFI_STATUS EFIAPI GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key);
+EFI_STATUS EFIAPI 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
+ );
+
+EFI_STATUS UgaCreate (EFI_UNIX_UGA_IO_PROTOCOL **Uga, CONST CHAR16 *Title);
+
+
+//
+// Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
+//
+EFI_STATUS UgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo);
+EFI_STATUS UgaSize(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height);
+EFI_STATUS UgaCheckKey(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo);
+EFI_STATUS UgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key);
+EFI_STATUS UgaBlt (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
+ );
+
+
+
+#endif
+
+
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 <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
+# 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
diff --git a/UnixPkg/Sec/Ia32/GasketTemplate.c b/UnixPkg/Sec/Ia32/GasketTemplate.c
new file mode 100644
index 0000000000..3b88135a58
--- /dev/null
+++ b/UnixPkg/Sec/Ia32/GasketTemplate.c
@@ -0,0 +1,142 @@
+/** @file
+ Template file used to create Gasket.S
+
+ This file is built on the command line via gcc GasketTemplate.c -S
+ and it will create GasketTemplate.s and this was used to create
+ Gasket.S. You still have to add the extra stack alignment code to
+ the assembly functions.
+
+Copyright (c) 2006 - 2009, Intel Corporation<BR>
+Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>
+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.
+
+**/
+
+
+#include <stdint.h>
+#include <sys/stat.h>
+
+typedef int8_t INT8;
+typedef uint8_t UINT8;
+typedef int16_t INT16;
+typedef uint16_t UINT16;
+typedef int32_t INT32;
+typedef uint32_t UINT32;
+typedef int64_t INT64;
+typedef uint64_t UINT64;
+typedef UINT32 UINTN;
+
+
+typedef int (*GASKET_VOID) ();
+typedef int (*GASKET_UINTN) (UINTN);
+typedef int (*GASKET_UINTN_UINTN) (UINTN, UINTN);
+typedef int (*GASKET_UINTN_UINTN_UINTN) (UINTN, UINTN, UINTN);
+typedef int (*GASKET_UINTN_UINTN_UINTN_UINTN) (UINTN, UINTN, UINTN, UINTN);
+typedef int (*GASKET_UINTN_10ARGS) (UINTN, UINTN, UINTN, UINTN, UINTN, UINTN, UINTN, UINTN, UINTN, UINTN);
+typedef int (*GASKET_UINT64_UINTN) (UINT64, UINTN);
+typedef UINT64 (*GASKET_UINTN_UINT64_UINTN) (UINTN, UINT64, UINTN);
+typedef int (*GASKET_UINTN_UINT16) (UINTN, UINT16);
+
+int GasketVoid (void *api);
+int GasketUintn (void *api, UINTN a);
+int GasketUintnUintn (void *api, UINTN a, UINTN b);
+int GasketUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c);
+int GasketUintnUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c, UINTN d);
+int GasketUintn10Args (void *api, UINTN a, UINTN b, UINTN c, UINTN d, UINTN e, UINTN f, UINTN g, UINTN h, UINTN i, UINTN j);
+int GasketUint64Uintn (void *api, UINT64 a, UINTN b);
+UINT64 GasketUintnUiny64Uintn (void *api, UINTN a, UINT64 b, UINTN c);
+int GasketUintnUint16 (void *api, UINTN a, UINT16 b);
+
+
+
+int
+GasketVoid (void *api)
+{
+ GASKET_VOID func;
+
+ func = (GASKET_VOID)api;
+ return func ();
+}
+
+int
+GasketUintn (void *api, UINTN a)
+{
+ GASKET_UINTN func;
+
+ func = (GASKET_UINTN)api;
+ return func (a);
+}
+
+int
+GasketUintnUintn (void *api, UINTN a, UINTN b)
+{
+ GASKET_UINTN_UINTN func;
+
+ func = (GASKET_UINTN_UINTN)api;
+ return func (a, b);
+}
+
+
+int
+GasketUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c)
+{
+ GASKET_UINTN_UINTN_UINTN func;
+
+ func = (GASKET_UINTN_UINTN_UINTN)api;
+ return func (a, b, c);
+}
+
+int
+GasketUintnUintnUintnUintn (void *api, UINTN a, UINTN b, UINTN c, UINTN d)
+{
+ GASKET_UINTN_UINTN_UINTN_UINTN func;
+
+ func = (GASKET_UINTN_UINTN_UINTN_UINTN)api;
+ return func (a, b, c, d);
+}
+
+int
+GasketUintn10Args (void *api, UINTN a, UINTN b, UINTN c, UINTN d, UINTN e, UINTN f, UINTN g, UINTN h, UINTN i, UINTN j)
+{
+ GASKET_UINTN_10ARGS func;
+
+ func = (GASKET_UINTN_10ARGS)api;
+ return func (a, b, c, d, e, f, g, h, i, j);
+}
+
+
+int
+GasketUint64Uintn (void *api, UINT64 a, UINTN b)
+{
+ GASKET_UINT64_UINTN func;
+
+ func = (GASKET_UINT64_UINTN)api;
+ return func (a, b);
+}
+
+UINT64
+GasketUintnUiny64Uintn (void *api, UINTN a, UINT64 b, UINTN c)
+{
+ GASKET_UINTN_UINT64_UINTN func;
+
+ func = (GASKET_UINTN_UINT64_UINTN)api;
+ return func (a, b, c);
+}
+
+int
+GasketUintnUint16 (void *api, UINTN a, UINT16 b)
+{
+ GASKET_UINTN_UINT16 func;
+
+ func = (GASKET_UINTN_UINT16)api;
+ return func (a, b);
+}
+
+
+
diff --git a/UnixPkg/Sec/SecMain.c b/UnixPkg/Sec/SecMain.c
index 98a7a4db9d..da19a4b134 100644
--- a/UnixPkg/Sec/SecMain.c
+++ b/UnixPkg/Sec/SecMain.c
@@ -89,7 +89,6 @@ EFI_PEI_PPI_DESCRIPTOR gPrivateDispatchTable[] = {
&mSecTemporaryRamSupportPpi
},
{
-
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
&gUnixFwhPpiGuid,
&mSecFwhInformationPpi
@@ -142,6 +141,7 @@ MapFile (
IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,
OUT UINT64 *Length
);
+
EFI_STATUS
EFIAPI
SecNt32PeCoffRelocateImage (
@@ -200,7 +200,7 @@ Returns:
// symbols when we load every PE/COFF image.
//
Index = strlen (*Argv);
- gGdbWorkingFileName = malloc (Index + strlen(".gdb"));
+ gGdbWorkingFileName = malloc (Index + strlen(".gdb") + 1);
strcpy (gGdbWorkingFileName, *Argv);
strcat (gGdbWorkingFileName, ".gdb");
#endif
@@ -783,6 +783,12 @@ Returns:
if (EFI_ERROR (Status)) {
return Status;
}
+
+ Status = PeCoffLoaderRelocateImage (&ImageContext);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
SecPeCoffRelocateImageExtraAction (&ImageContext);
@@ -823,7 +829,8 @@ EFIAPI
SecUnixFdAddress (
IN UINTN Index,
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
- IN OUT UINT64 *FdSize
+ IN OUT UINT64 *FdSize,
+ IN OUT EFI_PHYSICAL_ADDRESS *FixUp
)
/*++
@@ -835,6 +842,7 @@ Arguments:
Index - Which FD, starts at zero.
FdSize - Size of the FD in bytes
FdBase - Start address of the FD. Assume it points to an FV Header
+ FixUp - Difference between actual FD address and build address
Returns:
EFI_SUCCESS - Return the Base address and size of the FV
@@ -848,11 +856,21 @@ Returns:
*FdBase = gFdInfo[Index].Address;
*FdSize = gFdInfo[Index].Size;
+ *FixUp = 0;
if (*FdBase == 0 && *FdSize == 0) {
return EFI_UNSUPPORTED;
}
+ if (Index == 0) {
+ //
+ // FD 0 has XIP code and well known PCD values
+ // If the memory buffer could not be allocated at the FD build address
+ // the Fixup is the difference.
+ //
+ *FixUp = *FdBase - FixedPcdGet32 (PcdUnixFdBaseAddress);
+ }
+
return EFI_SUCCESS;
}
@@ -1109,13 +1127,6 @@ SecPeCoffRelocateImageExtraAction (
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
)
{
- EFI_STATUS Status;
-
- Status = PeCoffLoaderRelocateImage (ImageContext);
- if (EFI_ERROR (Status)) {
- PrintLoadAddress (ImageContext);
- return;
- }
#ifdef __APPLE__
PrintLoadAddress (ImageContext);
@@ -1186,10 +1197,10 @@ SecPeCoffRelocateImageExtraAction (
(unsigned long)ImageContext->ImageAddress,
(unsigned long)ImageContext->EntryPoint);
- Handle = dlopen(ImageContext->PdbPointer, RTLD_NOW);
+ Handle = dlopen (ImageContext->PdbPointer, RTLD_NOW);
if (Handle) {
- Entry = dlsym(Handle, "_ModuleEntryPoint");
+ Entry = dlsym (Handle, "_ModuleEntryPoint");
} else {
printf("%s\n", dlerror());
}
diff --git a/UnixPkg/Sec/SecMain.h b/UnixPkg/Sec/SecMain.h
index c7a72c93a6..7a120f7a0a 100644
--- a/UnixPkg/Sec/SecMain.h
+++ b/UnixPkg/Sec/SecMain.h
@@ -157,9 +157,9 @@ EFI_STATUS
EFIAPI
SecPeiReportStatusCode (
IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
IN CONST EFI_GUID *CallerId,
IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
)
@@ -390,25 +390,9 @@ EFIAPI
SecUnixFdAddress (
IN UINTN Index,
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
- IN OUT UINT64 *FdSize
+ IN OUT UINT64 *FdSize,
+ IN OUT EFI_PHYSICAL_ADDRESS *FixUp
)
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- Index - TODO: add argument description
- FdBase - TODO: add argument description
- FdSize - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
;
EFI_STATUS
@@ -538,4 +522,15 @@ SecPeCoffLoaderUnloadImageExtraAction (
);
+
+VOID SetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs));
+void msSleep (unsigned long Milliseconds);
+void GetLocalTime (EFI_TIME *Time);
+void TzSet (void);
+long GetTimeZone(void);
+int GetDayLight(void);
+int GetErrno(void);
+
+
+
extern EFI_UNIX_THUNK_PROTOCOL *gUnix;
diff --git a/UnixPkg/Sec/SecMain.inf b/UnixPkg/Sec/SecMain.inf
index c7a9b40df7..b745faa16d 100644
--- a/UnixPkg/Sec/SecMain.inf
+++ b/UnixPkg/Sec/SecMain.inf
@@ -36,6 +36,7 @@
UnixThunk.c
FwVol.c
SecMain.c
+ Gasket.c
[Sources.Ia32]
Ia32/Gasket.S
@@ -71,6 +72,7 @@
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareVolume
gEfiUnixPkgTokenSpaceGuid.PcdUnixMemorySizeForSecMain
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareFdSize
+ gEfiUnixPkgTokenSpaceGuid.PcdUnixFdBaseAddress
[BuildOptions.common]
GCC:*_*_IA32_DLINK_FLAGS == -o $(BIN_DIR)/SecMain -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o -L/usr/X11R6/lib -lXext -lX11 /usr/lib/crtn.o
@@ -83,5 +85,5 @@
# Need to do this link via gcc and not ld as the pathing to libraries changes from OS version to OS version
#
XCODE:*_*_IA32_DLINK_PATH == gcc
- XCODE:*_*_IA32_DLINK_FLAGS == -arch i386 -L/usr/X11R6/lib -lXext -lX11 -lIOKit -framework Carbon
+ XCODE:*_*_IA32_DLINK_FLAGS == -arch i386 -o $(BIN_DIR)/SecMain -L/usr/X11R6/lib -lXext -lX11 -lIOKit -framework Carbon
XCODE:*_*_IA32_ASM_FLAGS == -arch i386 -g
diff --git a/UnixPkg/Sec/UgaX11.c b/UnixPkg/Sec/UgaX11.c
index 386e0bc145..2c2fb186b9 100644
--- a/UnixPkg/Sec/UgaX11.c
+++ b/UnixPkg/Sec/UgaX11.c
@@ -123,19 +123,17 @@ TryCreateShmImage(UGA_IO_PRIVATE *drv)
drv->xshm_info.shmid = shmget
(IPC_PRIVATE, drv->image->bytes_per_line * drv->image->height,
IPC_CREAT | 0777);
- if (drv->xshm_info.shmid < 0)
- {
- XDestroyImage(drv->image);
- return 0;
- }
+ if (drv->xshm_info.shmid < 0) {
+ XDestroyImage(drv->image);
+ return 0;
+ }
drv->image_data = shmat (drv->xshm_info.shmid, NULL, 0);
- if(!drv->image_data)
- {
- shmctl (drv->xshm_info.shmid, IPC_RMID, NULL);
- XDestroyImage(drv->image);
- return 0;
- }
+ if(!drv->image_data) {
+ shmctl (drv->xshm_info.shmid, IPC_RMID, NULL);
+ XDestroyImage(drv->image);
+ return 0;
+ }
#ifndef __APPLE__
//
@@ -149,12 +147,11 @@ TryCreateShmImage(UGA_IO_PRIVATE *drv)
drv->xshm_info.shmaddr = (char*)drv->image_data;
drv->image->data = (char*)drv->image_data;
- if (!XShmAttach (drv->display, &drv->xshm_info))
- {
- shmdt (drv->image_data);
- XDestroyImage(drv->image);
- return 0;
- }
+ if (!XShmAttach (drv->display, &drv->xshm_info)) {
+ shmdt (drv->image_data);
+ XDestroyImage(drv->image);
+ return 0;
+ }
return 1;
}
@@ -386,7 +383,7 @@ UgaCheckKey(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
}
EFI_STATUS
-UgaGetKey(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key)
+UgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key)
{
UGA_IO_PRIVATE *drv = (UGA_IO_PRIVATE *)UgaIo;
EFI_STATUS status;
diff --git a/UnixPkg/Sec/UnixThunk.c b/UnixPkg/Sec/UnixThunk.c
index 5dfba7a734..c0f35d0729 100644
--- a/UnixPkg/Sec/UnixThunk.c
+++ b/UnixPkg/Sec/UnixThunk.c
@@ -36,6 +36,10 @@ Abstract:
#include "Uefi.h"
#include "Library/UnixLib.h"
+#ifdef __APPLE__
+#include "Gasket.h"
+#endif
+
int settimer_initialized;
struct timeval settimer_timeval;
void (*settimer_callback)(UINT64 delta);
@@ -150,74 +154,6 @@ GetErrno(void)
return errno;
}
-#if __APPLE__
-void GasketmsSleep (unsigned long Milliseconds);
-void Gasketexit (int status);
-void GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs));
-void GasketGetLocalTime (EFI_TIME *Time);
-struct tm *Gasketgmtime (const time_t *clock);
-long GasketGetTimeZone (void);
-int GasketGetDayLight (void);
-int Gasketpoll (struct pollfd *pfd, int nfds, int timeout);
-int Gasketread (int fd, void *buf, int count);
-int Gasketwrite (int fd, const void *buf, int count);
-char *Gasketgetenv (const char *name);
-int Gasketopen (const char *name, int flags, int mode);
-off_t Gasketlseek (int fd, off_t off, int whence);
-int Gasketftruncate (int fd, long int len);
-int Gasketclose (int fd);
-int Gasketmkdir (const char *pathname, mode_t mode);
-int Gasketrmdir (const char *pathname);
-int Gasketunlink (const char *pathname);
-int GasketGetErrno (void);
-DIR *Gasketopendir (const char *pathname);
-void *Gasketrewinddir (DIR *dir);
-struct dirent *Gasketreaddir (DIR *dir);
-int Gasketclosedir (DIR *dir);
-int Gasketstat (const char *path, struct stat *buf);
-int Gasketstatfs (const char *path, struct statfs *buf);
-int Gasketrename (const char *oldpath, const char *newpath);
-time_t Gasketmktime (struct tm *tm);
-int Gasketfsync (int fd);
-int Gasketchmod (const char *path, mode_t mode);
-int Gasketutime (const char *filename, const struct utimbuf *buf);
-int Gaskettcflush (int fildes, int queue_selector);
-EFI_STATUS GasketUgaCreate(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title);
-void Gasketperror (__const char *__s);
-
-//
-// ... is always an int or pointer to device specific data structure
-//
-int Gasketioctl (int fd, unsigned long int __request, ...);
-int Gasketfcntl (int __fd, int __cmd, ...);
-
-int Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed);
-int Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed);
-int Gaskettcgetattr (int __fd, struct termios *__termios_p);
-int Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p);
-int Gasketsigaction (int sig, const struct sigaction *act, struct sigaction *oact);
-int Gasketsetcontext (const ucontext_t *ucp);
-int Gasketgetcontext (ucontext_t *ucp);
-int Gasketsigemptyset (sigset_t *set);
-int Gasketsigaltstack (const stack_t *ss, stack_t *oss);
-
-RETURN_STATUS
-GasketUnixPeCoffGetEntryPoint (
- IN VOID *Pe32Data,
- IN OUT VOID **EntryPoint
- );
-
-VOID
-GasketUnixPeCoffRelocateImageExtraAction (
- IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
- );
-
-VOID
-GasketPeCoffLoaderUnloadImageExtraAction (
- IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
- );
-
-#endif
extern EFI_STATUS
UgaCreate(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title);
@@ -303,7 +239,7 @@ EFI_UNIX_THUNK_PROTOCOL mUnixThunkTable = {
rewinddir,
readdir,
closedir,
- stat,
+ (UnixStat)stat,
statfs,
rename,
mktime,
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
+
+
+