Make OC compile as a library for Clover. It compiles, doesn't mean it's

working !
This commit is contained in:
jief666 2024-01-01 11:36:31 +01:00
parent 381bc886e5
commit 04a8211cbe
6 changed files with 241 additions and 102 deletions

View File

@ -203,6 +203,7 @@
# OcMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
OcMiscLib|OpenCorePkg/Library/OcMiscLib/OcMiscLib.inf
OcOSInfoLib|OpenCorePkg/Library/OcOSInfoLib/OcOSInfoLib.inf
OcPciIoLib|OpenCorePkg/Library/OcPciIoLib/OcPciIoLib.inf
# OcPngLib|OpenCorePkg/Library/OcPngLib/OcPngLib.inf
OcRngLib|OpenCorePkg/Library/OcRngLib/OcRngLib.inf
OcRtcLib|OpenCorePkg/Library/OcRtcLib/OcRtcLib.inf
@ -219,6 +220,7 @@
OcAppleKernelLib|OpenCorePkg/Library/OcAppleKernelLib/OcAppleKernelLib.inf
OcMachoLib|OpenCorePkg/Library/OcMachoLib/OcMachoLib.inf
OcVirtualFsLib|OpenCorePkg/Library/OcVirtualFsLib/OcVirtualFsLib.inf
OcPeCoffExtLib|OpenCorePkg/Library/OcPeCoffExtLib/OcPeCoffExtLib.inf
OcMacInfoLib|OpenCorePkg/Library/OcMacInfoLib/OcMacInfoLib.inf
OcApfsLib|OpenCorePkg/Library/OcApfsLib/OcApfsLib.inf
OcAppleSecureBootLib|OpenCorePkg/Library/OcAppleSecureBootLib/OcAppleSecureBootLib.inf
@ -233,18 +235,22 @@
OcAppleUserInterfaceThemeLib|OpenCorePkg/Library/OcAppleUserInterfaceThemeLib/OcAppleUserInterfaceThemeLib.inf
OcConfigurationLib|OpenCorePkg/Library/OcConfigurationLib/OcConfigurationLib.inf
OcDevicePropertyLib|OpenCorePkg/Library/OcDevicePropertyLib/OcDevicePropertyLib.inf
OcDirectResetLib|OpenCorePkg/Library/OcDirectResetLib/OcDirectResetLib.inf
# OcFirmwareVolumeLib|OpenCorePkg/Library/OcFirmwareVolumeLib/OcFirmwareVolumeLib.inf
OcHashServicesLib|OpenCorePkg/Library/OcHashServicesLib/OcHashServicesLib.inf
OcSmbiosLib|OpenCorePkg/Library/OcSmbiosLib/OcSmbiosLib.inf
# OcSmcLib|OpenCorePkg/Library/OcSmcLib/OcSmcLib.inf
OcUnicodeCollationEngGenericLib|OpenCorePkg/Library/OcUnicodeCollationEngLib/OcUnicodeCollationEngGenericLib.inf
OcPeCoffExtLib|OpenCorePkg/Library/OcPeCoffExtLib/OcPeCoffExtLib.inf
OcPeCoffLib|OpenCorePkg/Library/OcPeCoffLib/OcPeCoffLib.inf
OcVariableLib|OpenCorePkg/Library/OcVariableLib/OcVariableLib.inf
# OcPeCoffExtLib|OpenCorePkg/Library/OcPeCoffExtLib/OcPeCoffExtLib.inf
# OcPeCoffLib|OpenCorePkg/Library/OcPeCoffLib/OcPeCoffLib.inf
PeCoffLib2|MdePkg/Library/BasePeCoffLib2/BasePeCoffLib2.inf
UefiImageExtraActionLib|MdePkg/Library/BaseUefiImageExtraActionLibNull/BaseUefiImageExtraActionLibNull.inf
ResetSystemLib|OpenCorePkg/Library/OcResetSystemLib/OcResetSystemLib.inf
OcVariableLib|OpenCorePkg/Library/OcVariableLib/OcVariableLib.inf
OpenCoreLib|OpenCorePkg/Application/OpenCore/OpenCoreLib.inf
# OpenCoreLib|OpenCorePkg/Application/OpenCore/OpenCoreLib.inf
OcDebugLogLibOc2Clover|OpenCorePkg/Library/OcDebugLogLibOc2Clover/OcDebugLogLibOc2Clover.inf
#MachoLib|Library/MachoLib/MachoLib.inf
@ -307,10 +313,10 @@
DEFINE OC_INCLUDE_FLAG = -include OpenCoreFromClover.h
!endif
OpenCorePkg/Application/OpenCore/OpenCoreLib.inf {
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
}
# OpenCorePkg/Application/OpenCore/OpenCoreLib.inf {
# <BuildOptions>
# *_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
# }
OpenCorePkg/Library/OcGuardLib/OcGuardLib.inf {
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
@ -489,6 +495,10 @@
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
}
OpenCorePkg/Library/OcDirectResetLib/OcDirectResetLib.inf {
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
}
# OpenCorePkg/Library/OcFirmwareVolumeLib/OcFirmwareVolumeLib.inf {
# <BuildOptions>
# *_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
@ -509,10 +519,10 @@
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
}
OpenCorePkg/Library/OcPeCoffLib/OcPeCoffLib.inf {
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
}
# OpenCorePkg/Library/OcPeCoffLib/OcPeCoffLib.inf {
# <BuildOptions>
# *_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
# }
OpenCorePkg/Library/OcVariableLib/OcVariableLib.inf {
<BuildOptions>
*_*_*_CC_FLAGS = $(OC_INCLUDE_FLAG)
@ -821,7 +831,7 @@
#Sample/Application/Sample.inf
#gptsync/gptsync.inf
bdmesg_efi/bdmesg.inf
OpenCorePkg/Application/ControlMsrE2/ControlMsrE2Clover.inf
#OpenCorePkg/Application/ControlMsrE2/ControlMsrE2Clover.inf
!ifndef NO_CLOVER_SHELL
ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
@ -869,6 +879,20 @@ rEFIt_UEFI/refit.inf {
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000042
}
#from OpenCore
[PcdsPatchableInModule]
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterAccessWidth|8
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseHardwareFlowControl|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialDetectCable|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x03F8
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate|115200
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialLineControl|0x03
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl|0x07
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|1843200
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialPciDeviceInfo|{0xFF,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize|64
gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1
[Components.X64]

21
Include/IndustryStandard/VirtualMemory.h Executable file → Normal file
View File

@ -55,7 +55,7 @@ typedef union {
UINT64 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached
UINT64 Accessed : 1; // 0 = Not accessed, 1 = Accessed (set by CPU)
UINT64 Dirty : 1; // 0 = Not Dirty, 1 = written by processor on access to page
UINT64 PAT:1; //
UINT64 PAT : 1; // Combines with CD, WT and MTRR to define true caching type
UINT64 Global : 1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
UINT64 Available : 3; // Available for use by system software
UINT64 PageTableBaseAddress : 40; // Page Table Base Address
@ -80,7 +80,7 @@ typedef union {
UINT64 MustBe1 : 1; // Must be 1
UINT64 Global : 1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
UINT64 Available : 3; // Available for use by system software
UINT64 PAT:1; //
UINT64 PAT : 1; // Combines with CD, WT and MTRR to define true caching type
UINT64 MustBeZero : 8; // Must be zero;
UINT64 PageTableBaseAddress : 31; // Page Table Base Address
UINT64 AvabilableHigh : 11; // Available for use by system software
@ -104,7 +104,7 @@ typedef union {
UINT64 MustBe1 : 1; // Must be 1
UINT64 Global : 1; // 0 = Not global page, 1 = global page TLB not cleared on CR3 write
UINT64 Available : 3; // Available for use by system software
UINT64 PAT:1; //
UINT64 PAT : 1; // Combines with CD, WT and MTRR to define true caching type
UINT64 MustBeZero : 17; // Must be zero;
UINT64 PageTableBaseAddress : 22; // Page Table Base Address
UINT64 AvabilableHigh : 11; // Available for use by system software
@ -113,6 +113,19 @@ typedef union {
UINT64 Uint64;
} PAGE_TABLE_1G_ENTRY;
//
// PAT index bits.
//
typedef union {
struct {
UINT8 WriteThrough : 1; // 0 = Write-Back caching, 1=Write-Through caching
UINT8 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached
UINT8 PAT : 1; // Combines with CD, WT and MTRR to define true caching type
UINT8 Reserved : 5; // Reserved
} Bits;
UINT8 Index;
} PAT_INDEX;
typedef union {
struct {
UINT64 PhysPgOffset : 12; // 0 = Physical Page Offset
@ -142,6 +155,8 @@ typedef union {
#pragma pack(pop)
#define CR0_WP BIT16
#define CR3_ADDR_MASK 0x000FFFFFFFFFF000ull
#define CR3_FLAG_PWT 0x0000000000000008ull
#define CR3_FLAG_PCD 0x0000000000000010ull

@ -1 +1 @@
Subproject commit f184c6d350c3ad000deff5d3f949d8fd7d3ec183
Subproject commit a82ac0b0ec755ddc8094d4dd3f5c645ca1320090

View File

@ -37,15 +37,15 @@ extern OC_CPU_INFO mOpenCoreCpuInfo;
//extern EFI_HANDLE mLoadHandle;
EFI_STATUS
EFIAPI
OcKernelFileOpen (
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
);
//EFI_STATUS
//EFIAPI
//OcKernelFileOpen (
// IN EFI_FILE_PROTOCOL *This,
// OUT EFI_FILE_PROTOCOL **NewHandle,
// IN CHAR16 *FileName,
// IN UINT64 OpenMode,
// IN UINT64 Attributes
// );
EFI_STATUS
EFIAPI

View File

@ -436,7 +436,7 @@
VideoBiosPatchLib
# OpensslLib # for secureboot, I think
WaveLib
OpenCoreLib
OcMainLib
DebugLib
OcDebugLogLibOc2Clover
CppMemLib

View File

@ -255,6 +255,106 @@ void AllocSmallBlocks()
}
}
OC_GLOBAL_CONFIG
mOpenCoreConfiguration;
OC_STORAGE_CONTEXT
mOpenCoreStorage;
OC_CPU_INFO
mOpenCoreCpuInfo;
UINT8
mOpenCoreBooterHash[SHA1_DIGEST_SIZE];
OC_RSA_PUBLIC_KEY *
mOpenCoreVaultKey;
OC_PRIVILEGE_CONTEXT
mOpenCorePrivilege;
EFI_HANDLE
mStorageHandle;
EFI_DEVICE_PATH_PROTOCOL *
mStoragePath;
CHAR16 *
mStorageRoot;
VOID
OcMain (
IN OC_STORAGE_CONTEXT *Storage,
IN EFI_DEVICE_PATH_PROTOCOL *LoadPath
)
{
EFI_STATUS Status;
// OC_PRIVILEGE_CONTEXT *Privilege;
DEBUG ((DEBUG_INFO, "OC: OcMiscEarlyInit...\n"));
Status = OcMiscEarlyInit (
Storage,
&mOpenCoreConfiguration,
mOpenCoreVaultKey
);
if (EFI_ERROR (Status)) {
return;
}
OcCpuScanProcessor (&mOpenCoreCpuInfo);
DEBUG ((DEBUG_INFO, "OC: OcLoadNvramSupport...\n"));
OcLoadNvramSupport (Storage, &mOpenCoreConfiguration);
DEBUG ((DEBUG_INFO, "OC: OcMiscMiddleInit...\n"));
OcMiscMiddleInit (
Storage,
&mOpenCoreConfiguration,
mStorageRoot,
LoadPath,
mStorageHandle,
mOpenCoreConfiguration.Booter.Quirks.ForceBooterSignature ? mOpenCoreBooterHash : NULL
);
DEBUG ((DEBUG_INFO, "OC: OcLoadUefiSupport...\n"));
OcLoadUefiSupport (Storage, &mOpenCoreConfiguration, &mOpenCoreCpuInfo, mOpenCoreBooterHash);
DEBUG_CODE_BEGIN ();
DEBUG ((DEBUG_INFO, "OC: OcMiscLoadSystemReport...\n"));
OcMiscLoadSystemReport (&mOpenCoreConfiguration, mStorageHandle);
DEBUG_CODE_END ();
DEBUG ((DEBUG_INFO, "OC: OcLoadAcpiSupport...\n"));
OcLoadAcpiSupport (&mOpenCoreStorage, &mOpenCoreConfiguration);
DEBUG ((DEBUG_INFO, "OC: OcLoadPlatformSupport...\n"));
OcLoadPlatformSupport (&mOpenCoreConfiguration, &mOpenCoreCpuInfo);
DEBUG ((DEBUG_INFO, "OC: OcLoadDevPropsSupport...\n"));
OcLoadDevPropsSupport (&mOpenCoreConfiguration);
DEBUG ((DEBUG_INFO, "OC: OcMiscLateInit...\n"));
OcMiscLateInit (Storage, &mOpenCoreConfiguration);
DEBUG ((DEBUG_INFO, "OC: OcLoadKernelSupport...\n"));
OcLoadKernelSupport (&mOpenCoreStorage, &mOpenCoreConfiguration, &mOpenCoreCpuInfo);
if (mOpenCoreConfiguration.Misc.Security.EnablePassword) {
mOpenCorePrivilege.CurrentLevel = OcPrivilegeUnauthorized;
mOpenCorePrivilege.Hash = mOpenCoreConfiguration.Misc.Security.PasswordHash;
mOpenCorePrivilege.Salt = OC_BLOB_GET (&mOpenCoreConfiguration.Misc.Security.PasswordSalt);
mOpenCorePrivilege.SaltSize = mOpenCoreConfiguration.Misc.Security.PasswordSalt.Size;
// Privilege = &mOpenCorePrivilege;
} else {
// Privilege = NULL;
}
DEBUG ((DEBUG_INFO, "OC: All green, starting boot management...\n"));
// OcMiscBoot (
// &mOpenCoreStorage,
// &mOpenCoreConfiguration,
// Privilege,
// OcStartImage,
// mOpenCoreConfiguration.Uefi.Quirks.RequestBootVarRouting,
// mStorageHandle
// );
}
static EFI_STATUS LoadEFIImageList(IN EFI_DEVICE_PATH **DevicePaths,
IN CONST XStringW& ImageTitle,
@ -3593,7 +3693,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
MemoryTrackerInit();
EFI_STATUS Status = RefitMainMain(ImageHandle, SystemTable);
debugStartImageWithOC();
DBG("MT_alloc_count=%lld\n", MT_getAllocCount());
MT_outputDanglingPtr();