Port UnixPkg to also support X64. Currently only supports Unix x86_64 ABI. In the future we can make Sec support x86_64 ABI and the rest of the code support X64 EFI ABI. This will require assembly gaskets to fix the calling convention differences. I currently have noop gaskets in place for x86_64 ABI. This has only been tested on OS X 10.6.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10685 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
andrewfish
2010-07-22 21:21:38 +00:00
parent 92a4f6f3c7
commit b9c8e50e20
22 changed files with 1188 additions and 218 deletions

View File

@@ -55,8 +55,14 @@ settimer_handler (int sig)
- ((UINT64)settimer_timeval.tv_sec * 1000)
- (settimer_timeval.tv_usec / 1000);
settimer_timeval = timeval;
if (settimer_callback)
(*settimer_callback)(delta);
if (settimer_callback) {
#ifdef __APPLE__
ReverseGasketUint64 (settimer_callback, delta);
#else
(*settimer_callback)(delta);
#endif
}
}
VOID
@@ -94,13 +100,18 @@ SetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs))
void
msSleep (unsigned long Milliseconds)
{
struct timespec ts;
struct timespec rq, rm;
ts.tv_sec = Milliseconds / 1000;
ts.tv_nsec = (Milliseconds % 1000) * 1000000;
rq.tv_sec = Milliseconds / 1000;
rq.tv_nsec = (Milliseconds % 1000) * 1000000;
while (nanosleep (&ts, &ts) != 0 && errno == EINTR)
;
while (nanosleep (&rq, &rm) != -1) {
if (errno != EINTR) {
break;
}
rq = rm;
}
}
void
@@ -174,20 +185,20 @@ EFI_UNIX_THUNK_PROTOCOL mUnixThunkTable = {
Gasketgmtime,
GasketGetTimeZone,
GasketGetDayLight,
(UnixPoll)Gasketpoll,
(UnixRead)Gasketread,
(UnixWrite)Gasketwrite,
Gasketpoll,
Gasketread,
Gasketwrite,
Gasketgetenv,
(UnixOpen)Gasketopen,
(UnixSeek)Gasketlseek,
(UnixFtruncate)Gasketftruncate,
Gasketopen,
Gasketlseek,
Gasketftruncate,
Gasketclose,
Gasketmkdir,
Gasketrmdir,
Gasketunlink,
GasketGetErrno,
Gasketopendir,
(UnixRewindDir)Gasketrewinddir,
Gasketrewinddir,
Gasketreaddir,
Gasketclosedir,
Gasketstat,
@@ -206,14 +217,9 @@ EFI_UNIX_THUNK_PROTOCOL mUnixThunkTable = {
Gasketcfsetospeed,
Gaskettcgetattr,
Gaskettcsetattr,
dlopen, // Update me with a gasket
dlerror, // Update me with a gasket
dlsym, // Update me with a gasket
SecPeCoffGetEntryPoint, // Update me with a gasket
SecPeCoffRelocateImageExtraAction, // Update me with a gasket
SecPeCoffLoaderUnloadImageExtraAction // Update me with a gasket
GasketUnixPeCoffGetEntryPoint,
GasketUnixPeCoffRelocateImageExtraAction,
GasketUnixPeCoffUnloadImageExtraAction
#else
msSleep, /* Sleep */
@@ -255,9 +261,6 @@ EFI_UNIX_THUNK_PROTOCOL mUnixThunkTable = {
cfsetospeed,
tcgetattr,
tcsetattr,
dlopen,
dlerror,
dlsym,
SecPeCoffGetEntryPoint,
SecPeCoffRelocateImageExtraAction,
SecPeCoffLoaderUnloadImageExtraAction