Lines Matching defs:ImageContext

30   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT    *ImageContext,
38 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
46 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
85 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
97 ImageContext - The context of the image being loaded
114 ImageContext->IsTeImage = FALSE;
119 Status = ImageContext->ImageRead (
120 ImageContext->Handle,
126 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
130 ImageContext->PeCoffHeaderOffset = 0;
135 ImageContext->PeCoffHeaderOffset = DosHdr.e_lfanew;
140 *PeHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINTN)ImageContext->Handle + ImageContext->PeCoffHeaderOffset);
149 ImageContext->IsTeImage = TRUE;
158 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
170 ImageContext - The context of the image being loaded
187 if (ImageContext->IsTeImage == FALSE) {
188 ImageContext->Machine = PeHdr->Pe32.FileHeader.Machine;
190 ImageContext->Machine = TeHdr->Machine;
193 if (ImageContext->Machine != EFI_IMAGE_MACHINE_IA32 && \
194 ImageContext->Machine != EFI_IMAGE_MACHINE_IA64 && \
195 ImageContext->Machine != EFI_IMAGE_MACHINE_X64 && \
196 ImageContext->Machine != EFI_IMAGE_MACHINE_ARMT && \
197 ImageContext->Machine != EFI_IMAGE_MACHINE_EBC) {
198 if (ImageContext->Machine == IMAGE_FILE_MACHINE_ARM) {
204 ImageContext->Machine = EFI_IMAGE_MACHINE_ARMT;
205 if (ImageContext->IsTeImage == FALSE) {
206 PeHdr->Pe32.FileHeader.Machine = ImageContext->Machine;
208 TeHdr->Machine = ImageContext->Machine;
223 if (ImageContext->IsTeImage == FALSE) {
224 ImageContext->ImageType = PeHdr->Pe32.OptionalHeader.Subsystem;
226 ImageContext->ImageType = (UINT16) (TeHdr->Subsystem);
229 if (ImageContext->ImageType != EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION && \
230 ImageContext->ImageType != EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER && \
231 ImageContext->ImageType != EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER && \
232 ImageContext->ImageType != EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER) {
245 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
256 ImageContext - The context of the image being loaded
261 RETURN_INVALID_PARAMETER - ImageContext is NULL.
264 ImageContext->ImageRead() function
286 if (NULL == ImageContext) {
292 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
294 Status = PeCoffLoaderGetPeHeader (ImageContext, &PeHdr, &TeHdr);
302 Status = PeCoffLoaderCheckImageType (ImageContext, PeHdr, TeHdr);
311 if (!(ImageContext->IsTeImage)) {
313 ImageContext->ImageAddress = (PHYSICAL_ADDRESS) OptionHeader.Optional32->ImageBase;
315 ImageContext->ImageAddress = (PHYSICAL_ADDRESS) OptionHeader.Optional64->ImageBase;
318 ImageContext->ImageAddress = (PHYSICAL_ADDRESS) (TeHdr->ImageBase + TeHdr->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));
324 ImageContext->DestinationAddress = 0;
329 ImageContext->CodeView = NULL;
330 ImageContext->PdbPointer = NULL;
343 if ((!(ImageContext->IsTeImage)) && ((PeHdr->Pe32.FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0)) {
344 ImageContext->RelocationsStripped = TRUE;
345 } else if ((ImageContext->IsTeImage) && (TeHdr->DataDirectory[0].Size == 0)) {
346 ImageContext->RelocationsStripped = TRUE;
348 ImageContext->RelocationsStripped = FALSE;
351 if (!(ImageContext->IsTeImage)) {
354 ImageContext->ImageSize = (UINT64) OptionHeader.Optional32->SizeOfImage;
355 ImageContext->SectionAlignment = OptionHeader.Optional32->SectionAlignment;
356 ImageContext->SizeOfHeaders = OptionHeader.Optional32->SizeOfHeaders;
367 ImageContext->ImageSize = (UINT64) OptionHeader.Optional64->SizeOfImage;
368 ImageContext->SectionAlignment = OptionHeader.Optional64->SectionAlignment;
369 ImageContext->SizeOfHeaders = OptionHeader.Optional64->SizeOfHeaders;
390 ImageContext->PeCoffHeaderOffset +
401 Status = ImageContext->ImageRead (
402 ImageContext->Handle,
408 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
428 Status = ImageContext->ImageRead (
429 ImageContext->Handle,
435 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
440 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
442 ImageContext->ImageSize += DebugEntry.SizeOfData;
451 ImageContext->ImageSize = 0;
452 ImageContext->SectionAlignment = 4096;
453 ImageContext->SizeOfHeaders = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN) TeHdr->BaseOfCode - (UINTN) TeHdr->StrippedSize;
466 Status = ImageContext->ImageRead (
467 ImageContext->Handle,
473 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
507 ImageContext->ImageSize = (SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize +
508 ImageContext->SectionAlignment - 1) & ~(ImageContext->SectionAlignment - 1);
520 Status = ImageContext->ImageRead (
521 ImageContext->Handle,
527 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
532 ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);
545 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
556 ImageContext - The context of the image being loaded
566 if (Address >= ImageContext->ImageSize) {
567 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
571 return (UINT8 *) ((UINTN) ImageContext->ImageAddress + Address);
577 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
589 ImageContext - Contains information on the loaded image to relocate
622 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
627 if (ImageContext->RelocationsStripped) {
632 // Use DestinationAddress field of ImageContext as the relocation address even if it is 0.
634 BaseAddress = ImageContext->DestinationAddress;
636 if (!(ImageContext->IsTeImage)) {
637 PeHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((UINTN)ImageContext->ImageAddress +
638 ImageContext->PeCoffHeaderOffset);
643 MachineType = ImageContext->Machine;
653 RelocBase = PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress);
655 ImageContext,
667 MachineType = ImageContext->Machine;
677 RelocBase = PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress);
679 ImageContext,
690 TeHdr = (EFI_TE_IMAGE_HEADER *) (UINTN) (ImageContext->ImageAddress);
700 ImageContext->ImageAddress +
711 FixupData = ImageContext->FixupData;
716 if (!(ImageContext->IsTeImage)) {
717 FixupBase = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress);
719 FixupBase = (CHAR8 *)(UINTN)(ImageContext->ImageAddress +
726 if ((CHAR8 *) RelocEnd < (CHAR8 *) ((UINTN) ImageContext->ImageAddress) ||
727 (CHAR8 *) RelocEnd > (CHAR8 *)((UINTN)ImageContext->ImageAddress +
728 (UINTN)ImageContext->ImageSize)) {
729 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
777 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
799 ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;
822 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
834 ImageContext - Contains information on image to load into memory
868 ImageContext->ImageError = IMAGE_ERROR_SUCCESS;
875 CopyMem (&CheckContext, ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));
885 if (ImageContext->ImageSize < CheckContext.ImageSize) {
886 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_SIZE;
900 ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;
907 if (CheckContext.ImageAddress != ImageContext->ImageAddress) {
908 ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;
915 if (!(ImageContext->IsTeImage)) {
916 if ((ImageContext->ImageAddress & (CheckContext.SectionAlignment - 1)) != 0) {
917 ImageContext->ImageError = IMAGE_ERROR_INVALID_SECTION_ALIGNMENT;
924 if (!(ImageContext->IsTeImage)) {
925 Status = ImageContext->ImageRead (
926 ImageContext->Handle,
928 &ImageContext->SizeOfHeaders,
929 (VOID *) (UINTN) ImageContext->ImageAddress
933 ((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);
938 (UINTN)ImageContext->ImageAddress +
939 ImageContext->PeCoffHeaderOffset +
946 Status = ImageContext->ImageRead (
947 ImageContext->Handle,
949 &ImageContext->SizeOfHeaders,
950 (VOID *) (UINTN) ImageContext->ImageAddress
953 TeHdr = (EFI_TE_IMAGE_HEADER *) (UINTN) (ImageContext->ImageAddress);
956 (UINTN)ImageContext->ImageAddress +
964 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
977 Base = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress);
979 ImageContext,
987 ImageContext->ImageError = IMAGE_ERROR_SECTION_NOT_LOADED;
992 if (ImageContext->IsTeImage) {
1010 if (!(ImageContext->IsTeImage)) {
1011 Status = ImageContext->ImageRead (
1012 ImageContext->Handle,
1018 Status = ImageContext->ImageRead (
1019 ImageContext->Handle,
1027 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1049 if (!(ImageContext->IsTeImage)) {
1050 ImageContext->EntryPoint = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (
1051 ImageContext,
1055 ImageContext->EntryPoint = (PHYSICAL_ADDRESS) (
1056 (UINTN)ImageContext->ImageAddress +
1070 if (!(ImageContext->IsTeImage)) {
1075 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1077 ImageContext->FixupDataSize = 0;
1083 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1085 ImageContext->FixupDataSize = 0;
1090 ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);
1096 ImageContext->FixupData = NULL;
1101 if (ImageContext->DebugDirectoryEntryRva != 0) {
1102 if (!(ImageContext->IsTeImage)) {
1104 ImageContext,
1105 ImageContext->DebugDirectoryEntryRva
1109 ImageContext->ImageAddress +
1110 ImageContext->DebugDirectoryEntryRva +
1128 if (!(ImageContext->IsTeImage)) {
1129 ImageContext->CodeView = PeCoffLoaderImageAddress (ImageContext, TempDebugEntryRva);
1131 ImageContext->CodeView = (VOID *)(
1132 (UINTN)ImageContext->ImageAddress +
1139 if (ImageContext->CodeView == NULL) {
1140 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1146 if (!(ImageContext->IsTeImage)) {
1147 Status = ImageContext->ImageRead (
1148 ImageContext->Handle,
1151 ImageContext->CodeView
1154 Status = ImageContext->ImageRead (
1155 ImageContext->Handle,
1158 ImageContext->CodeView
1168 ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;
1175 switch (*(UINT32 *) ImageContext->CodeView) {
1177 ImageContext->PdbPointer = (CHAR8 *) ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);
1181 ImageContext->PdbPointer = (CHAR8 *) ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);
1185 ImageContext->PdbPointer = (CHAR8 *) ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);