Lines Matching defs:ImageContext

10   The basic guideline is that caller need provide ImageContext->ImageRead () with the

87 @param ImageContext The context of the image being loaded.
96 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
117 Status = ImageContext->ImageRead (
118 ImageContext->Handle,
124 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
131 ImageContext->PeCoffHeaderOffset = 0;
137 ImageContext->PeCoffHeaderOffset = DosHdr.e_lfanew;
148 Status = ImageContext->ImageRead (
149 ImageContext->Handle,
150 ImageContext->PeCoffHeaderOffset,
155 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
166 ImageContext->IsTeImage = TRUE;
167 ImageContext->Machine = Hdr.Te->Machine;
168 ImageContext->ImageType = (UINT16)(Hdr.Te->Subsystem);
173 ImageContext->ImageSize = 0;
174 ImageContext->SectionAlignment = 0;
175 ImageContext->SizeOfHeaders = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN)Hdr.Te->BaseOfCode - (UINTN)Hdr.Te->StrippedSize;
181 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
189 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
198 Status = ImageContext->ImageRead (
199 ImageContext->Handle,
200 ImageContext->SizeOfHeaders - 1,
205 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
218 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
222 ImageContext->IsTeImage = FALSE;
223 ImageContext->Machine = Hdr.Pe32->FileHeader.Machine;
232 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
244 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
248 SectionHeaderOffset = ImageContext->PeCoffHeaderOffset + sizeof (UINT32) + sizeof (EFI_IMAGE_FILE_HEADER) + Hdr.Pe32->FileHeader.SizeOfOptionalHeader;
253 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
257 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
265 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
269 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
273 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
282 Status = ImageContext->ImageRead (
283 ImageContext->Handle,
289 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
308 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
317 Status = ImageContext->ImageRead (
318 ImageContext->Handle,
325 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
337 ImageContext->ImageType = Hdr.Pe32->OptionalHeader.Subsystem;
338 ImageContext->ImageSize = (UINT64)Hdr.Pe32->OptionalHeader.SizeOfImage;
339 ImageContext->SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;
340 ImageContext->SizeOfHeaders = Hdr.Pe32->OptionalHeader.SizeOfHeaders;
347 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
358 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
362 SectionHeaderOffset = ImageContext->PeCoffHeaderOffset + sizeof (UINT32) + sizeof (EFI_IMAGE_FILE_HEADER) + Hdr.Pe32Plus->FileHeader.SizeOfOptionalHeader;
367 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
371 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
379 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
383 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
387 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
396 Status = ImageContext->ImageRead (
397 ImageContext->Handle,
403 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
422 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
431 Status = ImageContext->ImageRead (
432 ImageContext->Handle,
439 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
451 ImageContext->ImageType = Hdr.Pe32Plus->OptionalHeader.Subsystem;
452 ImageContext->ImageSize = (UINT64) Hdr.Pe32Plus->OptionalHeader.SizeOfImage;
453 ImageContext->SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;
454 ImageContext->SizeOfHeaders = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders;
456 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
460 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
464 if (!PeCoffLoaderImageFormatSupported (ImageContext->Machine)) {
477 if (ImageContext->IsTeImage) {
481 SectionHeaderOffset = ImageContext->PeCoffHeaderOffset + sizeof (UINT32) + sizeof (EFI_IMAGE_FILE_HEADER) + Hdr.Pe32->FileHeader.SizeOfOptionalHeader;
491 Status = ImageContext->ImageRead (
492 ImageContext->Handle,
498 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
508 if (ImageContext->IsTeImage) {
516 if (SectionHeader.VirtualAddress < ImageContext->SizeOfHeaders ||
517 SectionHeader.PointerToRawData < ImageContext->SizeOfHeaders) {
518 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
526 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
536 Status = ImageContext->ImageRead (
537 ImageContext->Handle,
543 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
566 DebugDirectoryEntryRva fields of the ImageContext structure.
567 If ImageContext is NULL, then return RETURN_INVALID_PARAMETER.
568 If the PE/COFF image accessed through the ImageRead service in the ImageContext
570 If any errors occur while computing the fields of ImageContext,
571 then the error status is returned in the ImageError field of ImageContext.
573 The ImageRead and Handle fields of ImageContext structure must be valid prior
581 @param ImageContext The pointer to the image context structure that describes the PE/COFF
585 @retval RETURN_INVALID_PARAMETER ImageContext is NULL.
592 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
611 if (ImageContext == NULL) {
617 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
620 Status = PeCoffLoaderGetPeHeader (ImageContext, Hdr);
630 if (!(ImageContext->IsTeImage)) {
636 ImageContext->ImageAddress = Hdr.Pe32->OptionalHeader.ImageBase;
641 ImageContext->ImageAddress = Hdr.Pe32Plus->OptionalHeader.ImageBase;
645 ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase + TeStrippedOffset);
652 ImageContext->DestinationAddress = 0;
657 ImageContext->DebugDirectoryEntryRva = 0;
658 ImageContext->CodeView = NULL;
659 ImageContext->PdbPointer = NULL;
672 if ((!(ImageContext->IsTeImage)) && ((Hdr.Pe32->FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0)) {
673 ImageContext->RelocationsStripped = TRUE;
674 } else if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size == 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {
675 ImageContext->RelocationsStripped = TRUE;
677 ImageContext->RelocationsStripped = FALSE;
680 if (!(ImageContext->IsTeImage)) {
707 ImageContext->PeCoffHeaderOffset +
719 Status = ImageContext->ImageRead (
720 ImageContext->Handle,
726 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
750 Status = ImageContext->ImageRead (
751 ImageContext->Handle,
757 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
767 // ImageContext->ImageSize when DebugEntry.RVA == 0.
770 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
772 ImageContext->ImageSize += DebugEntry.SizeOfData;
794 Status = ImageContext->ImageRead (
795 ImageContext->Handle,
801 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
837 ImageContext->ImageSize = (SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize) - TeStrippedOffset;
850 Status = ImageContext->ImageRead (
851 ImageContext->Handle,
857 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
865 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
879 @param ImageContext The context of the image being loaded.
888 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
896 if (Address >= ImageContext->ImageSize + TeStrippedOffset) {
897 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
901 return (CHAR8 *)((UINTN) ImageContext->ImageAddress + Address - TeStrippedOffset);
907 If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of
908 ImageContext as the relocation base address. Otherwise, use the DestinationAddress field
909 of ImageContext as the relocation base address. The caller must allocate the relocation
910 fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function.
915 the ImageContext structure must be valid prior to invoking this service.
917 If ImageContext is NULL, then ASSERT().
923 @param ImageContext The pointer to the image context structure that describes the PE/COFF
927 Extended status information is in the ImageError field of ImageContext.
929 Extended status information is in the ImageError field of ImageContext.
931 Extended status information is in the ImageError field of ImageContext.
937 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
960 ASSERT (ImageContext != NULL);
965 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
970 if (ImageContext->RelocationsStripped) {
973 PeCoffLoaderRelocateImageExtraAction (ImageContext);
981 if (ImageContext->DestinationAddress != 0) {
982 BaseAddress = ImageContext->DestinationAddress;
984 BaseAddress = ImageContext->ImageAddress;
987 if (!(ImageContext->IsTeImage)) {
988 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
1026 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
1040 RelocBase = (EFI_IMAGE_BASE_RELOCATION *) PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress, TeStrippedOffset);
1041 RelocBaseEnd = (EFI_IMAGE_BASE_RELOCATION *) PeCoffLoaderImageAddress (ImageContext,
1046 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1064 FixupData = ImageContext->FixupData;
1072 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1076 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1082 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1085 FixupBase = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress, TeStrippedOffset);
1087 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1095 Fixup = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress + (*Reloc & 0xFFF), TeStrippedOffset);
1097 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1150 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1166 ASSERT ((UINTN)FixupData <= (UINTN)ImageContext->FixupData + ImageContext->FixupDataSize);
1171 if (ImageContext->DestinationAddress != 0) {
1172 ImageContext->EntryPoint -= (UINT64) ImageContext->ImageAddress;
1173 ImageContext->EntryPoint += (UINT64) ImageContext->DestinationAddress;
1179 PeCoffLoaderRelocateImageExtraAction (ImageContext);
1187 Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer
1188 specified by the ImageAddress and ImageSize fields of ImageContext. The caller must allocate
1190 The EntryPoint, FixupDataSize, CodeView, PdbPointer and HiiResourceData fields of ImageContext are computed.
1193 fields of the ImageContext structure must be valid prior to invoking this service.
1195 If ImageContext is NULL, then ASSERT().
1201 @param ImageContext The pointer to the image context structure that describes the PE/COFF
1205 the ImageAddress and ImageSize fields of ImageContext.
1206 Extended status information is in the ImageError field of ImageContext.
1208 Extended status information is in the ImageError field of ImageContext.
1210 Extended status information is in the ImageError field of ImageContext.
1212 Extended status information is in the ImageError field of ImageContext.
1218 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
1244 ASSERT (ImageContext != NULL);
1249 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
1256 CopyMem (&CheckContext, ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));
1266 if (ImageContext->ImageSize < CheckContext.ImageSize) {
1267 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_SIZE;
1270 if (ImageContext->ImageAddress == 0) {
1274 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
1287 ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;
1294 if (CheckContext.ImageAddress != ImageContext->ImageAddress) {
1295 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
1302 if (!(ImageContext->IsTeImage)) {
1303 if ((ImageContext->ImageAddress & (CheckContext.SectionAlignment - 1)) != 0) {
1304 ImageContext->ImageError = IMAGE_ERROR_INVALID_SECTION_ALIGNMENT;
1311 if (!(ImageContext->IsTeImage)) {
1312 Status = ImageContext->ImageRead (
1313 ImageContext->Handle,
1315 &ImageContext->SizeOfHeaders,
1316 (VOID *) (UINTN) ImageContext->ImageAddress
1319 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
1322 (UINTN)ImageContext->ImageAddress +
1323 ImageContext->PeCoffHeaderOffset +
1331 Status = ImageContext->ImageRead (
1332 ImageContext->Handle,
1334 &ImageContext->SizeOfHeaders,
1335 (void *)(UINTN)ImageContext->ImageAddress
1338 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
1340 (UINTN)ImageContext->ImageAddress +
1348 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1368 Base = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress, TeStrippedOffset);
1369 End = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress + Section->Misc.VirtualSize - 1, TeStrippedOffset);
1375 ImageContext->ImageError = IMAGE_ERROR_SECTION_NOT_LOADED;
1380 Status = ImageContext->ImageRead (
1381 ImageContext->Handle,
1387 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1410 if (!(ImageContext->IsTeImage)) {
1418 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1419 ImageContext,
1427 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1428 ImageContext,
1434 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1435 ImageContext,
1448 if (!(ImageContext->IsTeImage)) {
1467 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINT64);
1469 ImageContext->FixupDataSize = 0;
1473 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINT64);
1479 ImageContext->FixupData = NULL;
1484 if (ImageContext->DebugDirectoryEntryRva != 0) {
1486 ImageContext,
1487 ImageContext->DebugDirectoryEntryRva,
1491 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1506 ImageContext->CodeView = PeCoffLoaderImageAddress (ImageContext, TempDebugEntryRva, TeStrippedOffset);
1507 if (ImageContext->CodeView == NULL) {
1508 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
1514 Status = ImageContext->ImageRead (
1515 ImageContext->Handle,
1518 ImageContext->CodeView
1527 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1534 switch (*(UINT32 *) ImageContext->CodeView) {
1537 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1540 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
1545 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1548 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
1553 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1556 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);
1568 ImageContext->HiiResourceData = 0;
1569 if (!(ImageContext->IsTeImage)) {
1585 Base = PeCoffLoaderImageAddress (ImageContext, DirectoryEntry->VirtualAddress, 0);
1591 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1602 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1620 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1627 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1637 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1644 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1656 ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;
1660 ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData, 0);
1934 specified by ImageContext was loaded using PeCoffLoaderLoadImage().
1940 If ImageContext is NULL, then ASSERT().
1942 @param ImageContext The pointer to the image context structure that describes the PE/COFF
1950 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
1957 PeCoffLoaderUnloadImageExtraAction (ImageContext);