Lines Matching defs:ImageContext

88   @param  ImageContext    The context of the image being loaded.
97 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
113 Status = ImageContext->ImageRead (
114 ImageContext->Handle,
126 Status = ImageContext->ImageRead (
127 ImageContext->Handle,
137 ImageContext->IsFat = TRUE;
138 ImageContext->FatOffset = Offset;
147 ImageContext->FatOffset = Offset;
149 Status = ImageContext->ImageRead (
150 ImageContext->Handle,
156 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
160 ImageContext->PeCoffHeaderOffset = 0;
166 ImageContext->PeCoffHeaderOffset = DosHdr.e_lfanew;
176 Status = ImageContext->ImageRead (
177 ImageContext->Handle,
178 ImageContext->PeCoffHeaderOffset + Offset,
183 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
191 ImageContext->IsTeImage = TRUE;
192 ImageContext->Machine = Hdr.Te->Machine;
193 ImageContext->ImageType = (UINT16)(Hdr.Te->Subsystem);
198 ImageContext->ImageSize = 0;
199 ImageContext->SectionAlignment = 0;
200 ImageContext->SizeOfHeaders = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN)Hdr.Te->BaseOfCode - (UINTN)Hdr.Te->StrippedSize;
203 ImageContext->IsTeImage = FALSE;
204 ImageContext->Machine = Hdr.Pe32->FileHeader.Machine;
212 ImageContext->ImageType = Hdr.Pe32->OptionalHeader.Subsystem;
213 ImageContext->ImageSize = (UINT64)Hdr.Pe32->OptionalHeader.SizeOfImage;
214 ImageContext->SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;
215 ImageContext->SizeOfHeaders = Hdr.Pe32->OptionalHeader.SizeOfHeaders;
221 ImageContext->ImageType = Hdr.Pe32Plus->OptionalHeader.Subsystem;
222 ImageContext->ImageSize = (UINT64) Hdr.Pe32Plus->OptionalHeader.SizeOfImage;
223 ImageContext->SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;
224 ImageContext->SizeOfHeaders = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders;
226 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
231 ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;
235 if (!PeCoffLoaderImageFormatSupported (ImageContext->Machine)) {
255 DebugDirectoryEntryRva fields of the ImageContext structure.
256 If ImageContext is NULL, then return RETURN_INVALID_PARAMETER.
257 If the PE/COFF image accessed through the ImageRead service in the ImageContext
259 If any errors occur while computing the fields of ImageContext,
260 then the error status is returned in the ImageError field of ImageContext.
262 The ImageRead and Handle fields of ImageContext structure must be valid prior
265 @param ImageContext Pointer to the image context structure that describes the PE/COFF
269 @retval RETURN_INVALID_PARAMETER ImageContext is NULL.
276 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
294 if (ImageContext == NULL) {
300 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
303 Status = PeCoffLoaderGetPeHeader (ImageContext, Hdr);
307 if (ImageContext->IsFat)
309 FatOffset = ImageContext->FatOffset;
317 if (!(ImageContext->IsTeImage)) {
322 ImageContext->ImageAddress = Hdr.Pe32->OptionalHeader.ImageBase;
327 ImageContext->ImageAddress = Hdr.Pe32Plus->OptionalHeader.ImageBase;
330 ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase + Hdr.Te->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));
332 ImageContext->ImageAddress += FatOffset;
338 ImageContext->DestinationAddress = 0;
343 ImageContext->DebugDirectoryEntryRva = 0;
344 ImageContext->CodeView = NULL;
345 ImageContext->PdbPointer = NULL;
358 if ((!(ImageContext->IsTeImage)) && ((Hdr.Pe32->FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0)) {
359 ImageContext->RelocationsStripped = TRUE;
360 } else if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size == 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {
361 ImageContext->RelocationsStripped = TRUE;
363 ImageContext->RelocationsStripped = FALSE;
366 if (!(ImageContext->IsTeImage)) {
393 ImageContext->PeCoffHeaderOffset +
404 Status = ImageContext->ImageRead (
405 ImageContext->Handle,
411 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
432 Status = ImageContext->ImageRead (
433 ImageContext->Handle,
440 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
444 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
446 ImageContext->ImageSize += DebugEntry.SizeOfData;
467 Status = ImageContext->ImageRead (
468 ImageContext->Handle,
474 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
508 ImageContext->ImageSize = (SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize);
520 Status = ImageContext->ImageRead (
521 ImageContext->Handle,
528 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
533 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
547 @param ImageContext The context of the image being loaded.
555 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
562 if (Address >= ImageContext->ImageSize) {
563 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
567 return (CHAR8 *)((UINTN) ImageContext->ImageAddress + Address);
574 If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of
575 ImageContext as the relocation base address. Otherwise, use the DestinationAddress field
576 of ImageContext as the relocation base address. The caller must allocate the relocation
577 fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function.
582 the ImageContext structure must be valid prior to invoking this service.
584 If ImageContext is NULL, then ASSERT().
590 @param ImageContext Pointer to the image context structure that describes the PE/COFF
594 Extended status information is in the ImageError field of ImageContext.
596 Extended status information is in the ImageError field of ImageContext.
598 Extended status information is in the ImageError field of ImageContext.
604 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
625 ASSERT (ImageContext != NULL);
630 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
635 if (ImageContext->RelocationsStripped) {
638 PeCoffLoaderRelocateImageExtraAction (ImageContext);
646 if (ImageContext->DestinationAddress != 0) {
647 BaseAddress = ImageContext->DestinationAddress;
649 BaseAddress = ImageContext->ImageAddress;
652 if (!(ImageContext->IsTeImage)) {
653 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
685 RelocBase = PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress);
687 ImageContext,
700 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
710 ImageContext->ImageAddress +
731 FixupData = ImageContext->FixupData;
740 if ((CHAR8 *) RelocEnd < (CHAR8 *)((UINTN) ImageContext->ImageAddress) ||
741 (CHAR8 *) RelocEnd > (CHAR8 *)((UINTN)ImageContext->ImageAddress + (UINTN)ImageContext->ImageSize)) {
742 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
746 if (!(ImageContext->IsTeImage)) {
747 FixupBase = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress);
752 FixupBase = (CHAR8 *)(UINTN)(ImageContext->ImageAddress +
815 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
835 if (ImageContext->DestinationAddress != 0) {
836 ImageContext->EntryPoint -= (UINT64) ImageContext->ImageAddress;
837 ImageContext->EntryPoint += (UINT64) ImageContext->DestinationAddress;
843 PeCoffLoaderRelocateImageExtraAction (ImageContext);
851 Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer
852 specified by the ImageAddress and ImageSize fields of ImageContext. The caller must allocate
854 The EntryPoint, FixupDataSize, CodeView, PdbPointer and HiiResourceData fields of ImageContext are computed.
857 fields of the ImageContext structure must be valid prior to invoking this service.
859 If ImageContext is NULL, then ASSERT().
865 @param ImageContext Pointer to the image context structure that describes the PE/COFF
869 the ImageAddress and ImageSize fields of ImageContext.
870 Extended status information is in the ImageError field of ImageContext.
872 Extended status information is in the ImageError field of ImageContext.
874 Extended status information is in the ImageError field of ImageContext.
876 Extended status information is in the ImageError field of ImageContext.
882 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
908 ASSERT (ImageContext != NULL);
913 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
920 CopyMem (&CheckContext, ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));
927 if (ImageContext->IsFat)
929 Offset = ImageContext->FatOffset;
935 if (ImageContext->ImageSize < CheckContext.ImageSize) {
936 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_SIZE;
939 if (ImageContext->ImageAddress == 0) {
943 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
956 ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;
963 if (CheckContext.ImageAddress != ImageContext->ImageAddress) {
964 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
971 if (!(ImageContext->IsTeImage)) {
972 if ((ImageContext->ImageAddress & (CheckContext.SectionAlignment - 1)) != 0) {
973 ImageContext->ImageError = IMAGE_ERROR_INVALID_SECTION_ALIGNMENT;
980 if (!(ImageContext->IsTeImage)) {
981 Status = ImageContext->ImageRead (
982 ImageContext->Handle,
984 &ImageContext->SizeOfHeaders,
985 (VOID *) (UINTN) ImageContext->ImageAddress
988 Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
991 (UINTN)ImageContext->ImageAddress +
992 ImageContext->PeCoffHeaderOffset +
999 Status = ImageContext->ImageRead (
1000 ImageContext->Handle,
1002 &ImageContext->SizeOfHeaders,
1003 (void *)(UINTN)ImageContext->ImageAddress
1006 Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);
1009 (UINTN)ImageContext->ImageAddress +
1017 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1037 Base = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress);
1039 ImageContext,
1047 ImageContext->ImageError = IMAGE_ERROR_SECTION_NOT_LOADED;
1051 if (ImageContext->IsTeImage) {
1061 if (!(ImageContext->IsTeImage)) {
1062 Status = ImageContext->ImageRead (
1063 ImageContext->Handle,
1069 Status = ImageContext->ImageRead (
1070 ImageContext->Handle,
1078 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1101 if (!(ImageContext->IsTeImage)) {
1109 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1110 ImageContext,
1117 ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (
1118 ImageContext,
1123 ImageContext->EntryPoint = (PHYSICAL_ADDRESS) (
1124 (UINTN)ImageContext->ImageAddress +
1138 if (!(ImageContext->IsTeImage)) {
1154 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1156 ImageContext->FixupDataSize = 0;
1160 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1166 ImageContext->FixupData = NULL;
1171 if (ImageContext->DebugDirectoryEntryRva != 0) {
1172 if (!(ImageContext->IsTeImage)) {
1174 ImageContext,
1175 ImageContext->DebugDirectoryEntryRva
1179 ImageContext->ImageAddress +
1180 ImageContext->DebugDirectoryEntryRva +
1198 if (!(ImageContext->IsTeImage)) {
1199 ImageContext->CodeView = PeCoffLoaderImageAddress (ImageContext, TempDebugEntryRva);
1201 ImageContext->CodeView = (VOID *)(
1202 (UINTN)ImageContext->ImageAddress +
1209 if (ImageContext->CodeView == NULL) {
1210 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1216 if (!(ImageContext->IsTeImage)) {
1217 Status = ImageContext->ImageRead (
1218 ImageContext->Handle,
1221 ImageContext->CodeView
1224 Status = ImageContext->ImageRead (
1225 ImageContext->Handle,
1228 ImageContext->CodeView
1238 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1245 switch (*(UINT32 *) ImageContext->CodeView) {
1247 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
1251 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
1255 ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);
1268 ImageContext->HiiResourceData = 0;
1269 if (!(ImageContext->IsTeImage)) {
1283 Base = PeCoffLoaderImageAddress (ImageContext, DirectoryEntry->VirtualAddress);
1320 ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData);
1609 specified by ImageContext was loaded using PeCoffLoaderLoadImage().
1615 If ImageContext is NULL, then ASSERT().
1617 @param ImageContext Pointer to the image context structure that describes the PE/COFF
1625 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
1632 PeCoffLoaderUnloadImageExtraAction (ImageContext);