From 6156fca14dcbab904c105d1d2972a4eed2f5288e Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Tue, 25 Aug 2009 07:39:51 +0000 Subject: 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 --- UnixPkg/Sec/Ia32/Gasket.S | 983 ++++++++++++++++++++++++++++++++++++++++++++++ UnixPkg/Sec/Stack.S | 92 ----- 2 files changed, 983 insertions(+), 92 deletions(-) create mode 100644 UnixPkg/Sec/Ia32/Gasket.S delete mode 100644 UnixPkg/Sec/Stack.S 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 +##include +# +#int chmod (int fd, mode_t len){ +# long m = (long)fd; +#} +# +#int Gasketchmod (int fd, mode_t len){ +# return chmod (fd, len); +#} +# +# gcc -S t.c +# cat t.s +# this gives you the starting point.... +# +# +#------------------------------------------------------------------------------ + +#include + + .text + +# +# +# EFI_UNIX_THUNK_PROTOCOL that gets exported +# +# + +#------------------------------------------------------------------------------ +# VOID GasketmsSleep (unsigned long Milliseconds); +#------------------------------------------------------------------------------ +.globl _GasketmsSleep +_GasketmsSleep: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _msSleep + leave + ret + + +#------------------------------------------------------------------------------ +# void Gasketexit (int status); +#------------------------------------------------------------------------------ +.globl _Gasketexit +_Gasketexit: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _exit + leave + ret + + +#------------------------------------------------------------------------------ +# void GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs)); +#------------------------------------------------------------------------------ +.globl _GasketSetTimer +_GasketSetTimer: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, -16(%ebp) + movl 12(%ebp), %eax + movl %eax, -12(%ebp) + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl -16(%ebp), %eax + movl -12(%ebp), %edx + movl %eax, (%esp) + movl %edx, 4(%esp) + call _SetTimer + leave + ret + + + +#------------------------------------------------------------------------------ +# void GasketGetLocalTime (EFI_TIME *Time); +#------------------------------------------------------------------------------ +.globl _GasketGetLocalTime +_GasketGetLocalTime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _GetLocalTime + leave + ret + + + +#------------------------------------------------------------------------------ +# struct tm *Gasketgmtime (const time_t *clock); +#------------------------------------------------------------------------------ +.globl _Gasketgmtime +_Gasketgmtime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _gmtime + leave + ret + + + + +#------------------------------------------------------------------------------ +# long GasketGetTimeZone(void); +#------------------------------------------------------------------------------ +.globl _GasketGetTimeZone +_GasketGetTimeZone: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetTimeZone + leave + ret + + +#------------------------------------------------------------------------------ +# int GasketGetDayLight (void); +#------------------------------------------------------------------------------ +.globl _GasketGetDayLight +_GasketGetDayLight: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetDayLight + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketpoll (struct pollfd *pfd, int nfds, int timeout); +#------------------------------------------------------------------------------ +.globl _Gasketpoll +_Gasketpoll: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _poll + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketread (int fd, void *buf, int count); +#------------------------------------------------------------------------------ +.globl _Gasketread +_Gasketread: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _read + leave + ret + + +#------------------------------------------------------------------------------ +# int Gasketwrite (int fd, const void *buf, int count); +#------------------------------------------------------------------------------ +.globl _Gasketwrite +_Gasketwrite: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _write + leave + ret + + + +#------------------------------------------------------------------------------ +# char *Gasketgetenv (const char *name); +#------------------------------------------------------------------------------ +.globl _Gasketgetenv +_Gasketgetenv: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _getenv + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketopen (const char *name, int flags, int mode); +#------------------------------------------------------------------------------ +.globl _Gasketopen +_Gasketopen: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 16(%ebp), %eax + movl %eax, 8(%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _open + leave + ret + + + +#------------------------------------------------------------------------------ +# off_t Gasketlseek (int fd, off_t off, int whence); +#------------------------------------------------------------------------------ +.globl _Gasketlseek +_Gasketlseek: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, -16(%ebp) + movl 16(%ebp), %eax + movl %eax, -12(%ebp) + movl 20(%ebp), %eax + movl %eax, 12(%esp) + movl -16(%ebp), %eax + movl -12(%ebp), %edx + movl %eax, 4(%esp) + movl %edx, 8(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _lseek + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketftruncate (int fd, long int len); +#------------------------------------------------------------------------------ +.globl _Gasketftruncate +_Gasketftruncate: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _truncate + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketclose (int fd); +#------------------------------------------------------------------------------ +.globl _Gasketclose +_Gasketclose: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _close + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketmkdir (const char *pathname, mode_t mode); +#------------------------------------------------------------------------------ +.globl _Gasketmkdir +_Gasketmkdir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _mkdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketrmdir (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketrmdir +_Gasketrmdir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rmdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketunlink (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketunlink +_Gasketunlink: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _unlink + leave + ret + + + +#------------------------------------------------------------------------------ +# int GasketGetErrno (void); +#------------------------------------------------------------------------------ +.globl _GasketGetErrno +_GasketGetErrno: + pushl %ebp + movl %esp, %ebp + subl $24, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + call _GetErrno + leave + ret + + + +#------------------------------------------------------------------------------ +# DIR *Gasketopendir (const char *pathname); +#------------------------------------------------------------------------------ +.globl _Gasketopendir +_Gasketopendir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _opendir + leave + ret + + + +#------------------------------------------------------------------------------ +# void *Gasketrewinddir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketrewinddir +_Gasketrewinddir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rewinddir + leave + ret + + + +#------------------------------------------------------------------------------ +# struct dirent *Gasketreaddir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketreaddir +_Gasketreaddir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _readdir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketclosedir (DIR *dir); +#------------------------------------------------------------------------------ +.globl _Gasketclosedir +_Gasketclosedir: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _closedir + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketstat (const char *path, struct stat *buf); +#------------------------------------------------------------------------------ +.globl _Gasketstat +_Gasketstat: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _stat + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketstatfs (const char *path, struct statfs *buf); +#------------------------------------------------------------------------------ +.globl _Gasketstatfs +_Gasketstatfs: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _statfs + leave + ret + + + + +#------------------------------------------------------------------------------ +# int Gasketrename (const char *oldpath, const char *newpath); +#------------------------------------------------------------------------------ +.globl _Gasketrename +_Gasketrename: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + + + +#------------------------------------------------------------------------------ +# time_t Gasketmktime (struct tm *tm); +#------------------------------------------------------------------------------ +.globl _Gasketmktime +_Gasketmktime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _mktime + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketfsync (int fd); +#------------------------------------------------------------------------------ +.globl _Gasketfsync +_Gasketfsync: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 8(%ebp), %eax + movl %eax, (%esp) + call _fsync + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gasketchmod (const char *path, mode_t mode); +#------------------------------------------------------------------------------ +.globl _Gasketchmod +_Gasketchmod: + pushl %ebp + movl %esp, %ebp + subl $56, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movw %ax, -12(%ebp) + movzwl -12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _chmod + leave + ret + +#------------------------------------------------------------------------------ +# int Gasketutime (const char *filename, const struct utimbuf *buf); +#------------------------------------------------------------------------------ +.globl _Gasketutime +_Gasketutime: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + + +#------------------------------------------------------------------------------ +# int Gaskettcflush (int fildes, int queue_selector); +#------------------------------------------------------------------------------ +.globl _Gaskettcflush +_Gaskettcflush: + pushl %ebp + movl %esp, %ebp + subl $40, %esp # sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _rename + leave + ret + + +#------------------------------------------------------------------------------ +# EFI_STATUS UgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title); +#------------------------------------------------------------------------------ +.globl _GasketUgaCreate +_GasketUgaCreate: + pushl %ebp + movl %esp, %ebp + subl $40, %esp #sub extra 0x10 from the stack for the AND + and $-16, %esp # stack needs to end in 0xFFFFFFF0 before call + movl 12(%ebp), %eax + movl %eax, 4(%esp) + movl 8(%ebp), %eax + movl %eax, (%esp) + call _UgaCreate + 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 - -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 -- cgit v1.2.3