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:
AJFISH
2009-12-06 02:00:37 +00:00
parent 2ef2b01e07
commit 7ee3b61338
27 changed files with 2581 additions and 1126 deletions

418
UnixPkg/Sec/Gasket.c Normal file
View 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
View 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

View 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);
}

View File

@@ -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());
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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

File diff suppressed because it is too large Load Diff