mirror of https://github.com/acidanthera/audk.git
Changed the X64 gasket so it would be possible to port it to deal with the Unix to EFI ABI mangling. It still just does Unix ABI, and has some Xcode specific stuff to make source level debug a little easier, but it is a good first step.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10689 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
185969ed53
commit
ede7ec0bcd
|
@ -61,8 +61,6 @@ Abstract:
|
|||
#endif
|
||||
|
||||
#include <utime.h>
|
||||
#include <dlfcn.h>
|
||||
#include <ucontext.h>
|
||||
|
||||
#include <Base.h>
|
||||
#include <Library/PeCoffLib.h>
|
||||
|
|
|
@ -314,40 +314,6 @@ Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__ter
|
|||
}
|
||||
|
||||
|
||||
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
|
||||
|
|
|
@ -71,10 +71,6 @@ 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 (
|
||||
|
|
|
@ -34,9 +34,9 @@
|
|||
UnixThunk.c
|
||||
FwVol.c
|
||||
SecMain.c
|
||||
Gasket.c
|
||||
|
||||
[Sources.Ia32]
|
||||
Gasket.c
|
||||
Ia32/Gasket.S
|
||||
Ia32/Stack.S
|
||||
Ia32/SwitchStack.c
|
||||
|
@ -44,6 +44,10 @@
|
|||
[Sources.X64]
|
||||
X64/Gasket.S
|
||||
X64/SwitchStack.S
|
||||
X64/NameManglingFix.c
|
||||
|
||||
# Only used to help construct Gasket.S
|
||||
# X64/GasketEfiTemplate.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,419 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
|
||||
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 "SecMain.h"
|
||||
#include "Gasket.h"
|
||||
|
||||
//
|
||||
// OS X Posix does some strange name mangling on these names in C.
|
||||
// If you call from assembler you get the wrong version of the function
|
||||
// So these globals get you the correct name mangled functions that can
|
||||
// be accessed from assembly
|
||||
//
|
||||
extern UnixRmDir gUnixRmDir;
|
||||
extern UnixOpenDir gUnixOpenDir;
|
||||
extern UnixStat gUnixStat;
|
||||
extern UnixStatFs gUnixStatFs;
|
||||
|
||||
//
|
||||
// Gasket functions for EFI_UNIX_THUNK_PROTOCOL
|
||||
//
|
||||
|
||||
int
|
||||
Gasketrmdir (const char *pathname)
|
||||
{
|
||||
return gUnixRmDir (pathname);
|
||||
}
|
||||
|
||||
|
||||
DIR *
|
||||
Gasketopendir (const char *pathname)
|
||||
{
|
||||
return gUnixOpenDir (pathname);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketstat (const char *path, STAT_FIX *buf)
|
||||
{
|
||||
return gUnixStat (path, buf);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketstatfs (const char *path, struct statfs *buf)
|
||||
{
|
||||
return gUnixStatFs (path, buf);
|
||||
}
|
||||
|
||||
/////
|
||||
|
||||
|
||||
void
|
||||
GasketmsSleep (unsigned long Milliseconds)
|
||||
{
|
||||
msSleep (Milliseconds);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
Gasketexit (int status)
|
||||
{
|
||||
exit (status);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
GasketSetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs))
|
||||
{
|
||||
SetTimer (PeriodMs, CallBack);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
GasketGetLocalTime (EFI_TIME *Time)
|
||||
{
|
||||
GetLocalTime (Time);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
struct tm *
|
||||
Gasketgmtime (const time_t *clock)
|
||||
{
|
||||
return localtime (clock);
|
||||
}
|
||||
|
||||
|
||||
long
|
||||
GasketGetTimeZone (void)
|
||||
{
|
||||
return GetTimeZone ();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
GasketGetDayLight (void)
|
||||
{
|
||||
return GetDayLight ();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketpoll (struct pollfd *pfd, unsigned int nfds, int timeout)
|
||||
{
|
||||
return poll (pfd, nfds, timeout);
|
||||
}
|
||||
|
||||
|
||||
long
|
||||
Gasketread (int fd, void *buf, int count)
|
||||
{
|
||||
return read (fd, buf, count);
|
||||
}
|
||||
|
||||
|
||||
long
|
||||
Gasketwrite (int fd, const void *buf, int count)
|
||||
{
|
||||
return write (fd, buf, count);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
Gasketgetenv (const char *name)
|
||||
{
|
||||
return getenv (name);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketopen (const char *name, int flags, int mode)
|
||||
{
|
||||
return open (name, flags, mode);
|
||||
}
|
||||
|
||||
|
||||
off_t
|
||||
Gasketlseek (int fd, off_t off, int whence)
|
||||
{
|
||||
return lseek (fd, off, whence);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketftruncate (int fd, long int len)
|
||||
{
|
||||
return ftruncate (fd, len);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketclose (int fd)
|
||||
{
|
||||
return close (fd);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketmkdir (const char *pathname, mode_t mode)
|
||||
{
|
||||
return mkdir (pathname, mode);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketunlink (const char *pathname)
|
||||
{
|
||||
return unlink (pathname);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
GasketGetErrno (void)
|
||||
{
|
||||
return GetErrno ();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Gasketrewinddir (DIR *dir)
|
||||
{
|
||||
rewinddir (dir);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
struct dirent *
|
||||
Gasketreaddir (DIR *dir)
|
||||
{
|
||||
return readdir (dir);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketclosedir (DIR *dir)
|
||||
{
|
||||
return closedir (dir);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketrename (const char *oldpath, const char *newpath)
|
||||
{
|
||||
return rename (oldpath, newpath);
|
||||
}
|
||||
|
||||
|
||||
time_t
|
||||
Gasketmktime (struct tm *tm)
|
||||
{
|
||||
return mktime (tm);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketfsync (int fd)
|
||||
{
|
||||
return fsync (fd);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketchmod (const char *path, mode_t mode)
|
||||
{
|
||||
return chmod (path, mode);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketutime (const char *filename, const struct utimbuf *buf)
|
||||
{
|
||||
return utime (filename, buf);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gaskettcflush (int fildes, int queue_selector)
|
||||
{
|
||||
return tcflush (fildes, queue_selector);
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
GasketUgaCreate (struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title)
|
||||
{
|
||||
return UgaCreate (UgaIo, Title);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Gasketperror (__const char *__s)
|
||||
{
|
||||
perror (__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 ioctl (fd, __request, VA_ARG (Marker, UINTN));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketfcntl (int __fd, int __cmd, ...)
|
||||
{
|
||||
VA_LIST Marker;
|
||||
|
||||
VA_START (Marker, __cmd);
|
||||
return fcntl (__fd, __cmd, VA_ARG (Marker, UINTN));
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
Gasketcfsetispeed (struct termios *__termios_p, speed_t __speed)
|
||||
{
|
||||
return cfsetispeed (__termios_p, __speed);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gasketcfsetospeed (struct termios *__termios_p, speed_t __speed)
|
||||
{
|
||||
return cfsetospeed (__termios_p, __speed);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gaskettcgetattr (int __fd, struct termios *__termios_p)
|
||||
{
|
||||
return tcgetattr (__fd, __termios_p);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
Gaskettcsetattr (int __fd, int __optional_actions, __const struct termios *__termios_p)
|
||||
{
|
||||
return tcsetattr (__fd, __optional_actions, __termios_p);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
RETURN_STATUS
|
||||
GasketUnixPeCoffGetEntryPoint (
|
||||
IN VOID *Pe32Data,
|
||||
IN OUT VOID **EntryPoint
|
||||
)
|
||||
{
|
||||
return SecPeCoffGetEntryPoint (Pe32Data, EntryPoint);
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
GasketUnixPeCoffRelocateImageExtraAction (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
{
|
||||
SecPeCoffRelocateImageExtraAction (ImageContext);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
GasketUnixPeCoffUnloadImageExtraAction (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
{
|
||||
SecPeCoffLoaderUnloadImageExtraAction (ImageContext);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Gasket functions for EFI_UNIX_UGA_IO_PROTOCOL
|
||||
//
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GasketUgaClose (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
|
||||
{
|
||||
return UgaClose (UgaIo);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GasketUgaSize (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, UINT32 Width, UINT32 Height)
|
||||
{
|
||||
return UgaSize (UgaIo, Width, Height);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GasketUgaCheckKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
|
||||
{
|
||||
return UgaCheckKey (UgaIo);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GasketUgaGetKey (EFI_UNIX_UGA_IO_PROTOCOL *UgaIo, EFI_INPUT_KEY *key)
|
||||
{
|
||||
return UgaGetKey (UgaIo, 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 UgaBlt (UgaIo, BltBuffer, BltOperation, SourceX, SourceY, DestinationX, DestinationY, Width, Height, Delta);
|
||||
}
|
||||
|
||||
typedef void (*SET_TIMER_CALLBACK)(UINT64 delta);
|
||||
|
||||
|
||||
UINTN
|
||||
ReverseGasketUint64 (void *api, UINT64 a)
|
||||
{
|
||||
SET_TIMER_CALLBACK settimer_callback = (SET_TIMER_CALLBACK)api;
|
||||
|
||||
(*settimer_callback)(a);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
||||
|
||||
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 "SecMain.h"
|
||||
|
||||
//
|
||||
// OS X Posix does some strange name mangling on these names in C.
|
||||
// If you call from assembler you get the wrong version of the function
|
||||
// So these globals get you the correct name mangled functions that can
|
||||
// be accessed from assembly
|
||||
//
|
||||
UnixRmDir gUnixRmDir = rmdir;
|
||||
UnixOpenDir gUnixOpenDir = opendir;
|
||||
UnixStat gUnixStat = (UnixStat)stat;
|
||||
UnixStatFs gUnixStatFs = statfs;
|
||||
|
Loading…
Reference in New Issue