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
This commit is contained in:
418
UnixPkg/Sec/Gasket.c
Normal file
418
UnixPkg/Sec/Gasket.c
Normal file
@@ -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);
|
||||
}
|
||||
|
141
UnixPkg/Sec/Gasket.h
Normal file
141
UnixPkg/Sec/Gasket.h
Normal file
@@ -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
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
142
UnixPkg/Sec/Ia32/GasketTemplate.c
Normal file
142
UnixPkg/Sec/Ia32/GasketTemplate.c
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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());
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
|
1026
UnixPkg/Sec/X64/Gasket.S
Normal file
1026
UnixPkg/Sec/X64/Gasket.S
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user