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
|
EFI_STATUS
|
||||||
FvbGetVolumeAttributes (
|
FvbGetVolumeAttributes (
|
||||||
IN UINTN Instance,
|
IN UINTN Instance,
|
||||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||||
IN ESAL_FWB_GLOBAL *Global,
|
IN ESAL_FWB_GLOBAL *Global,
|
||||||
IN BOOLEAN Virtual
|
IN BOOLEAN Virtual
|
||||||
)
|
)
|
||||||
|
@ -560,10 +560,10 @@ Returns:
|
||||||
{
|
{
|
||||||
|
|
||||||
EFI_FVB_ATTRIBUTES_2 Attributes;
|
EFI_FVB_ATTRIBUTES_2 Attributes;
|
||||||
UINTN LbaAddress;
|
UINTN LbaAddress;
|
||||||
UINTN LbaLength;
|
UINTN LbaLength;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT8 Data;
|
UINT8 Data;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check if the FV is write enabled
|
// Check if the FV is write enabled
|
||||||
|
@ -596,7 +596,7 @@ Returns:
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
FvbSetVolumeAttributes (
|
FvbSetVolumeAttributes (
|
||||||
IN UINTN Instance,
|
IN UINTN Instance,
|
||||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||||
IN ESAL_FWB_GLOBAL *Global,
|
IN ESAL_FWB_GLOBAL *Global,
|
||||||
IN BOOLEAN Virtual
|
IN BOOLEAN Virtual
|
||||||
)
|
)
|
||||||
|
@ -629,10 +629,10 @@ Returns:
|
||||||
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
|
EFI_FW_VOL_INSTANCE *FwhInstance = NULL;
|
||||||
EFI_FVB_ATTRIBUTES_2 OldAttributes;
|
EFI_FVB_ATTRIBUTES_2 OldAttributes;
|
||||||
EFI_FVB_ATTRIBUTES_2 *AttribPtr;
|
EFI_FVB_ATTRIBUTES_2 *AttribPtr;
|
||||||
UINT32 Capabilities;
|
UINT32 Capabilities;
|
||||||
UINT32 OldStatus;
|
UINT32 OldStatus;
|
||||||
UINT32 NewStatus;
|
UINT32 NewStatus;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_FVB_ATTRIBUTES_2 UnchangedAttributes;
|
EFI_FVB_ATTRIBUTES_2 UnchangedAttributes;
|
||||||
|
|
||||||
|
|
||||||
|
@ -809,7 +809,7 @@ EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FvbProtocolGetAttributes (
|
FvbProtocolGetAttributes (
|
||||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
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
|
EFIAPI
|
||||||
FvbProtocolSetAttributes (
|
FvbProtocolSetAttributes (
|
||||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
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
|
EFI_STATUS
|
||||||
FvbSetVolumeAttributes (
|
FvbSetVolumeAttributes (
|
||||||
IN UINTN Instance,
|
IN UINTN Instance,
|
||||||
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||||
IN ESAL_FWB_GLOBAL *Global,
|
IN ESAL_FWB_GLOBAL *Global,
|
||||||
IN BOOLEAN Virtual
|
IN BOOLEAN Virtual
|
||||||
)
|
)
|
||||||
|
@ -111,7 +111,7 @@ FvbSetVolumeAttributes (
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
FvbGetVolumeAttributes (
|
FvbGetVolumeAttributes (
|
||||||
IN UINTN Instance,
|
IN UINTN Instance,
|
||||||
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
|
||||||
IN ESAL_FWB_GLOBAL *Global,
|
IN ESAL_FWB_GLOBAL *Global,
|
||||||
IN BOOLEAN Virtual
|
IN BOOLEAN Virtual
|
||||||
)
|
)
|
||||||
|
@ -162,7 +162,7 @@ EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FvbProtocolGetAttributes (
|
FvbProtocolGetAttributes (
|
||||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
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
|
EFIAPI
|
||||||
FvbProtocolSetAttributes (
|
FvbProtocolSetAttributes (
|
||||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
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
|
EFIAPI
|
||||||
FvbProtocolGetPhysicalAddress (
|
FvbProtocolGetPhysicalAddress (
|
||||||
IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
|
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) (
|
(EFIAPI *UNIX_FWH_INFORMATION) (
|
||||||
IN UINTN Index,
|
IN UINTN Index,
|
||||||
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
|
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.
|
Index - Which FD, starts at zero.
|
||||||
FdSize - Size of the FD in bytes
|
FdSize - Size of the FD in bytes
|
||||||
FdBase - Start address of the FD. Assume it points to an FV Header
|
FdBase - Start address of the FD. Assume it points to an FV Header
|
||||||
|
FixUp - Difference between actual FD address and build address
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
EFI_SUCCESS - Return the Base address and size of the FV
|
EFI_SUCCESS - Return the Base address and size of the FV
|
||||||
|
|
|
@ -62,11 +62,80 @@ Abstract:
|
||||||
|
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include <ucontext.h>
|
||||||
|
|
||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
#include <Library/PeCoffLib.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 \
|
#define EFI_UNIX_THUNK_PROTOCOL_GUID \
|
||||||
{ \
|
{ \
|
||||||
0xf2e98868, 0x8985, 0x11db, {0x9a, 0x59, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \
|
0xf2e98868, 0x8985, 0x11db, {0x9a, 0x59, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \
|
||||||
|
@ -115,8 +184,8 @@ typedef
|
||||||
int
|
int
|
||||||
(*UnixOpen) (const char *name, int flags, int mode);
|
(*UnixOpen) (const char *name, int flags, int mode);
|
||||||
typedef
|
typedef
|
||||||
long int
|
off_t
|
||||||
(*UnixSeek) (int fd, long int off, int whence);
|
(*UnixSeek) (int fd, off_t off, int whence);
|
||||||
typedef
|
typedef
|
||||||
int
|
int
|
||||||
(*UnixFtruncate) (int fd, long int len);
|
(*UnixFtruncate) (int fd, long int len);
|
||||||
|
@ -150,7 +219,7 @@ int
|
||||||
(*UnixCloseDir)(DIR *dir);
|
(*UnixCloseDir)(DIR *dir);
|
||||||
typedef
|
typedef
|
||||||
int
|
int
|
||||||
(*UnixStat)(const char *path, struct stat *buf);
|
(*UnixStat)(const char *path, STAT_FIX *buf);
|
||||||
typedef
|
typedef
|
||||||
int
|
int
|
||||||
(*UnixStatFs)(const char *path, struct statfs *buf);
|
(*UnixStatFs)(const char *path, struct statfs *buf);
|
||||||
|
@ -213,7 +282,7 @@ int
|
||||||
(*UnixTcsetattr) (int __fd, int __optional_actions,
|
(*UnixTcsetattr) (int __fd, int __optional_actions,
|
||||||
__const struct termios *__termios_p);
|
__const struct termios *__termios_p);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID *
|
VOID *
|
||||||
(*UnixDlopen) (const char *FileName, int Flag);
|
(*UnixDlopen) (const char *FileName, int Flag);
|
||||||
|
|
||||||
|
@ -230,20 +299,20 @@ VOID *
|
||||||
// Work functions to enable source level debug in the emulator
|
// Work functions to enable source level debug in the emulator
|
||||||
//
|
//
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
(EFIAPI *UnixPeCoffGetEntryPoint) (
|
(EFIAPI *UnixPeCoffGetEntryPoint) (
|
||||||
IN VOID *Pe32Data,
|
IN VOID *Pe32Data,
|
||||||
IN OUT VOID **EntryPoint
|
IN OUT VOID **EntryPoint
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *UnixPeCoffRelocateImageExtraAction) (
|
(EFIAPI *UnixPeCoffRelocateImageExtraAction) (
|
||||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *UnixPeCoffLoaderUnloadImageExtraAction) (
|
(EFIAPI *UnixPeCoffLoaderUnloadImageExtraAction) (
|
||||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
|
|
|
@ -87,7 +87,7 @@ PeCoffLoaderRelocateImageExtraAction (
|
||||||
if (mUnix == NULL) {
|
if (mUnix == NULL) {
|
||||||
UnixPeCoffGetUnixThunkStucture ();
|
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
|
&mSecTemporaryRamSupportPpi
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
||||||
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
|
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
|
||||||
&gUnixFwhPpiGuid,
|
&gUnixFwhPpiGuid,
|
||||||
&mSecFwhInformationPpi
|
&mSecFwhInformationPpi
|
||||||
|
@ -142,6 +141,7 @@ MapFile (
|
||||||
IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,
|
IN OUT EFI_PHYSICAL_ADDRESS *BaseAddress,
|
||||||
OUT UINT64 *Length
|
OUT UINT64 *Length
|
||||||
);
|
);
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SecNt32PeCoffRelocateImage (
|
SecNt32PeCoffRelocateImage (
|
||||||
|
@ -200,7 +200,7 @@ Returns:
|
||||||
// symbols when we load every PE/COFF image.
|
// symbols when we load every PE/COFF image.
|
||||||
//
|
//
|
||||||
Index = strlen (*Argv);
|
Index = strlen (*Argv);
|
||||||
gGdbWorkingFileName = malloc (Index + strlen(".gdb"));
|
gGdbWorkingFileName = malloc (Index + strlen(".gdb") + 1);
|
||||||
strcpy (gGdbWorkingFileName, *Argv);
|
strcpy (gGdbWorkingFileName, *Argv);
|
||||||
strcat (gGdbWorkingFileName, ".gdb");
|
strcat (gGdbWorkingFileName, ".gdb");
|
||||||
#endif
|
#endif
|
||||||
|
@ -783,6 +783,12 @@ Returns:
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = PeCoffLoaderRelocateImage (&ImageContext);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SecPeCoffRelocateImageExtraAction (&ImageContext);
|
SecPeCoffRelocateImageExtraAction (&ImageContext);
|
||||||
|
|
||||||
|
@ -823,7 +829,8 @@ EFIAPI
|
||||||
SecUnixFdAddress (
|
SecUnixFdAddress (
|
||||||
IN UINTN Index,
|
IN UINTN Index,
|
||||||
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
|
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.
|
Index - Which FD, starts at zero.
|
||||||
FdSize - Size of the FD in bytes
|
FdSize - Size of the FD in bytes
|
||||||
FdBase - Start address of the FD. Assume it points to an FV Header
|
FdBase - Start address of the FD. Assume it points to an FV Header
|
||||||
|
FixUp - Difference between actual FD address and build address
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
EFI_SUCCESS - Return the Base address and size of the FV
|
EFI_SUCCESS - Return the Base address and size of the FV
|
||||||
|
@ -848,11 +856,21 @@ Returns:
|
||||||
|
|
||||||
*FdBase = gFdInfo[Index].Address;
|
*FdBase = gFdInfo[Index].Address;
|
||||||
*FdSize = gFdInfo[Index].Size;
|
*FdSize = gFdInfo[Index].Size;
|
||||||
|
*FixUp = 0;
|
||||||
|
|
||||||
if (*FdBase == 0 && *FdSize == 0) {
|
if (*FdBase == 0 && *FdSize == 0) {
|
||||||
return EFI_UNSUPPORTED;
|
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;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1109,13 +1127,6 @@ SecPeCoffRelocateImageExtraAction (
|
||||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
Status = PeCoffLoaderRelocateImage (ImageContext);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
PrintLoadAddress (ImageContext);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
PrintLoadAddress (ImageContext);
|
PrintLoadAddress (ImageContext);
|
||||||
|
@ -1186,10 +1197,10 @@ SecPeCoffRelocateImageExtraAction (
|
||||||
(unsigned long)ImageContext->ImageAddress,
|
(unsigned long)ImageContext->ImageAddress,
|
||||||
(unsigned long)ImageContext->EntryPoint);
|
(unsigned long)ImageContext->EntryPoint);
|
||||||
|
|
||||||
Handle = dlopen(ImageContext->PdbPointer, RTLD_NOW);
|
Handle = dlopen (ImageContext->PdbPointer, RTLD_NOW);
|
||||||
|
|
||||||
if (Handle) {
|
if (Handle) {
|
||||||
Entry = dlsym(Handle, "_ModuleEntryPoint");
|
Entry = dlsym (Handle, "_ModuleEntryPoint");
|
||||||
} else {
|
} else {
|
||||||
printf("%s\n", dlerror());
|
printf("%s\n", dlerror());
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,9 +157,9 @@ EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SecPeiReportStatusCode (
|
SecPeiReportStatusCode (
|
||||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||||
IN EFI_STATUS_CODE_VALUE Value,
|
IN EFI_STATUS_CODE_VALUE Value,
|
||||||
IN UINT32 Instance,
|
IN UINT32 Instance,
|
||||||
IN CONST EFI_GUID *CallerId,
|
IN CONST EFI_GUID *CallerId,
|
||||||
IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
|
IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL
|
||||||
)
|
)
|
||||||
|
@ -390,25 +390,9 @@ EFIAPI
|
||||||
SecUnixFdAddress (
|
SecUnixFdAddress (
|
||||||
IN UINTN Index,
|
IN UINTN Index,
|
||||||
IN OUT EFI_PHYSICAL_ADDRESS *FdBase,
|
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
|
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;
|
extern EFI_UNIX_THUNK_PROTOCOL *gUnix;
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
UnixThunk.c
|
UnixThunk.c
|
||||||
FwVol.c
|
FwVol.c
|
||||||
SecMain.c
|
SecMain.c
|
||||||
|
Gasket.c
|
||||||
|
|
||||||
[Sources.Ia32]
|
[Sources.Ia32]
|
||||||
Ia32/Gasket.S
|
Ia32/Gasket.S
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareVolume
|
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareVolume
|
||||||
gEfiUnixPkgTokenSpaceGuid.PcdUnixMemorySizeForSecMain
|
gEfiUnixPkgTokenSpaceGuid.PcdUnixMemorySizeForSecMain
|
||||||
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareFdSize
|
gEfiUnixPkgTokenSpaceGuid.PcdUnixFirmwareFdSize
|
||||||
|
gEfiUnixPkgTokenSpaceGuid.PcdUnixFdBaseAddress
|
||||||
|
|
||||||
[BuildOptions.common]
|
[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
|
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
|
# 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_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
|
XCODE:*_*_IA32_ASM_FLAGS == -arch i386 -g
|
||||||
|
|
|
@ -123,19 +123,17 @@ TryCreateShmImage(UGA_IO_PRIVATE *drv)
|
||||||
drv->xshm_info.shmid = shmget
|
drv->xshm_info.shmid = shmget
|
||||||
(IPC_PRIVATE, drv->image->bytes_per_line * drv->image->height,
|
(IPC_PRIVATE, drv->image->bytes_per_line * drv->image->height,
|
||||||
IPC_CREAT | 0777);
|
IPC_CREAT | 0777);
|
||||||
if (drv->xshm_info.shmid < 0)
|
if (drv->xshm_info.shmid < 0) {
|
||||||
{
|
XDestroyImage(drv->image);
|
||||||
XDestroyImage(drv->image);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
drv->image_data = shmat (drv->xshm_info.shmid, NULL, 0);
|
drv->image_data = shmat (drv->xshm_info.shmid, NULL, 0);
|
||||||
if(!drv->image_data)
|
if(!drv->image_data) {
|
||||||
{
|
shmctl (drv->xshm_info.shmid, IPC_RMID, NULL);
|
||||||
shmctl (drv->xshm_info.shmid, IPC_RMID, NULL);
|
XDestroyImage(drv->image);
|
||||||
XDestroyImage(drv->image);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
//
|
//
|
||||||
|
@ -149,12 +147,11 @@ TryCreateShmImage(UGA_IO_PRIVATE *drv)
|
||||||
drv->xshm_info.shmaddr = (char*)drv->image_data;
|
drv->xshm_info.shmaddr = (char*)drv->image_data;
|
||||||
drv->image->data = (char*)drv->image_data;
|
drv->image->data = (char*)drv->image_data;
|
||||||
|
|
||||||
if (!XShmAttach (drv->display, &drv->xshm_info))
|
if (!XShmAttach (drv->display, &drv->xshm_info)) {
|
||||||
{
|
shmdt (drv->image_data);
|
||||||
shmdt (drv->image_data);
|
XDestroyImage(drv->image);
|
||||||
XDestroyImage(drv->image);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,7 +383,7 @@ UgaCheckKey(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo)
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
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;
|
UGA_IO_PRIVATE *drv = (UGA_IO_PRIVATE *)UgaIo;
|
||||||
EFI_STATUS status;
|
EFI_STATUS status;
|
||||||
|
|
|
@ -36,6 +36,10 @@ Abstract:
|
||||||
#include "Uefi.h"
|
#include "Uefi.h"
|
||||||
#include "Library/UnixLib.h"
|
#include "Library/UnixLib.h"
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include "Gasket.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
int settimer_initialized;
|
int settimer_initialized;
|
||||||
struct timeval settimer_timeval;
|
struct timeval settimer_timeval;
|
||||||
void (*settimer_callback)(UINT64 delta);
|
void (*settimer_callback)(UINT64 delta);
|
||||||
|
@ -150,74 +154,6 @@ GetErrno(void)
|
||||||
return errno;
|
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
|
extern EFI_STATUS
|
||||||
UgaCreate(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title);
|
UgaCreate(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, CONST CHAR16 *Title);
|
||||||
|
@ -303,7 +239,7 @@ EFI_UNIX_THUNK_PROTOCOL mUnixThunkTable = {
|
||||||
rewinddir,
|
rewinddir,
|
||||||
readdir,
|
readdir,
|
||||||
closedir,
|
closedir,
|
||||||
stat,
|
(UnixStat)stat,
|
||||||
statfs,
|
statfs,
|
||||||
rename,
|
rename,
|
||||||
mktime,
|
mktime,
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -774,12 +774,9 @@ Returns:
|
||||||
//
|
//
|
||||||
// Open the device
|
// Open the device
|
||||||
//
|
//
|
||||||
Private->fd = Private->UnixThunk->Open
|
Private->fd = Private->UnixThunk->Open (Private->Filename, Private->Mode, 0644);
|
||||||
(Private->Filename, Private->Mode, 0644);
|
|
||||||
|
|
||||||
if (Private->fd < 0) {
|
if (Private->fd < 0) {
|
||||||
DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %s\n",
|
DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %a\n", Private->Filename));
|
||||||
Private->Filename));
|
|
||||||
BlockIo->Media->MediaPresent = FALSE;
|
BlockIo->Media->MediaPresent = FALSE;
|
||||||
Status = EFI_NO_MEDIA;
|
Status = EFI_NO_MEDIA;
|
||||||
goto Done;
|
goto Done;
|
||||||
|
@ -798,16 +795,17 @@ Returns:
|
||||||
// get the size of the file
|
// get the size of the file
|
||||||
//
|
//
|
||||||
Status = SetFilePointer64 (Private, 0, &FileSize, SEEK_END);
|
Status = SetFilePointer64 (Private, 0, &FileSize, SEEK_END);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
FileSize = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize);
|
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;
|
Status = EFI_UNSUPPORTED;
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Private->NumberOfBlocks == 0) {
|
if (Private->NumberOfBlocks == 0) {
|
||||||
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->BlockSize);
|
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->BlockSize);
|
||||||
|
Private->LastBlock = Private->NumberOfBlocks - 1;
|
||||||
|
Private->Media.LastBlock = Private->LastBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
EndOfFile = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize);
|
EndOfFile = MultU64x32 (Private->NumberOfBlocks, Private->BlockSize);
|
||||||
|
@ -829,7 +827,7 @@ Returns:
|
||||||
Private->UnixThunk->FTruncate (Private->fd, EndOfFile);
|
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;
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
Done:
|
Done:
|
||||||
|
|
|
@ -269,7 +269,7 @@ Returns:
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close protocol, don't use device path protocol in the Support() function
|
// Close protocol, don't use device path protocol in the Support() function
|
||||||
//
|
//
|
||||||
gBS->CloseProtocol (
|
gBS->CloseProtocol (
|
||||||
|
|
|
@ -50,8 +50,9 @@ Returns:
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
||||||
UNIX_FWH_PPI *FwhPpi;
|
UNIX_FWH_PPI *FwhPpi;
|
||||||
EFI_PHYSICAL_ADDRESS FdBase;
|
EFI_PHYSICAL_ADDRESS FdBase;
|
||||||
|
EFI_PHYSICAL_ADDRESS FdFixUp;
|
||||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||||
UINT64 FdSize;
|
UINT64 FdSize;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
@ -75,7 +76,7 @@ Returns:
|
||||||
//
|
//
|
||||||
// Get information about all the FD's in the system
|
// 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)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// Assume the FD starts with an FV header
|
// Assume the FD starts with an FV header
|
||||||
|
@ -116,7 +117,7 @@ Returns:
|
||||||
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +
|
PcdGet32 (PcdFlashNvStorageFtwSpareSize) +
|
||||||
PcdGet32 (PcdUnixFlashNvStorageEventLogSize);
|
PcdGet32 (PcdUnixFlashNvStorageEventLogSize);
|
||||||
|
|
||||||
BuildFvHob (FdBase + PcdGet32 (PcdUnixFlashNvStorageVariableBase), FdSize);
|
BuildFvHob (FdFixUp + PcdGet32 (PcdUnixFlashNvStorageVariableBase), FdSize);
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// For other FD's just map them in.
|
// For other FD's just map them in.
|
||||||
|
|
|
@ -57,9 +57,10 @@ Returns:
|
||||||
// TODO: EFI_SUCCESS - add return value to function comment
|
// TODO: EFI_SUCCESS - add return value to function comment
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UNIX_FWH_PPI *UnixFwhPpi;
|
UNIX_FWH_PPI *UnixFwhPpi;
|
||||||
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
|
||||||
EFI_PHYSICAL_ADDRESS FdBase;
|
EFI_PHYSICAL_ADDRESS FdBase;
|
||||||
|
EFI_PHYSICAL_ADDRESS FdFixUp;
|
||||||
UINT64 FdSize;
|
UINT64 FdSize;
|
||||||
|
|
||||||
DEBUG ((EFI_D_ERROR, "NT 32 Flash Map PEIM Loaded\n"));
|
DEBUG ((EFI_D_ERROR, "NT 32 Flash Map PEIM Loaded\n"));
|
||||||
|
@ -78,14 +79,14 @@ Returns:
|
||||||
//
|
//
|
||||||
// Assume that FD0 contains the Flash map.
|
// Assume that FD0 contains the Flash map.
|
||||||
//
|
//
|
||||||
Status = UnixFwhPpi->UnixFwh (0, &FdBase, &FdSize);
|
Status = UnixFwhPpi->UnixFwh (0, &FdBase, &FdSize, &FdFixUp);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdUnixFlashNvStorageVariableBase) + (UINT32) FdBase);
|
PcdSet32 (PcdFlashNvStorageVariableBase, PcdGet32 (PcdUnixFlashNvStorageVariableBase) + (UINT32)FdFixUp);
|
||||||
PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdUnixFlashNvStorageFtwWorkingBase) + (UINT32) FdBase);
|
PcdSet32 (PcdFlashNvStorageFtwWorkingBase, PcdGet32 (PcdUnixFlashNvStorageFtwWorkingBase) + (UINT32)FdFixUp);
|
||||||
PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdUnixFlashNvStorageFtwSpareBase) + (UINT32) FdBase);
|
PcdSet32 (PcdFlashNvStorageFtwSpareBase, PcdGet32 (PcdUnixFlashNvStorageFtwSpareBase) + (UINT32)FdFixUp);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,13 @@
|
||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
[FD.Fv_Recovery]
|
[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
|
ErasePolarity = 1
|
||||||
BlockSize = 0x10000
|
BlockSize = 0x10000
|
||||||
NumBlocks = 0x2a
|
NumBlocks = 0x2a
|
||||||
|
|
|
@ -836,7 +836,7 @@ OpenRoot:
|
||||||
NewPrivateFile->IsDirectoryPath = FALSE;
|
NewPrivateFile->IsDirectoryPath = FALSE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
struct stat finfo;
|
STAT_FIX finfo;
|
||||||
int res = NewPrivateFile->UnixThunk->Stat (NewPrivateFile->FileName, &finfo);
|
int res = NewPrivateFile->UnixThunk->Stat (NewPrivateFile->FileName, &finfo);
|
||||||
if (res == 0 && S_ISDIR(finfo.st_mode))
|
if (res == 0 && S_ISDIR(finfo.st_mode))
|
||||||
NewPrivateFile->IsDirectoryPath = TRUE;
|
NewPrivateFile->IsDirectoryPath = TRUE;
|
||||||
|
@ -1107,7 +1107,7 @@ Returns:
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
tm = UnixThunk->GmTime (&SystemTime);
|
tm = UnixThunk->GmTime (&SystemTime);
|
||||||
Time->Year = tm->tm_year;
|
Time->Year = tm->tm_year;
|
||||||
Time->Month = tm->tm_mon;
|
Time->Month = tm->tm_mon + 1;
|
||||||
Time->Day = tm->tm_mday;
|
Time->Day = tm->tm_mday;
|
||||||
Time->Hour = tm->tm_hour;
|
Time->Hour = tm->tm_hour;
|
||||||
Time->Minute = tm->tm_min;
|
Time->Minute = tm->tm_min;
|
||||||
|
@ -1151,10 +1151,10 @@ Returns:
|
||||||
UINTN NameSize;
|
UINTN NameSize;
|
||||||
UINTN ResultSize;
|
UINTN ResultSize;
|
||||||
EFI_FILE_INFO *Info;
|
EFI_FILE_INFO *Info;
|
||||||
CHAR8 *RealFileName;
|
CHAR8 *RealFileName;
|
||||||
CHAR8 *TempPointer;
|
CHAR8 *TempPointer;
|
||||||
CHAR16 *BufferFileName;
|
CHAR16 *BufferFileName;
|
||||||
struct stat buf;
|
STAT_FIX buf;
|
||||||
|
|
||||||
if (FileName != NULL) {
|
if (FileName != NULL) {
|
||||||
RealFileName = FileName;
|
RealFileName = FileName;
|
||||||
|
@ -1724,7 +1724,7 @@ Returns:
|
||||||
UINTN OldInfoSize;
|
UINTN OldInfoSize;
|
||||||
EFI_TPL OldTpl;
|
EFI_TPL OldTpl;
|
||||||
mode_t NewAttr;
|
mode_t NewAttr;
|
||||||
struct stat OldAttr;
|
STAT_FIX OldAttr;
|
||||||
CHAR8 *OldFileName;
|
CHAR8 *OldFileName;
|
||||||
CHAR8 *NewFileName;
|
CHAR8 *NewFileName;
|
||||||
CHAR8 *CharPointer;
|
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
|
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.
|
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
|
FAQ
|
||||||
===
|
===
|
||||||
|
|
Loading…
Reference in New Issue