25STATIC VOID *mPeCoffEmuProtocolNotifyRegistration;
31 LOADED_IMAGE_PRIVATE_DATA_SIGNATURE,
33 EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER,
76 CHAR16 *MachineTypeName;
84 { EFI_IMAGE_MACHINE_RISCV64, L
"RISCV64" },
85 { EFI_IMAGE_MACHINE_LOONGARCH64, L
"LOONGARCH64" },
88UINT16 mDxeCoreImageMachineType = 0;
104 for (Index = 0; Index <
sizeof (mMachineTypeInfo)/
sizeof (mMachineTypeInfo[0]); Index++) {
105 if (mMachineTypeInfo[Index].MachineType == MachineType) {
106 return mMachineTypeInfo[Index].MachineTypeName;
139 BufferSize =
sizeof (EmuHandle);
143 mPeCoffEmuProtocolNotifyRegistration,
147 if (EFI_ERROR (Status)) {
156 &gEdkiiPeCoffImageEmulatorProtocolGuid,
159 if (EFI_ERROR (Status) || (Emulator ==
NULL)) {
165 ASSERT (Entry !=
NULL);
169 Entry->Emulator = Emulator;
170 Entry->MachineType = Entry->Emulator->MachineType;
193 UINT64 DxeCoreImageLength;
194 VOID *DxeCoreEntryPoint;
200 DxeCoreHob.Raw = HobStart;
201 while ((DxeCoreHob.Raw =
GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, DxeCoreHob.Raw)) !=
NULL) {
211 DxeCoreHob.Raw = GET_NEXT_HOB (DxeCoreHob);
214 ASSERT (DxeCoreHob.Raw !=
NULL);
219 gDxeCoreFileName = &DxeCoreHob.MemoryAllocationModule->
ModuleName;
224 Image = &mCorePrivateImage;
238 &gEfiLoadedImageProtocolGuid,
244 mCurrentImage = Image;
249 mDxeCoreImageMachineType = PeCoffLoaderGetMachineType (Image->
Info.
ImageBase);
250 gDxeCoreImageHandle = Image->
Handle;
251 gDxeCoreLoadedImage = &Image->
Info;
261 &mPeCoffEmuProtocolRegistrationEvent
269 &gEdkiiPeCoffImageEmulatorProtocolGuid,
270 mPeCoffEmuProtocolRegistrationEvent,
271 &mPeCoffEmuProtocolNotifyRegistration
308 if ((UserHandle ==
NULL) || (ReadSize ==
NULL) || (Buffer ==
NULL)) {
309 return EFI_INVALID_PARAMETER;
313 return EFI_INVALID_PARAMETER;
317 ASSERT (FHand->Signature == IMAGE_FILE_HANDLE_SIGNATURE);
322 EndPosition = Offset + *ReadSize;
323 if (EndPosition > FHand->SourceSize) {
324 *ReadSize = (UINT32)(FHand->SourceSize - Offset);
327 if (Offset >= FHand->SourceSize) {
331 CopyMem (Buffer, (CHAR8 *)FHand->Source + Offset, *ReadSize);
352 UINT32 DxeCodePageNumber;
355 UINTN BaseOffsetPageNumber;
356 UINTN TopOffsetPageNumber;
362 DxeCodePageNumber =
PcdGet32 (PcdLoadFixAddressRuntimeCodePageNumber);
363 DxeCodePageNumber +=
PcdGet32 (PcdLoadFixAddressBootTimeCodePageNumber);
365 DxeCodeBase = gLoadModuleAtFixAddressConfigurationTable.
DxeCodeTopAddress - DxeCodeSize;
371 if (mDxeCodeMemoryRangeUsageBitMap ==
NULL) {
372 mDxeCodeMemoryRangeUsageBitMap =
AllocateZeroPool (((DxeCodePageNumber/64) + 1)*
sizeof (UINT64));
378 if (!gLoadFixedAddressCodeMemoryReady || (mDxeCodeMemoryRangeUsageBitMap ==
NULL)) {
379 return EFI_NOT_FOUND;
385 if ((gLoadModuleAtFixAddressConfigurationTable.
DxeCodeTopAddress < ImageBase + ImageSize) ||
386 (DxeCodeBase > ImageBase))
388 return EFI_NOT_FOUND;
395 TopOffsetPageNumber =
EFI_SIZE_TO_PAGES ((UINT32)(ImageBase + ImageSize - DxeCodeBase));
396 for (Index = BaseOffsetPageNumber; Index < TopOffsetPageNumber; Index++) {
397 if ((mDxeCodeMemoryRangeUsageBitMap[Index / 64] &
LShiftU64 (1, (Index % 64))) != 0) {
401 return EFI_NOT_FOUND;
408 for (Index = BaseOffsetPageNumber; Index < TopOffsetPageNumber; Index++) {
409 mDxeCodeMemoryRangeUsageBitMap[Index / 64] |=
LShiftU64 (1, (Index % 64));
431 UINTN SectionHeaderOffset;
437 UINT16 NumberOfSections;
439 UINT64 ValueInSectionHeader;
441 Status = EFI_NOT_FOUND;
448 SectionHeaderOffset = ImageContext->PeCoffHeaderOffset +
451 ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader;
452 NumberOfSections = ImgHdr->Pe32.FileHeader.NumberOfSections;
457 for (Index = 0; Index < NumberOfSections; Index++) {
462 Status = ImageContext->ImageRead (
463 ImageContext->Handle,
468 if (EFI_ERROR (Status)) {
473 return EFI_NOT_FOUND;
476 Status = EFI_NOT_FOUND;
485 ValueInSectionHeader =
ReadUnaligned64 ((UINT64 *)&SectionHeader.PointerToRelocations);
486 if (ValueInSectionHeader != 0) {
492 if ((INT64)
PcdGet64 (PcdLoadModuleAtFixAddressEnable) < 0) {
493 ImageContext->ImageAddress = gLoadModuleAtFixAddressConfigurationTable.
DxeCodeTopAddress + (INT64)(
INTN)ImageContext->ImageAddress;
508 DEBUG ((DEBUG_INFO|DEBUG_LOAD,
"LOADING MODULE FIXED INFO: Loading module at fixed address 0x%11p. Status = %r \n", (
VOID *)(
UINTN)(ImageContext->ImageAddress), Status));
534 !
IsNull (&mAvailableEmulators, Link);
538 if (Entry->MachineType != Image->ImageContext.Machine) {
542 if (Entry->Emulator->IsImageSupported (
544 Image->ImageContext.ImageType,
548 Image->PeCoffEmu = Entry->Emulator;
553 return EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Image->ImageContext.Machine) ||
554 EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED (Image->ImageContext.Machine);
580 IN BOOLEAN BootPolicy,
589 BOOLEAN DstBufAlocated;
593 CHAR8 EfiFileName[512];
595 ZeroMem (&Image->ImageContext, sizeof (Image->ImageContext));
597 Image->ImageContext.Handle = Pe32Handle;
604 if (EFI_ERROR (Status)) {
615 "Image type %s can't be loaded on %s UEFI system.\n",
619 return EFI_UNSUPPORTED;
625 switch (Image->ImageContext.ImageType) {
626 case EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION:
630 case EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER:
634 case EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
639 Image->ImageContext.ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;
640 return EFI_UNSUPPORTED;
646 DstBufAlocated =
FALSE;
647 if (DstBuffer == 0) {
652 if (Image->ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
653 Size = (
UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment;
655 Size = (
UINTN)Image->ImageContext.ImageSize;
667 Status = EFI_OUT_OF_RESOURCES;
672 if (
PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0 ) {
675 if (EFI_ERROR (Status)) {
679 DEBUG ((DEBUG_INFO|DEBUG_LOAD,
"LOADING MODULE FIXED ERROR: Loading module at fixed address failed since specified memory is not available.\n"));
684 Image->NumberOfPages,
685 &Image->ImageContext.ImageAddress
689 if ((
PcdGetBool (PcdImageLargeAddressLoad) && ((Image->ImageContext.ImageAddress) >= 0x100000)) ||
690 Image->ImageContext.RelocationsStripped)
695 Image->NumberOfPages,
696 &Image->ImageContext.ImageAddress
700 if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {
704 Image->NumberOfPages,
705 &Image->ImageContext.ImageAddress
710 if (EFI_ERROR (Status)) {
714 DstBufAlocated =
TRUE;
720 if (Image->ImageContext.RelocationsStripped && (Image->ImageContext.ImageAddress != DstBuffer)) {
726 return EFI_INVALID_PARAMETER;
729 if ((Image->NumberOfPages != 0) &&
730 (Image->NumberOfPages <
733 Image->NumberOfPages =
EFI_SIZE_TO_PAGES ((
UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
734 return EFI_BUFFER_TOO_SMALL;
737 Image->NumberOfPages =
EFI_SIZE_TO_PAGES ((
UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
738 Image->ImageContext.ImageAddress = DstBuffer;
741 Image->ImageBasePage = Image->ImageContext.ImageAddress;
742 if (!Image->ImageContext.IsTeImage) {
743 Image->ImageContext.ImageAddress =
744 (Image->ImageContext.ImageAddress + Image->ImageContext.SectionAlignment - 1) &
752 if (EFI_ERROR (Status)) {
761 if ((Attribute & EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION) != 0) {
762 if (Image->ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) {
764 if (Image->ImageContext.FixupData ==
NULL) {
765 Status = EFI_OUT_OF_RESOURCES;
775 if (EFI_ERROR (Status)) {
787 Image->Machine = Image->ImageContext.Machine;
797 Image->Type = Image->ImageContext.ImageType;
798 Image->Info.ImageBase = (
VOID *)(
UINTN)Image->ImageContext.ImageAddress;
799 Image->Info.ImageSize = Image->ImageContext.ImageSize;
800 Image->Info.ImageCodeType = (
EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType);
801 Image->Info.ImageDataType = (
EFI_MEMORY_TYPE)(Image->ImageContext.ImageDataMemoryType);
802 if ((Attribute & EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION) != 0) {
803 if (Image->ImageContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) {
808 if (Image->RuntimeData ==
NULL) {
812 Image->RuntimeData->ImageBase = Image->Info.ImageBase;
813 Image->RuntimeData->ImageSize = (UINT64)(Image->Info.ImageSize);
814 Image->RuntimeData->RelocationData = Image->ImageContext.FixupData;
815 Image->RuntimeData->Handle = Image->Handle;
824 if (EntryPoint !=
NULL) {
825 *EntryPoint = Image->ImageContext.EntryPoint;
833 DEBUG_INFO | DEBUG_LOAD,
834 "Loading driver at 0x%11p EntryPoint=0x%11p ",
835 (
VOID *)(
UINTN)Image->ImageContext.ImageAddress,
843 if (Image->ImageContext.PdbPointer !=
NULL) {
845 for (Index = 0; Image->ImageContext.PdbPointer[Index] != 0; Index++) {
846 if ((Image->ImageContext.PdbPointer[Index] ==
'\\') || (Image->ImageContext.PdbPointer[Index] ==
'/')) {
847 StartIndex = Index + 1;
856 for (Index = 0; Index <
sizeof (EfiFileName) - 4; Index++) {
857 EfiFileName[Index] = Image->ImageContext.PdbPointer[Index + StartIndex];
858 if (EfiFileName[Index] == 0) {
859 EfiFileName[Index] =
'.';
862 if (EfiFileName[Index] ==
'.') {
863 EfiFileName[Index + 1] =
'e';
864 EfiFileName[Index + 2] =
'f';
865 EfiFileName[Index + 3] =
'i';
866 EfiFileName[Index + 4] = 0;
871 if (Index ==
sizeof (EfiFileName) - 4) {
872 EfiFileName[Index] = 0;
875 DEBUG ((DEBUG_INFO | DEBUG_LOAD,
"%a", EfiFileName));
878 DEBUG ((DEBUG_INFO | DEBUG_LOAD,
"\n"));
888 if (DstBufAlocated) {
889 CoreFreePages (Image->ImageContext.ImageAddress, Image->NumberOfPages);
890 Image->ImageContext.ImageAddress = 0;
891 Image->ImageBasePage = 0;
894 if (Image->ImageContext.FixupData !=
NULL) {
920 &gEfiLoadedImageProtocolGuid,
921 (
VOID **)&LoadedImage
923 if (!EFI_ERROR (Status)) {
924 Image = LOADED_IMAGE_PRIVATE_DATA_FROM_THIS (LoadedImage);
926 DEBUG ((DEBUG_LOAD,
"CoreLoadedImageInfo: Not an ImageHandle %p\n", ImageHandle));
958 ProtocolGuidArray =
NULL;
960 if (Image->Started) {
966 if (Image->PeCoffEmu !=
NULL) {
970 Image->PeCoffEmu->UnregisterImage (Image->PeCoffEmu, Image->ImageBasePage);
981 if (Image->Handle !=
NULL) {
989 if (!EFI_ERROR (Status)) {
990 for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
992 HandleBuffer[HandleIndex],
996 if (!EFI_ERROR (Status)) {
997 for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {
999 HandleBuffer[HandleIndex],
1000 ProtocolGuidArray[ProtocolIndex],
1004 if (!EFI_ERROR (Status)) {
1005 for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {
1006 if (OpenInfo[OpenInfoIndex].AgentHandle == Image->Handle) {
1008 HandleBuffer[HandleIndex],
1009 ProtocolGuidArray[ProtocolIndex],
1011 OpenInfo[OpenInfoIndex].ControllerHandle
1016 if (OpenInfo !=
NULL) {
1022 if (ProtocolGuidArray !=
NULL) {
1028 if (HandleBuffer !=
NULL) {
1037 &gEfiLoadedImageDevicePathProtocolGuid,
1038 Image->LoadedImageDevicePath
1043 &gEfiLoadedImageProtocolGuid,
1047 if (Image->ImageContext.HiiResourceData != 0) {
1050 &gEfiHiiPackageListProtocolGuid,
1051 (
VOID *)(
UINTN)Image->ImageContext.HiiResourceData
1056 if (Image->RuntimeData !=
NULL) {
1057 if (Image->RuntimeData->Link.ForwardLink !=
NULL) {
1071 if ((Image->ImageBasePage != 0) && FreePage) {
1078 if (Image->Info.FilePath !=
NULL) {
1082 if (Image->LoadedImageDevicePath !=
NULL) {
1086 if (Image->FixupData !=
NULL) {
1139 IN BOOLEAN BootPolicy,
1142 IN VOID *SourceBuffer OPTIONAL,
1157 UINT32 AuthenticationStatus;
1163 BOOLEAN ImageIsFromFv;
1164 BOOLEAN ImageIsFromLoadFile;
1174 if ((ImageHandle ==
NULL) || (ParentImageHandle ==
NULL)) {
1175 return EFI_INVALID_PARAMETER;
1179 if (ParentImage ==
NULL) {
1180 DEBUG ((DEBUG_LOAD|DEBUG_ERROR,
"LoadImageEx: Parent handle not an image handle\n"));
1181 return EFI_INVALID_PARAMETER;
1185 FHand.Signature = IMAGE_FILE_HANDLE_SIGNATURE;
1186 OriginalFilePath = FilePath;
1187 InputFilePath = FilePath;
1188 HandleFilePath = FilePath;
1189 DeviceHandle =
NULL;
1191 AuthenticationStatus = 0;
1192 ImageIsFromFv =
FALSE;
1193 ImageIsFromLoadFile =
FALSE;
1198 if (SourceBuffer !=
NULL) {
1199 FHand.Source = SourceBuffer;
1200 FHand.SourceSize = SourceSize;
1202 if (EFI_ERROR (Status)) {
1203 DeviceHandle =
NULL;
1206 if (SourceSize > 0) {
1209 Status = EFI_LOAD_ERROR;
1212 if (FilePath ==
NULL) {
1213 return EFI_INVALID_PARAMETER;
1220 Status =
CoreLocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, &HandleFilePath, &DeviceHandle);
1221 if (!EFI_ERROR (Status)) {
1222 ImageIsFromFv =
TRUE;
1224 HandleFilePath = FilePath;
1225 Status =
CoreLocateDevicePath (&gEfiSimpleFileSystemProtocolGuid, &HandleFilePath, &DeviceHandle);
1226 if (EFI_ERROR (Status)) {
1228 HandleFilePath = FilePath;
1232 if (EFI_ERROR (Status)) {
1233 HandleFilePath = FilePath;
1235 if (!EFI_ERROR (Status)) {
1236 ImageIsFromLoadFile =
TRUE;
1237 Node = HandleFilePath;
1250 &AuthenticationStatus
1252 if (FHand.Source ==
NULL) {
1253 Status = EFI_NOT_FOUND;
1255 FHand.FreeBuffer =
TRUE;
1256 if (ImageIsFromLoadFile) {
1261 if (OriginalFilePath ==
NULL) {
1263 Status = EFI_OUT_OF_RESOURCES;
1270 if (EFI_ERROR (Status)) {
1275 if (gSecurity2 !=
NULL) {
1279 SecurityStatus = gSecurity2->FileAuthentication (
1286 if (!EFI_ERROR (SecurityStatus) && ImageIsFromFv) {
1290 ASSERT (gSecurity !=
NULL);
1296 SecurityStatus = gSecurity->FileAuthenticationState (
1298 AuthenticationStatus,
1302 }
else if ((gSecurity !=
NULL) && (OriginalFilePath !=
NULL)) {
1306 SecurityStatus = gSecurity->FileAuthenticationState (
1308 AuthenticationStatus,
1316 if (EFI_ERROR (SecurityStatus) && (SecurityStatus != EFI_SECURITY_VIOLATION)) {
1317 if (SecurityStatus == EFI_ACCESS_DENIED) {
1322 *ImageHandle =
NULL;
1325 Status = SecurityStatus;
1334 if (Image ==
NULL) {
1335 Status = EFI_OUT_OF_RESOURCES;
1342 FilePath = OriginalFilePath;
1343 if (DeviceHandle !=
NULL) {
1345 if (!EFI_ERROR (Status)) {
1354 Image->Signature = LOADED_IMAGE_PRIVATE_DATA_SIGNATURE;
1361 if (NumberOfPages !=
NULL) {
1373 &gEfiLoadedImageProtocolGuid,
1378 if (EFI_ERROR (Status)) {
1385 Status =
CoreLoadPeImage (BootPolicy, &FHand, Image, DstBuffer, EntryPoint, Attribute);
1386 if (EFI_ERROR (Status)) {
1387 if ((Status == EFI_BUFFER_TOO_SMALL) || (Status == EFI_OUT_OF_RESOURCES)) {
1388 if (NumberOfPages !=
NULL) {
1396 if (NumberOfPages !=
NULL) {
1403 if ((Attribute & EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION) != 0) {
1412 ((Image->
ImageContext.DllCharacteristicsEx & EFI_IMAGE_DLLCHARACTERISTICS_EX_FORWARD_CFI_COMPAT) == 0))
1414 gMemoryAttributesTableForwardCfi =
FALSE;
1422 &gEfiLoadedImageProtocolGuid,
1426 if (EFI_ERROR (Status)) {
1434 if (OriginalFilePath !=
NULL) {
1443 &gEfiLoadedImageDevicePathProtocolGuid,
1447 if (EFI_ERROR (Status)) {
1457 &gEfiHiiPackageListProtocolGuid,
1461 if (EFI_ERROR (Status)) {
1471 *ImageHandle = Image->
Handle;
1478 if (FHand.FreeBuffer) {
1482 if (OriginalFilePath != InputFilePath) {
1489 if (EFI_ERROR (Status)) {
1490 if (Image !=
NULL) {
1494 }
else if (EFI_ERROR (SecurityStatus)) {
1495 Status = SecurityStatus;
1501 if (Image !=
NULL) {
1545 IN BOOLEAN BootPolicy,
1548 IN VOID *SourceBuffer OPTIONAL,
1568 EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION | EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION
1572 if (!EFI_ERROR (Status)) {
1576 Handle = *ImageHandle;
1608 OUT CHAR16 **ExitData OPTIONAL
1614 UINT64 HandleDatabaseKey;
1618 Handle = ImageHandle;
1622 return EFI_INVALID_PARAMETER;
1632 if (!EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Image->
Machine) &&
1641 return EFI_UNSUPPORTED;
1645 Status = Image->
PeCoffEmu->RegisterImage (
1651 if (EFI_ERROR (Status)) {
1653 DEBUG_LOAD | DEBUG_ERROR,
1654 "CoreLoadPeImage: Failed to register foreign image with emulator - %r\n",
1669 LastImage = mCurrentImage;
1670 mCurrentImage = Image;
1678 Image->
JumpBuffer =
AllocatePool (
sizeof (BASE_LIBRARY_JUMP_BUFFER) + BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT);
1689 mCurrentImage = LastImage;
1691 return EFI_OUT_OF_RESOURCES;
1701 if (SetJumpFlag == 0) {
1715 if (EFI_ERROR (Image->
Status)) {
1740 mCurrentImage = LastImage;
1751 if (Image->
Type != EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
1765 DEBUG ((DEBUG_LOAD,
"\n"));
1773 if ((ExitData !=
NULL) && (ExitDataSize !=
NULL)) {
1793 if (EFI_ERROR (Image->
Status) || (Image->
Type == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION)) {
1837 IN CHAR16 *ExitData OPTIONAL
1850 if (Image ==
NULL) {
1851 Status = EFI_INVALID_PARAMETER;
1867 if (Image != mCurrentImage) {
1868 DEBUG ((DEBUG_LOAD|DEBUG_ERROR,
"Exit: Image is not exitable image\n"));
1869 Status = EFI_INVALID_PARAMETER;
1881 if (ExitData !=
NULL) {
1885 Status = EFI_OUT_OF_RESOURCES;
1902 Status = EFI_ACCESS_DENIED;
1930 if (Image ==
NULL ) {
1934 Status = EFI_INVALID_PARAMETER;
1942 Status = EFI_UNSUPPORTED;
1944 Status = Image->
Info.Unload (ImageHandle);
1953 if (!EFI_ERROR (Status)) {
#define FUNCTION_ENTRY_POINT(FunctionPointer)
VOID *EFIAPI InvalidateInstructionCacheRange(IN VOID *Address, IN UINTN Length)
VOID *EFIAPI GetNextHob(IN UINT16 Type, IN CONST VOID *HobStart)
BOOLEAN EFIAPI IsNull(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
UINT64 EFIAPI ReadUnaligned64(IN CONST VOID *Buffer)
LIST_ENTRY *EFIAPI GetNextNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
RETURNS_TWICE UINTN EFIAPI SetJump(OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer)
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
UINT64 EFIAPI LShiftU64(IN UINT64 Operand, IN UINTN Count)
VOID EFIAPI LongJump(IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, IN UINTN Value)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
LOADED_IMAGE_PRIVATE_DATA * CoreLoadedImageInfo(IN EFI_HANDLE ImageHandle)
EFI_STATUS CoreLoadPeImage(IN BOOLEAN BootPolicy, IN VOID *Pe32Handle, IN LOADED_IMAGE_PRIVATE_DATA *Image, IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL, OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL, IN UINT32 Attribute)
EFI_STATUS CoreLoadImageCommon(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL, IN OUT UINTN *NumberOfPages OPTIONAL, OUT EFI_HANDLE *ImageHandle, OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL, IN UINT32 Attribute)
VOID CoreUnloadAndCloseImage(IN LOADED_IMAGE_PRIVATE_DATA *Image, IN BOOLEAN FreePage)
EFI_STATUS GetPeCoffImageFixLoadingAssignedAddress(IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext)
EFI_STATUS EFIAPI CoreReadImageFile(IN VOID *UserHandle, IN UINTN Offset, IN OUT UINTN *ReadSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI CoreStartImage(IN EFI_HANDLE ImageHandle, OUT UINTN *ExitDataSize, OUT CHAR16 **ExitData OPTIONAL)
EFI_STATUS EFIAPI CoreExit(IN EFI_HANDLE ImageHandle, IN EFI_STATUS Status, IN UINTN ExitDataSize, IN CHAR16 *ExitData OPTIONAL)
EFI_STATUS CheckAndMarkFixLoadingMemoryUsageBitMap(IN EFI_PHYSICAL_ADDRESS ImageBase, IN UINTN ImageSize)
EFI_STATUS CoreInitializeImageServices(IN VOID *HobStart)
STATIC VOID EFIAPI PeCoffEmuProtocolNotify(IN EFI_EVENT Event, IN VOID *Context)
CHAR16 * GetMachineTypeName(UINT16 MachineType)
EFI_STATUS EFIAPI CoreLoadImage(IN BOOLEAN BootPolicy, IN EFI_HANDLE ParentImageHandle, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, IN VOID *SourceBuffer OPTIONAL, IN UINTN SourceSize, OUT EFI_HANDLE *ImageHandle)
EFI_STATUS EFIAPI CoreUnloadImage(IN EFI_HANDLE ImageHandle)
STATIC BOOLEAN CoreIsImageTypeSupported(IN OUT LOADED_IMAGE_PRIVATE_DATA *Image)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI DevicePathFromHandle(IN EFI_HANDLE Handle)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI AppendDevicePath(IN CONST EFI_DEVICE_PATH_PROTOCOL *FirstDevicePath OPTIONAL, IN CONST EFI_DEVICE_PATH_PROTOCOL *SecondDevicePath OPTIONAL)
UINTN EFIAPI GetDevicePathSize(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI DuplicateDevicePath(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_STATUS EFIAPI CoreUninstallProtocolInterface(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *Interface)
EFI_STATUS EFIAPI CoreAllocatePages(IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINTN NumberOfPages, IN OUT EFI_PHYSICAL_ADDRESS *Memory)
EFI_STATUS EFIAPI CoreHandleProtocol(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface)
VOID CoreNewDebugImageInfoEntry(IN UINT32 ImageInfoType, IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN EFI_HANDLE ImageHandle)
VOID CoreRemoveDebugImageInfoEntry(EFI_HANDLE ImageHandle)
EFI_STATUS EFIAPI CoreFreePages(IN EFI_PHYSICAL_ADDRESS Memory, IN UINTN NumberOfPages)
VOID InsertImageRecord(IN EFI_RUNTIME_IMAGE_ENTRY *RuntimeImage)
EFI_STATUS UnregisterMemoryProfileImage(IN LOADED_IMAGE_PRIVATE_DATA *DriverEntry)
EFI_STATUS EFIAPI CoreProtocolsPerHandle(IN EFI_HANDLE UserHandle, OUT EFI_GUID ***ProtocolBuffer, OUT UINTN *ProtocolBufferCount)
VOID ProtectUefiImage(IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath)
EFI_STATUS EFIAPI CoreReinstallProtocolInterface(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *OldInterface, IN VOID *NewInterface)
EFI_TPL EFIAPI CoreRaiseTpl(IN EFI_TPL NewTpl)
EFI_STATUS EFIAPI CoreLocateHandleBuffer(IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, IN OUT UINTN *NumberHandles, OUT EFI_HANDLE **Buffer)
EFI_STATUS EFIAPI CoreLocateDevicePath(IN EFI_GUID *Protocol, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, OUT EFI_HANDLE *Device)
EFI_STATUS EFIAPI CoreInstallProtocolInterface(IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface)
EFI_STATUS CoreInstallProtocolInterfaceNotify(IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface, IN BOOLEAN Notify)
EFI_STATUS RegisterMemoryProfileImage(IN LOADED_IMAGE_PRIVATE_DATA *DriverEntry, IN EFI_FV_FILETYPE FileType)
VOID CoreConnectHandlesByKey(UINT64 Key)
EFI_STATUS EFIAPI CoreCloseProtocol(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN EFI_HANDLE AgentHandle, IN EFI_HANDLE ControllerHandle)
EFI_STATUS EFIAPI CoreRegisterProtocolNotify(IN EFI_GUID *Protocol, IN EFI_EVENT Event, OUT VOID **Registration)
EFI_STATUS EFIAPI CoreLocateHandle(IN EFI_LOCATE_SEARCH_TYPE SearchType, IN EFI_GUID *Protocol OPTIONAL, IN VOID *SearchKey OPTIONAL, IN OUT UINTN *BufferSize, OUT EFI_HANDLE *Buffer)
UINT64 CoreGetHandleDatabaseKey(VOID)
VOID RemoveImageRecord(IN EFI_RUNTIME_IMAGE_ENTRY *RuntimeImage)
EFI_STATUS EFIAPI CoreOpenProtocolInformation(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, OUT UINTN *EntryCount)
VOID EFIAPI CoreRestoreTpl(IN EFI_TPL NewTpl)
EFI_STATUS EFIAPI CoreCreateEvent(IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, IN VOID *NotifyContext OPTIONAL, OUT EFI_EVENT *Event)
EFI_STATUS EFIAPI CoreFreePool(IN VOID *Buffer)
VOID UnprotectUefiImage(IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath)
VOID *EFIAPI GetFileBufferByFilePath(IN BOOLEAN BootPolicy, IN CONST EFI_DEVICE_PATH_PROTOCOL *FilePath, OUT UINTN *FileSize, OUT UINT32 *AuthenticationStatus)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID *EFIAPI AllocateRuntimePool(IN UINTN AllocationSize)
#define EFI_LOADED_IMAGE_INFORMATION_REVISION
#define EFI_LOADED_IMAGE_PROTOCOL_REVISION
#define ALIGN_POINTER(Pointer, Alignment)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define BASE_CR(Record, TYPE, Field)
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG_CODE_BEGIN()
#define DEBUG(Expression)
#define PcdGet64(TokenName)
#define PcdGet32(TokenName)
#define PcdGetBool(TokenName)
RETURN_STATUS EFIAPI PeCoffLoaderLoadImage(IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext)
RETURN_STATUS EFIAPI PeCoffLoaderRelocateImage(IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext)
RETURN_STATUS EFIAPI PeCoffLoaderUnloadImage(IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext)
RETURN_STATUS(EFIAPI * PE_COFF_LOADER_READ_FILE)(IN VOID *FileHandle, IN UINTN FileOffset, IN OUT UINTN *ReadSize, OUT VOID *Buffer)
RETURN_STATUS EFIAPI PeCoffLoaderGetImageInfo(IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext)
#define EFI_IMAGE_SCN_CNT_CODE
0x00000020
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
#define EFI_IMAGE_MACHINE_AARCH64
UINT64 EFI_PHYSICAL_ADDRESS
#define EFI_PAGES_TO_SIZE(Pages)
#define EFI_IMAGE_MACHINE_IA32
#define EFI_IMAGE_MACHINE_IA64
#define EFI_IMAGE_MACHINE_X64
#define EFI_SIZE_TO_PAGES(Size)
EFI_STATUS(EFIAPI * EFI_IMAGE_ENTRY_POINT)(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
EFI_LIST_ENTRY ImageHead
A list of type EFI_RUNTIME_IMAGE_ENTRY.
EFI_PHYSICAL_ADDRESS MemoryBaseAddress
EFI_PHYSICAL_ADDRESS EntryPoint
EFI_HOB_MEMORY_ALLOCATION_HEADER MemoryAllocationHeader
EFI_PHYSICAL_ADDRESS DxeCodeTopAddress
The top address below which the Dxe runtime code and below which the Dxe runtime/boot code and PEI co...
EFI_DEVICE_PATH_PROTOCOL * FilePath
EFI_HANDLE DeviceHandle
The device handle that the EFI Image was loaded from.
UINT64 ImageSize
The size in bytes of the loaded image.
EFI_SYSTEM_TABLE * SystemTable
the image's EFI system table pointer.
VOID * ImageBase
The base address at which the image was loaded.
EFI_DEVICE_PATH_PROTOCOL * LoadedImageDevicePath
Pointer to Loaded Image Device Path Protocol.
EFI_IMAGE_ENTRY_POINT EntryPoint
The image's entry point.
EFI_TPL Tpl
Tpl of started image.
EFI_HANDLE Handle
Image handle.
BASE_LIBRARY_JUMP_BUFFER * JumpContext
Pointer to buffer for context save/restore.
VOID * ExitData
Pointer to exit data from started image.
UINT16 Machine
Machine type from PE image.
EFI_PHYSICAL_ADDRESS ImageBasePage
Location in memory.
EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL * PeCoffEmu
PE/COFF Image Emulator Protocol pointer.
BOOLEAN Started
If entrypoint has been called.
VOID * JumpBuffer
Pointer to pool allocation for context save/restore.
UINTN NumberOfPages
Number of pages.
UINTN ExitDataSize
Size of ExitData from started image.
PE_COFF_LOADER_IMAGE_CONTEXT ImageContext
PeCoffLoader ImageContext.
EFI_STATUS Status
Status returned by started image.
EFI_STATUS LoadImageStatus
Status returned by LoadImage() service.
EFI_LOADED_IMAGE_PROTOCOL Info
loaded image protocol
UINT32 ImageCodeMemoryType
PHYSICAL_ADDRESS HiiResourceData