mirror of https://github.com/acidanthera/audk.git
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:
parent
2ef2b01e07
commit
7ee3b61338
|
@ -0,0 +1,8 @@
|
|||
set confirm off
|
||||
set output-radix 16
|
||||
b SecGdbScriptBreak
|
||||
command
|
||||
silent
|
||||
source SecMain.gdb
|
||||
c
|
||||
end
|
|
@ -226,7 +226,7 @@ Returns:
|
|||
EFI_STATUS
|
||||
FvbGetVolumeAttributes (
|
||||
IN UINTN Instance,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN ESAL_FWB_GLOBAL *Global,
|
||||
IN BOOLEAN Virtual
|
||||
)
|
||||
|
@ -560,10 +560,10 @@ Returns:
|
|||
{
|
||||
|
||||
EFI_FVB_ATTRIBUTES_2 Attributes;
|
||||
UINTN LbaAddress;
|
||||
UINTN LbaLength;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Data;
|
||||
UINTN LbaAddress;
|
||||
UINTN LbaLength;
|
||||
EFI_STATUS Status;
|
||||
UINT8 Data;
|
||||
|
||||
//
|
||||
// Check if the FV is write enabled
|
||||
|
@ -596,7 +596,7 @@ Returns:
|
|||
EFI_STATUS
|
||||
FvbSetVolumeAttributes (
|
||||
IN UINTN Instance,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN ESAL_FWB_GLOBAL *Global,
|
||||
IN BOOLEAN Virtual
|
||||
)
|
||||
|
@ -629,10 +629,10 @@ Returns:
|
|||
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
|
||||
EFI_FVB_ATTRIBUTES_2 OldAttributes;
|
||||
EFI_FVB_ATTRIBUTES_2 *AttribPtr;
|
||||
UINT32 Capabilities;
|
||||
UINT32 OldStatus;
|
||||
UINT32 NewStatus;
|
||||
EFI_STATUS Status;
|
||||
UINT32 Capabilities;
|
||||
UINT32 OldStatus;
|
||||
UINT32 NewStatus;
|
||||
EFI_STATUS Status;
|
||||
EFI_FVB_ATTRIBUTES_2 UnchangedAttributes;
|
||||
|
||||
|
||||
|
@ -809,7 +809,7 @@ EFI_STATUS
|
|||
EFIAPI
|
||||
FvbProtocolGetAttributes (
|
||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
)
|
||||
/*++
|
||||
|
||||
|
@ -836,7 +836,7 @@ EFI_STATUS
|
|||
EFIAPI
|
||||
FvbProtocolSetAttributes (
|
||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
)
|
||||
/*++
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ FvbEraseBlock (
|
|||
EFI_STATUS
|
||||
FvbSetVolumeAttributes (
|
||||
IN UINTN Instance,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN ESAL_FWB_GLOBAL *Global,
|
||||
IN BOOLEAN Virtual
|
||||
)
|
||||
|
@ -111,7 +111,7 @@ FvbSetVolumeAttributes (
|
|||
EFI_STATUS
|
||||
FvbGetVolumeAttributes (
|
||||
IN UINTN Instance,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||
IN ESAL_FWB_GLOBAL *Global,
|
||||
IN BOOLEAN Virtual
|
||||
)
|
||||
|
@ -162,7 +162,7 @@ EFI_STATUS
|
|||
EFIAPI
|
||||
FvbProtocolGetAttributes (
|
||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
)
|
||||
;
|
||||
|
||||
|
@ -170,7 +170,7 @@ EFI_STATUS
|
|||
EFIAPI
|
||||
FvbProtocolSetAttributes (
|
||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
|
||||
)
|
||||
;
|
||||
|
||||
|
@ -178,7 +178,7 @@ EFI_STATUS
|
|||
EFIAPI
|
||||
FvbProtocolGetPhysicalAddress (
|
||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
||||
OUT EFI_PHYSICAL_ADDRESS *Address
|
||||
OUT EFI_PHYSICAL_ADDRESS *Address
|
||||
)
|
||||
;
|
||||
|
||||
|
|
|
@ -34,7 +34,8 @@ EFI_STATUS
|
|||
(EFIAPI *UNIX_FWH_INFORMATION) (
|
||||
IN UINTN Index,
|
||||
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
|
||||
IN OUT UINT64 *FdSize
|
||||
IN OUT UINT64 *FdSize,
|
||||
IN OUT EFI_PHYSICAL_ADDRESS *FixUp
|
||||
);
|
||||
|
||||
/*++
|
||||
|
@ -47,6 +48,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
|
||||
|
|
|
@ -62,11 +62,80 @@ Abstract:
|
|||
|
||||
#include <utime.h>
|
||||
#include <dlfcn.h>
|
||||
#include <ucontext.h>
|
||||
|
||||
#include <Base.h>
|
||||
#include <Library/PeCoffLib.h>
|
||||
|
||||
|
||||
#if __APPLE__
|
||||
//
|
||||
// EFI packing is not compatible witht he default OS packing for struct stat.
|
||||
// st_size is 64-bit but starts on a 32-bit offset in the structure. The compiler
|
||||
// flags used to produce compatible EFI images, break struct stat
|
||||
//
|
||||
#pragma pack(4)
|
||||
|
||||
#if __DARWIN_64_BIT_INO_T
|
||||
|
||||
typedef struct stat_fix { \
|
||||
dev_t st_dev; /* [XSI] ID of device containing file */
|
||||
mode_t st_mode; /* [XSI] Mode of file (see below) */
|
||||
nlink_t st_nlink; /* [XSI] Number of hard links */
|
||||
__darwin_ino64_t st_ino; /* [XSI] File serial number */
|
||||
uid_t st_uid; /* [XSI] User ID of the file */
|
||||
gid_t st_gid; /* [XSI] Group ID of the file */
|
||||
dev_t st_rdev; /* [XSI] Device ID */
|
||||
__DARWIN_STRUCT_STAT64_TIMES
|
||||
off_t st_size; /* [XSI] file size, in bytes */
|
||||
blkcnt_t st_blocks; /* [XSI] blocks allocated for file */
|
||||
blksize_t st_blksize; /* [XSI] optimal blocksize for I/O */
|
||||
__uint32_t st_flags; /* user defined flags for file */
|
||||
__uint32_t st_gen; /* file generation number */
|
||||
__int32_t st_lspare; /* RESERVED: DO NOT USE! */
|
||||
__int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
|
||||
} STAT_FIX;
|
||||
|
||||
#else /* !__DARWIN_64_BIT_INO_T */
|
||||
|
||||
typedef struct stat_fix {
|
||||
dev_t st_dev; /* [XSI] ID of device containing file */
|
||||
ino_t st_ino; /* [XSI] File serial number */
|
||||
mode_t st_mode; /* [XSI] Mode of file (see below) */
|
||||
nlink_t st_nlink; /* [XSI] Number of hard links */
|
||||
uid_t st_uid; /* [XSI] User ID of the file */
|
||||
gid_t st_gid; /* [XSI] Group ID of the file */
|
||||
dev_t st_rdev; /* [XSI] Device ID */
|
||||
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
|
||||
struct timespec st_atimespec; /* time of last access */
|
||||
struct timespec st_mtimespec; /* time of last data modification */
|
||||
struct timespec st_ctimespec; /* time of last status change */
|
||||
#else
|
||||
time_t st_atime; /* [XSI] Time of last access */
|
||||
long st_atimensec; /* nsec of last access */
|
||||
time_t st_mtime; /* [XSI] Last data modification time */
|
||||
long st_mtimensec; /* last data modification nsec */
|
||||
time_t st_ctime; /* [XSI] Time of last status change */
|
||||
long st_ctimensec; /* nsec of last status change */
|
||||
#endif
|
||||
off_t st_size; /* [XSI] file size, in bytes */
|
||||
blkcnt_t st_blocks; /* [XSI] blocks allocated for file */
|
||||
blksize_t st_blksize; /* [XSI] optimal blocksize for I/O */
|
||||
__uint32_t st_flags; /* user defined flags for file */
|
||||
__uint32_t st_gen; /* file generation number */
|
||||
__int32_t st_lspare; /* RESERVED: DO NOT USE! */
|
||||
__int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
|
||||
} STAT_FIX;
|
||||
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
typedef struct stat STAT_FIX;
|
||||
|
||||
#endif
|
||||
|
||||
#define EFI_UNIX_THUNK_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xf2e98868, 0x8985, 0x11db, {0x9a, 0x59, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \
|
||||
|
@ -115,8 +184,8 @@ typedef
|
|||
int
|
||||
(*UnixOpen) (const char *name, int flags, int mode);
|
||||
typedef
|
||||
long int
|
||||
(*UnixSeek) (int fd, long int off, int whence);
|
||||
off_t
|
||||
(*UnixSeek) (int fd, off_t off, int whence);
|
||||
typedef
|
||||
int
|
||||
(*UnixFtruncate) (int fd, long int len);
|
||||
|
@ -150,7 +219,7 @@ int
|
|||
(*UnixCloseDir)(DIR *dir);
|
||||
typedef
|
||||
int
|
||||
(*UnixStat)(const char *path, struct stat *buf);
|
||||
(*UnixStat)(const char *path, STAT_FIX *buf);
|
||||
typedef
|
||||
int
|
||||
(*UnixStatFs)(const char *path, struct statfs *buf);
|
||||
|
@ -213,7 +282,7 @@ int
|
|||
(*UnixTcsetattr) (int __fd, int __optional_actions,
|
||||
__const struct termios *__termios_p);
|
||||
|
||||
typedef
|
||||
typedef
|
||||
VOID *
|
||||
(*UnixDlopen) (const char *FileName, int Flag);
|
||||
|
||||
|
@ -230,20 +299,20 @@ VOID *
|
|||
// Work functions to enable source level debug in the emulator
|
||||
//
|
||||
|
||||
typedef
|
||||
typedef
|
||||
RETURN_STATUS
|
||||
(EFIAPI *UnixPeCoffGetEntryPoint) (
|
||||
IN VOID *Pe32Data,
|
||||
IN OUT VOID **EntryPoint
|
||||
);
|
||||
|
||||
typedef
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *UnixPeCoffRelocateImageExtraAction) (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
);
|
||||
|
||||
typedef
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *UnixPeCoffLoaderUnloadImageExtraAction) (
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
|
|
|
@ -87,7 +87,7 @@ PeCoffLoaderRelocateImageExtraAction (
|
|||
if (mUnix == NULL) {
|
||||
UnixPeCoffGetUnixThunkStucture ();
|
||||
}
|
||||
mUnix->PeCoffRelocateImageExtraAction (ImageContext);
|
||||
mUnix->PeCoffRelocateImageExtraAction (ImageContext);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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
|
@ -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,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -774,12 +774,9 @@ Returns:
|
|||
//
|
||||
// Open the device
|
||||
//
|
||||
Private->fd = Private->UnixThunk->Open
|
||||
(Private->Filename, Private->Mode, 0644);
|
||||
|
||||
Private->fd = Private->UnixThunk->Open (Private->Filename, Private->Mode, 0644);
|
||||
if (Private->fd < 0) {
|
||||
DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %s\n",
|
||||
Private->Filename));
|
||||
DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %a\n", Private->Filename));
|
||||
BlockIo->Media->MediaPresent = FALSE;
|
||||
Status = EFI_NO_MEDIA;
|
||||
goto Done;
|
||||
|
@ -798,16 +795,17 @@ Returns:
|
|||
// get the size of the file
|
||||
//
|
||||
Status = SetFilePointer64 (Private, 0, &FileSize, SEEK_END);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
FileSize = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize);
|
||||
DEBUG ((EFI_D_ERROR, "PlOpenBlock: Could not get filesize of %s\n", Private->Filename));
|
||||
DEBUG ((EFI_D_ERROR, "PlOpenBlock: Could not get filesize of %a\n", Private->Filename));
|
||||
Status = EFI_UNSUPPORTED;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
if (Private->NumberOfBlocks == 0) {
|
||||
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->BlockSize);
|
||||
Private->LastBlock = Private->NumberOfBlocks - 1;
|
||||
Private->Media.LastBlock = Private->LastBlock;
|
||||
}
|
||||
|
||||
EndOfFile = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize);
|
||||
|
@ -829,7 +827,7 @@ Returns:
|
|||
Private->UnixThunk->FTruncate (Private->fd, EndOfFile);
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INIT, "%HPlOpenBlock: opened %s%N\n", Private->Filename));
|
||||
DEBUG ((EFI_D_INIT, "%HPlOpenBlock: opened %a%N\n", Private->Filename));
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
Done:
|
||||
|
|
|
@ -269,7 +269,7 @@ Returns:
|
|||
Status = EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// Close protocol, don't use device path protocol in the Support() function
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
|
|
|
@ -50,8 +50,9 @@ Returns:
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
||||
UNIX_FWH_PPI *FwhPpi;
|
||||
UNIX_FWH_PPI *FwhPpi;
|
||||
EFI_PHYSICAL_ADDRESS FdBase;
|
||||
EFI_PHYSICAL_ADDRESS FdFixUp;
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||
UINT64 FdSize;
|
||||
UINTN Index;
|
||||
|
@ -75,7 +76,7 @@ Returns:
|
|||
//
|
||||
// Get information about all the FD's in the system
|
||||
//
|
||||
Status = FwhPpi->UnixFwh (Index, &FdBase, &FdSize);
|
||||
Status = FwhPpi->UnixFwh (Index, &FdBase, &FdSize, &FdFixUp);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Assume the FD starts with an FV header
|
||||
|
@ -116,7 +117,7 @@ Returns:
|
|||
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +
|
||||
PcdGet32 (PcdUnixFlashNvStorageEventLogSize);
|
||||
|
||||
BuildFvHob (FdBase + PcdGet32 (PcdUnixFlashNvStorageVariableBase), FdSize);
|
||||
BuildFvHob (FdFixUp + PcdGet32 (PcdUnixFlashNvStorageVariableBase), FdSize);
|
||||
} else {
|
||||
//
|
||||
// For other FD's just map them in.
|
||||
|
|
|
@ -57,9 +57,10 @@ Returns:
|
|||
// TODO: EFI_SUCCESS - add return value to function comment
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UNIX_FWH_PPI *UnixFwhPpi;
|
||||
UNIX_FWH_PPI *UnixFwhPpi;
|
||||
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
||||
EFI_PHYSICAL_ADDRESS FdBase;
|
||||
EFI_PHYSICAL_ADDRESS FdFixUp;
|
||||
UINT64 FdSize;
|
||||
|
||||
DEBUG ((EFI_D_ERROR, "NT 32 Flash Map PEIM Loaded\n"));
|
||||
|
@ -78,14 +79,14 @@ Returns:
|
|||
//
|
||||
// Assume that FD0 contains the Flash map.
|
||||
//
|
||||
Status = UnixFwhPpi->UnixFwh (0, &FdBase, &FdSize);
|
||||
Status = UnixFwhPpi->UnixFwh (0, &FdBase, &FdSize, &FdFixUp);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdUnixFlashNvStorageVariableBase) + (UINT32) FdBase);
|
||||
PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdUnixFlashNvStorageFtwWorkingBase) + (UINT32) FdBase);
|
||||
PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdUnixFlashNvStorageFtwSpareBase) + (UINT32) FdBase);
|
||||
PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdUnixFlashNvStorageVariableBase) + (UINT32)FdFixUp);
|
||||
PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdUnixFlashNvStorageFtwWorkingBase) + (UINT32)FdFixUp);
|
||||
PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdUnixFlashNvStorageFtwSpareBase) + (UINT32)FdFixUp);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -25,8 +25,13 @@
|
|||
#
|
||||
################################################################################
|
||||
[FD.Fv_Recovery]
|
||||
BaseAddress = 0x0|gEfiUnixPkgTokenSpaceGuid.PcdUnixFdBaseAddress #The base address of the FLASH Device.
|
||||
Size = 0x002a0000 #The size in bytes of the FLASH Device
|
||||
#
|
||||
# In OS X PEIMs are really XIP, so we need to make this address match the malloced
|
||||
# buffer for the FD (0x41000000). If this address does not match the FV will get
|
||||
# relocated in place (works, but not a great idea).
|
||||
#
|
||||
BaseAddress = 0x41000000|gEfiUnixPkgTokenSpaceGuid.PcdUnixFdBaseAddress #The base address of the FLASH Device.
|
||||
Size = 0x002a0000|gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareFdSize #The size in bytes of the FLASH Device
|
||||
ErasePolarity = 1
|
||||
BlockSize = 0x10000
|
||||
NumBlocks = 0x2a
|
||||
|
|
|
@ -836,7 +836,7 @@ OpenRoot:
|
|||
NewPrivateFile->IsDirectoryPath = FALSE;
|
||||
}
|
||||
} else {
|
||||
struct stat finfo;
|
||||
STAT_FIX finfo;
|
||||
int res = NewPrivateFile->UnixThunk->Stat (NewPrivateFile->FileName, &finfo);
|
||||
if (res == 0 && S_ISDIR(finfo.st_mode))
|
||||
NewPrivateFile->IsDirectoryPath = TRUE;
|
||||
|
@ -1107,7 +1107,7 @@ Returns:
|
|||
struct tm *tm;
|
||||
tm = UnixThunk->GmTime (&SystemTime);
|
||||
Time->Year = tm->tm_year;
|
||||
Time->Month = tm->tm_mon;
|
||||
Time->Month = tm->tm_mon + 1;
|
||||
Time->Day = tm->tm_mday;
|
||||
Time->Hour = tm->tm_hour;
|
||||
Time->Minute = tm->tm_min;
|
||||
|
@ -1151,10 +1151,10 @@ Returns:
|
|||
UINTN NameSize;
|
||||
UINTN ResultSize;
|
||||
EFI_FILE_INFO *Info;
|
||||
CHAR8 *RealFileName;
|
||||
CHAR8 *TempPointer;
|
||||
CHAR8 *RealFileName;
|
||||
CHAR8 *TempPointer;
|
||||
CHAR16 *BufferFileName;
|
||||
struct stat buf;
|
||||
STAT_FIX buf;
|
||||
|
||||
if (FileName != NULL) {
|
||||
RealFileName = FileName;
|
||||
|
@ -1724,7 +1724,7 @@ Returns:
|
|||
UINTN OldInfoSize;
|
||||
EFI_TPL OldTpl;
|
||||
mode_t NewAttr;
|
||||
struct stat OldAttr;
|
||||
STAT_FIX OldAttr;
|
||||
CHAR8 *OldFileName;
|
||||
CHAR8 *NewFileName;
|
||||
CHAR8 *CharPointer;
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# External makefile Xcode project project uses this script to build and clean from the Xcode GUI
|
||||
#
|
||||
|
||||
# force exit on error
|
||||
set -e
|
||||
|
||||
#
|
||||
# Source the workspace and set up the environment varaibles we need
|
||||
#
|
||||
cd ../..
|
||||
echo `pwd`
|
||||
./build.sh
|
|
@ -0,0 +1,191 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
activeBuildConfigurationName = Debug;
|
||||
activeExecutable = BA11A1010FB10BCE00D06FEC /* SecMain.dll */;
|
||||
activeTarget = D28A88AD04BDD90700651E21 /* xcode_project */;
|
||||
breakpoints = (
|
||||
BA11A11A0FB10E0700D06FEC /* SecGdbScriptBreak */,
|
||||
);
|
||||
codeSenseManager = BA11A0FE0FB10B4800D06FEC /* Code sense */;
|
||||
executables = (
|
||||
BA11A1010FB10BCE00D06FEC /* SecMain.dll */,
|
||||
);
|
||||
perUserDictionary = {
|
||||
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
20,
|
||||
20,
|
||||
198,
|
||||
20,
|
||||
99,
|
||||
99,
|
||||
29,
|
||||
20,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXBreakpointsDataSource_ActionID,
|
||||
PBXBreakpointsDataSource_TypeID,
|
||||
PBXBreakpointsDataSource_BreakpointID,
|
||||
PBXBreakpointsDataSource_UseID,
|
||||
PBXBreakpointsDataSource_LocationID,
|
||||
PBXBreakpointsDataSource_ConditionID,
|
||||
PBXBreakpointsDataSource_IgnoreCountID,
|
||||
PBXBreakpointsDataSource_ContinueID,
|
||||
);
|
||||
};
|
||||
PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
22,
|
||||
300,
|
||||
229,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXExecutablesDataSource_ActiveFlagID,
|
||||
PBXExecutablesDataSource_NameID,
|
||||
PBXExecutablesDataSource_CommentsID,
|
||||
);
|
||||
};
|
||||
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
20,
|
||||
341,
|
||||
20,
|
||||
48,
|
||||
43,
|
||||
43,
|
||||
20,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXFileDataSource_FiletypeID,
|
||||
PBXFileDataSource_Filename_ColumnID,
|
||||
PBXFileDataSource_Built_ColumnID,
|
||||
PBXFileDataSource_ObjectSize_ColumnID,
|
||||
PBXFileDataSource_Errors_ColumnID,
|
||||
PBXFileDataSource_Warnings_ColumnID,
|
||||
PBXFileDataSource_Target_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 263260969;
|
||||
PBXWorkspaceStateSaveDate = 263260969;
|
||||
};
|
||||
sourceControlManager = BA11A0FD0FB10B4800D06FEC /* Source Control */;
|
||||
userBuildSettings = {
|
||||
};
|
||||
};
|
||||
BA11A0FD0FB10B4800D06FEC /* Source Control */ = {
|
||||
isa = PBXSourceControlManager;
|
||||
fallbackIsa = XCSourceControlManager;
|
||||
isSCMEnabled = 0;
|
||||
repositoryNamesForRoots = {
|
||||
};
|
||||
scmConfiguration = {
|
||||
};
|
||||
};
|
||||
BA11A0FE0FB10B4800D06FEC /* Code sense */ = {
|
||||
isa = PBXCodeSenseManager;
|
||||
indexTemplatePath = "";
|
||||
};
|
||||
BA11A1010FB10BCE00D06FEC /* SecMain.dll */ = {
|
||||
isa = PBXExecutable;
|
||||
activeArgIndices = (
|
||||
);
|
||||
argumentStrings = (
|
||||
);
|
||||
autoAttachOnCrash = 1;
|
||||
breakpointsEnabled = 1;
|
||||
configStateDict = {
|
||||
"PBXLSLaunchAction-0" = {
|
||||
PBXLSLaunchAction = 0;
|
||||
PBXLSLaunchStartAction = 1;
|
||||
PBXLSLaunchStdioStyle = 2;
|
||||
PBXLSLaunchStyle = 0;
|
||||
class = PBXLSRunLaunchConfig;
|
||||
commandLineArgs = (
|
||||
);
|
||||
displayName = "Executable Runner";
|
||||
environment = {
|
||||
};
|
||||
identifier = com.apple.Xcode.launch.runConfig;
|
||||
remoteHostInfo = "";
|
||||
startActionInfo = "";
|
||||
};
|
||||
"PBXLSLaunchAction-1" = {
|
||||
PBXLSLaunchAction = 1;
|
||||
PBXLSLaunchStartAction = 1;
|
||||
PBXLSLaunchStdioStyle = 2;
|
||||
PBXLSLaunchStyle = 0;
|
||||
class = PBXGDB_LaunchConfig;
|
||||
commandLineArgs = (
|
||||
);
|
||||
displayName = GDB;
|
||||
environment = {
|
||||
};
|
||||
identifier = com.apple.Xcode.launch.GDBMI_Config;
|
||||
remoteHostInfo = "";
|
||||
startActionInfo = "";
|
||||
};
|
||||
};
|
||||
customDataFormattersEnabled = 0;
|
||||
dataTipCustomDataFormattersEnabled = 1;
|
||||
dataTipShowTypeColumn = 1;
|
||||
dataTipSortType = 0;
|
||||
debuggerPlugin = GDBDebugging;
|
||||
disassemblyDisplayState = 0;
|
||||
dylibVariantSuffix = "";
|
||||
enableDebugStr = 1;
|
||||
environmentEntries = (
|
||||
);
|
||||
executableSystemSymbolLevel = 0;
|
||||
executableUserSymbolLevel = 0;
|
||||
launchableReference = BA11A1020FB10BCE00D06FEC /* SecMain.dll */;
|
||||
libgmallocEnabled = 0;
|
||||
name = SecMain.dll;
|
||||
savedGlobals = {
|
||||
};
|
||||
showTypeColumn = 0;
|
||||
sourceDirectories = (
|
||||
);
|
||||
startupPath = ../../../Build/Unix/DEBUG_XCODE32/IA32;
|
||||
};
|
||||
BA11A1020FB10BCE00D06FEC /* SecMain.dll */ = {
|
||||
isa = PBXFileReference;
|
||||
lastKnownFileType = "compiled.mach-o.executable";
|
||||
name = SecMain.dll;
|
||||
path = ../../../Build/Unix/DEBUG_XCODE32/IA32/SecMain;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
BA11A11A0FB10E0700D06FEC /* SecGdbScriptBreak */ = {
|
||||
isa = PBXSymbolicBreakpoint;
|
||||
actions = (
|
||||
BA11A11E0FB10E2200D06FEC /* XCBreakpointCommandAction */,
|
||||
);
|
||||
breakpointStyle = 1;
|
||||
continueAfterActions = 1;
|
||||
countType = 0;
|
||||
delayBeforeContinue = 0;
|
||||
hitCount = 0;
|
||||
ignoreCount = 0;
|
||||
location = SecMain;
|
||||
modificationTime = 263261853.260195;
|
||||
originalNumberOfMultipleMatches = 1;
|
||||
state = 1;
|
||||
symbolName = SecGdbScriptBreak;
|
||||
};
|
||||
BA11A11E0FB10E2200D06FEC /* XCBreakpointCommandAction */ = {
|
||||
isa = XCBreakpointCommandAction;
|
||||
command = "source SecMain.gdb";
|
||||
fallbackIsa = XCBreakpointAction;
|
||||
logCommand = 0;
|
||||
useDebuggerSideImplementation = 1;
|
||||
};
|
||||
D28A88AD04BDD90700651E21 /* xcode_project */ = {
|
||||
activeExec = 0;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 45;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
F27EDBED101FA6FC0097B575 /* PciIoKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PciIoKit.h; path = ../../Sec/PciIoKit.h; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
08FB7794FE84155DC02AAC07 /* xcode_project */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F27EDBED101FA6FC0097B575 /* PciIoKit.h */,
|
||||
);
|
||||
name = xcode_project;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXLegacyTarget section */
|
||||
D28A88AD04BDD90700651E21 /* xcode_project */ = {
|
||||
isa = PBXLegacyTarget;
|
||||
buildArgumentsString = "$(ACTION)";
|
||||
buildConfigurationList = 1DEB918F08733D9F0010E9CD /* Build configuration list for PBXLegacyTarget "xcode_project" */;
|
||||
buildPhases = (
|
||||
);
|
||||
buildToolPath = ./XcodeBuild.sh;
|
||||
buildWorkingDirectory = "";
|
||||
dependencies = (
|
||||
);
|
||||
name = xcode_project;
|
||||
passBuildSettingsInEnvironment = 1;
|
||||
productName = xcode_project;
|
||||
};
|
||||
/* End PBXLegacyTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
buildConfigurationList = 1DEB919308733D9F0010E9CD /* Build configuration list for PBXProject "xcode_project" */;
|
||||
compatibilityVersion = "Xcode 3.1";
|
||||
hasScannedForEncodings = 1;
|
||||
mainGroup = 08FB7794FE84155DC02AAC07 /* xcode_project */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
D28A88AD04BDD90700651E21 /* xcode_project */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1DEB919008733D9F0010E9CD /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = xcode_project;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1DEB919108733D9F0010E9CD /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
OTHER_CFLAGS = "";
|
||||
OTHER_LDFLAGS = "";
|
||||
PRODUCT_NAME = xcode_project;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
1DEB919408733D9F0010E9CD /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx10.6;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1DEB919508733D9F0010E9CD /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx10.6;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1DEB918F08733D9F0010E9CD /* Build configuration list for PBXLegacyTarget "xcode_project" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1DEB919008733D9F0010E9CD /* Debug */,
|
||||
1DEB919108733D9F0010E9CD /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
1DEB919308733D9F0010E9CD /* Build configuration list for PBXProject "xcode_project" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1DEB919408733D9F0010E9CD /* Debug */,
|
||||
1DEB919508733D9F0010E9CD /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
set -e
|
||||
shopt -s nocasematch
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Setup workspace if it is not set
|
||||
#
|
||||
if [ -z "$WORKSPACE" ]
|
||||
then
|
||||
echo Initializing workspace
|
||||
cd ..
|
||||
export EDK_TOOLS_PATH=`pwd`/BaseTools
|
||||
echo $EDK_TOOLS_PATH
|
||||
source edksetup.sh BaseTools
|
||||
else
|
||||
echo Building from: $WORKSPACE
|
||||
fi
|
||||
|
||||
#
|
||||
# Pick a default tool type for a given OS
|
||||
#
|
||||
TARGET_TOOLS=MYTOOLS
|
||||
case `uname` in
|
||||
CYGWIN*) echo Cygwin not fully supported yet. ;;
|
||||
Darwin*)
|
||||
Major=$(uname -r | cut -f 1 -d '.')
|
||||
if [[ $Major == 9 ]]
|
||||
then
|
||||
echo UnixPkg requires Snow Leopard or later OS
|
||||
exit 1
|
||||
else
|
||||
TARGET_TOOLS=XCODE32
|
||||
fi
|
||||
;;
|
||||
Linux*) TARGET_TOOLS=ELFGCC ;;
|
||||
|
||||
esac
|
||||
|
||||
BUILD_ROOT_ARCH=$WORKSPACE/Build/Unix/DEBUG_"$TARGET_TOOLS"/IA32
|
||||
|
||||
if [[ ! -f `which build` || ! -f `which GenFv` ]];
|
||||
then
|
||||
# build the tools if they don't yet exist
|
||||
echo Building tools
|
||||
make -C $WORKSPACE/BaseTools
|
||||
else
|
||||
echo using prebuilt tools
|
||||
fi
|
||||
|
||||
|
||||
for arg in "$@"
|
||||
do
|
||||
if [[ $arg == run ]]; then
|
||||
case `uname` in
|
||||
Darwin*)
|
||||
#
|
||||
# On Darwin we can't use dlopen, so we have to load the real PE/COFF images.
|
||||
# This .gdbinit script sets a breakpoint that loads symbols for the PE/COFFEE
|
||||
# images that get loaded in SecMain
|
||||
#
|
||||
cp $WORKSPACE/UnixPkg/.gdbinit $WORKSPACE/Build/Unix/DEBUG_"$TARGET_TOOLS"/IA32
|
||||
;;
|
||||
esac
|
||||
|
||||
/usr/bin/gdb $BUILD_ROOT_ARCH/SecMain -q -cd=$BUILD_ROOT_ARCH
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $arg == cleanall ]]; then
|
||||
make -C $WORKSPACE/BaseTools clean
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
# Build the edk2 UnixPkg
|
||||
#
|
||||
echo $PATH
|
||||
echo `which build`
|
||||
build -p $WORKSPACE/EdkShellPkg/EdkShellPkg.dsc -a IA32 -t $TARGET_TOOLS $1 $2 $3 $4 $5 $6 $7 $8
|
||||
build -p $WORKSPACE/UnixPkg/UnixPkg.dsc -a IA32 -t $TARGET_TOOLS $1 $2 $3 $4 $5 $6 $7 $8
|
||||
exit $?
|
||||
|
|
@ -20,6 +20,32 @@ UnixPkg is built with following command:
|
|||
Notes: ELFGCC is defined in <Workspace>/Conf/tools_def.txt file. This tool chain use native gcc/binutil instead of
|
||||
cross-compiler like UNIXGCC tool chain.
|
||||
|
||||
On Mac OS X you can cd into UnixPkg directory and execute ./build.sh to build. This does not require
|
||||
setting up the environment like running the build command. Note Snow Leopard or later is required.
|
||||
This script should also work for any *INUX, but has not been tested.
|
||||
|
||||
./build.sh run will lanuch the emulator in gdb so you can source level debug via gdb.
|
||||
|
||||
|
||||
Notes:
|
||||
=====
|
||||
On Mac OS X Snow Leopard you can use Xcode 3.2 as a GUI debugger.
|
||||
Launch Xcode and open UnixPkg/Xcode/xcode_project/xcode_project.xcodeproj
|
||||
Under the build menu chose build and debug. shift-cmd-B shows the build results.
|
||||
|
||||
Under most *INUX the EFI executables are placed in the emulated EFI memory by the EFI PE/COFF loader
|
||||
but dlopen() is used to also load the image into the process to support source level debug.
|
||||
The entry point for the image is moved from the EFI emulator memory into the dlopen() image. This
|
||||
is not the case for Mac OS X. On Mac OS X a debugger script is used and the real EFI images in
|
||||
the emulator are the ones being debugged.
|
||||
|
||||
Also on Mac OS X the stack alignment requirements for IA-32 are 16 bytes and this is more strict
|
||||
than the EFI ABI. To work around this gasket code was introduced to ensure the stack is always
|
||||
16 byte aligned when making any POSIX call on Mac OS X.
|
||||
|
||||
To build PE/COFF images with Xcode 3.2 and extra tool call mtoc is required to convert Mach-O
|
||||
images into PE/COFF images. The tool only supports EFI PE/COFF images and the instructions on
|
||||
how to download it are on the edk2 website.
|
||||
|
||||
FAQ
|
||||
===
|
||||
|
|
Loading…
Reference in New Issue