Lines Matching refs:ImageContext

54   @param  ImageContext    The context of the image being loaded.
63 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
81 Status = ImageContext->ImageRead (
82 ImageContext->Handle,
88 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
92 ImageContext->PeCoffHeaderOffset = 0;
98 ImageContext->PeCoffHeaderOffset = DosHdr.e_lfanew;
108 Status = ImageContext->ImageRead (
109 ImageContext->Handle,
110 ImageContext->PeCoffHeaderOffset,
115 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
123 ImageContext->IsTeImage = TRUE;
124 ImageContext->Machine = Hdr.Te->Machine;
125 ImageContext->ImageType = (UINT16)(Hdr.Te->Subsystem);
130 ImageContext->ImageSize = 0;
131 ImageContext->SectionAlignment = 0;
132 ImageContext->SizeOfHeaders = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN)Hdr.Te->BaseOfCode - (UINTN)Hdr.Te->StrippedSize;
135 ImageContext->IsTeImage = FALSE;
136 ImageContext->Machine = Hdr.Pe32->FileHeader.Machine;
163 Status = ImageContext->ImageRead (
164 ImageContext->Handle,
192 Status = ImageContext->ImageRead (
193 ImageContext->Handle,
208 ImageContext->ImageType = Hdr.Pe32->OptionalHeader.Subsystem;
209 ImageContext->ImageSize = (UINT64)Hdr.Pe32->OptionalHeader.SizeOfImage;
210 ImageContext->SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;
211 ImageContext->SizeOfHeaders = Hdr.Pe32->OptionalHeader.SizeOfHeaders;
236 Status = ImageContext->ImageRead (
237 ImageContext->Handle,
265 Status = ImageContext->ImageRead (
266 ImageContext->Handle,
281 ImageContext->ImageType = Hdr.Pe32Plus->OptionalHeader.Subsystem;
282 ImageContext->ImageSize = (UINT64) Hdr.Pe32Plus->OptionalHeader.SizeOfImage;
283 ImageContext->SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;
284 ImageContext->SizeOfHeaders = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders;
286 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
290 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
294 if (!PeCoffLoaderImageFormatSupported (ImageContext->Machine)) {
307 if (ImageContext->IsTeImage) {
311 SectionHeaderOffset = ImageContext->PeCoffHeaderOffset + sizeof (UINT32) + sizeof (EFI_IMAGE_FILE_HEADER) + Hdr.Pe32->FileHeader.SizeOfOptionalHeader;
320 Status = ImageContext->ImageRead (
321 ImageContext->Handle,
343 Status = ImageContext->ImageRead (
344 ImageContext->Handle,
369 DebugDirectoryEntryRva fields of the ImageContext structure.
370 If ImageContext is NULL, then return RETURN_INVALID_PARAMETER.
371 If the PE/COFF image accessed through the ImageRead service in the ImageContext
373 If any errors occur while computing the fields of ImageContext,
374 then the error status is returned in the ImageError field of ImageContext.
376 The ImageRead and Handle fields of ImageContext structure must be valid prior
382 @param ImageContext The pointer to the image context structure that describes the PE/COFF
386 @retval RETURN_INVALID_PARAMETER ImageContext is NULL.
393 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
410 if (ImageContext == NULL) {
416 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
419 Status = PeCoffLoaderGetPeHeader (ImageContext, Hdr);
429 if (!(ImageContext->IsTeImage)) {
434 ImageContext->ImageAddress = Hdr.Pe32->OptionalHeader.ImageBase;
439 ImageContext->ImageAddress = Hdr.Pe32Plus->OptionalHeader.ImageBase;
442 ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase + Hdr.Te->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));
449 ImageContext->DestinationAddress = 0;
454 ImageContext->DebugDirectoryEntryRva = 0;
455 ImageContext->CodeView = NULL;
456 ImageContext->PdbPointer = NULL;
469 if ((!(ImageContext->IsTeImage)) && ((Hdr.Pe32->FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0)) {
470 ImageContext->RelocationsStripped = TRUE;
471 } else if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size == 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {
472 ImageContext->RelocationsStripped = TRUE;
474 ImageContext->RelocationsStripped = FALSE;
481 if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size != 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {
485 if (!(ImageContext->IsTeImage)) {
512 ImageContext->PeCoffHeaderOffset +
523 Status = ImageContext->ImageRead (
524 ImageContext->Handle,
530 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
550 Status = ImageContext->ImageRead (
551 ImageContext->Handle,
557 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
561 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
563 ImageContext->ImageSize += DebugEntry.SizeOfData;
584 Status = ImageContext->ImageRead (
585 ImageContext->Handle,
591 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
625 ImageContext->ImageSize = (SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize);
637 Status = ImageContext->ImageRead (
638 ImageContext->Handle,
644 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
649 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
663 @param ImageContext The context of the image being loaded.
671 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
678 if (Address >= ImageContext->ImageSize) {
679 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
683 return (CHAR8 *)((UINTN) ImageContext->ImageAddress + Address);
689 If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of
690 ImageContext as the relocation base address. Otherwise, use the DestinationAddress field
691 of ImageContext as the relocation base address. The caller must allocate the relocation
692 fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function.
697 the ImageContext structure must be valid prior to invoking this service.
699 If ImageContext is NULL, then ASSERT().
705 @param ImageContext The pointer to the image context structure that describes the PE/COFF
709 Extended status information is in the ImageError field of ImageContext.
711 Extended status information is in the ImageError field of ImageContext.
713 Extended status information is in the ImageError field of ImageContext.
719 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
740 ASSERT (ImageContext != NULL);
745 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
750 if (ImageContext->RelocationsStripped) {
753 PeCoffLoaderRelocateImageExtraAction (ImageContext);
761 if (ImageContext->DestinationAddress != 0) {
762 BaseAddress = ImageContext->DestinationAddress;
764 BaseAddress = ImageContext->ImageAddress;
767 if (!(ImageContext->IsTeImage)) {
768 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
804 RelocBase = PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress);
806 ImageContext,
819 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
831 ImageContext->ImageAddress +
852 FixupData = ImageContext->FixupData;
861 if ((CHAR8 *) RelocEnd < (CHAR8 *)((UINTN) ImageContext->ImageAddress) ||
862 (CHAR8 *) RelocEnd > (CHAR8 *)((UINTN)ImageContext->ImageAddress + (UINTN)ImageContext->ImageSize)) {
863 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
867 if (!(ImageContext->IsTeImage)) {
868 FixupBase = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress);
873 FixupBase = (CHAR8 *)(UINTN)(ImageContext->ImageAddress +
936 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
956 if (ImageContext->DestinationAddress != 0) {
957 ImageContext->EntryPoint -= (UINT64) ImageContext->ImageAddress;
958 ImageContext->EntryPoint += (UINT64) ImageContext->DestinationAddress;
964 PeCoffLoaderRelocateImageExtraAction (ImageContext);
972 Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer
973 specified by the ImageAddress and ImageSize fields of ImageContext. The caller must allocate
975 The EntryPoint, FixupDataSize, CodeView, PdbPointer and HiiResourceData fields of ImageContext are computed.
978 fields of the ImageContext structure must be valid prior to invoking this service.
980 If ImageContext is NULL, then ASSERT().
986 @param ImageContext The pointer to the image context structure that describes the PE/COFF
990 the ImageAddress and ImageSize fields of ImageContext.
991 Extended status information is in the ImageError field of ImageContext.
993 Extended status information is in the ImageError field of ImageContext.
995 Extended status information is in the ImageError field of ImageContext.
997 Extended status information is in the ImageError field of ImageContext.
1003 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
1029 ASSERT (ImageContext != NULL);
1034 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
1041 CopyMem (&CheckContext, ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));
1051 if (ImageContext->ImageSize < CheckContext.ImageSize) {
1052 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_SIZE;
1055 if (ImageContext->ImageAddress == 0) {
1059 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
1072 ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;
1079 if (CheckContext.ImageAddress != ImageContext->ImageAddress) {
1080 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
1087 if (!(ImageContext->IsTeImage)) {
1088 if ((ImageContext->ImageAddress & (CheckContext.SectionAlignment - 1)) != 0) {
1089 ImageContext->ImageError = IMAGE_ERROR_INVALID_SECTION_ALIGNMENT;
1096 if (!(ImageContext->IsTeImage)) {
1097 Status = ImageContext->ImageRead (
1098 ImageContext->Handle,
1100 &ImageContext->SizeOfHeaders,
1101 (VOID *) (UINTN) ImageContext->ImageAddress
1104 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
1107 (UINTN)ImageContext->ImageAddress +
1108 ImageContext->PeCoffHeaderOffset +
1115 Status = ImageContext->ImageRead (
1116 ImageContext->Handle,
1118 &ImageContext->SizeOfHeaders,
1119 (void *)(UINTN)ImageContext->ImageAddress
1122 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
1125 (UINTN)ImageContext->ImageAddress +
1133 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1153 Base = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress);
1155 ImageContext,
1163 ImageContext->ImageError = IMAGE_ERROR_SECTION_NOT_LOADED;
1167 if (ImageContext->IsTeImage) {
1177 if (!(ImageContext->IsTeImage)) {
1178 Status = ImageContext->ImageRead (
1179 ImageContext->Handle,
1185 Status = ImageContext->ImageRead (
1186 ImageContext->Handle,
1194 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1217 if (!(ImageContext->IsTeImage)) {
1225 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1226 ImageContext,
1233 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1234 ImageContext,
1239 ImageContext->EntryPoint = (PHYSICAL_ADDRESS) (
1240 (UINTN)ImageContext->ImageAddress +
1254 if (!(ImageContext->IsTeImage)) {
1270 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1272 ImageContext->FixupDataSize = 0;
1276 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1282 ImageContext->FixupData = NULL;
1287 if (ImageContext->DebugDirectoryEntryRva != 0) {
1288 if (!(ImageContext->IsTeImage)) {
1290 ImageContext,
1291 ImageContext->DebugDirectoryEntryRva
1295 ImageContext->ImageAddress +
1296 ImageContext->DebugDirectoryEntryRva +
1314 if (!(ImageContext->IsTeImage)) {
1315 ImageContext->CodeView = PeCoffLoaderImageAddress (ImageContext, TempDebugEntryRva);
1317 ImageContext->CodeView = (VOID *)(
1318 (UINTN)ImageContext->ImageAddress +
1325 if (ImageContext->CodeView == NULL) {
1326 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1332 if (!(ImageContext->IsTeImage)) {
1333 Status = ImageContext->ImageRead (
1334 ImageContext->Handle,
1337 ImageContext->CodeView
1340 Status = ImageContext->ImageRead (
1341 ImageContext->Handle,
1344 ImageContext->CodeView
1354 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1361 switch (*(UINT32 *) ImageContext->CodeView) {
1363 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
1367 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
1371 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);
1384 ImageContext->HiiResourceData = 0;
1385 if (!(ImageContext->IsTeImage)) {
1399 Base = PeCoffLoaderImageAddress (ImageContext, DirectoryEntry->VirtualAddress);
1437 ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData);
1707 specified by ImageContext was loaded using PeCoffLoaderLoadImage().
1713 If ImageContext is NULL, then ASSERT().
1715 @param ImageContext The pointer to the image context structure that describes the PE/COFF
1723 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
1730 PeCoffLoaderUnloadImageExtraAction (ImageContext);