//\r
return EFI_UNSUPPORTED;\r
}\r
-\r
+ \r
+ //\r
+ // Set EFI memory type based on ImageType\r
+ //\r
+ switch (Image->ImageContext.ImageType) {\r
+ case EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION:\r
+ Image->ImageContext.ImageCodeMemoryType = EfiLoaderCode;\r
+ Image->ImageContext.ImageDataMemoryType = EfiLoaderData;\r
+ break;\r
+ case EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER:\r
+ Image->ImageContext.ImageCodeMemoryType = EfiBootServicesCode;\r
+ Image->ImageContext.ImageDataMemoryType = EfiBootServicesData;\r
+ break;\r
+ case EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:\r
+ case EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER:\r
+ Image->ImageContext.ImageCodeMemoryType = EfiRuntimeServicesCode;\r
+ Image->ImageContext.ImageDataMemoryType = EfiRuntimeServicesData;\r
+ break;\r
+ default:\r
+ Image->ImageContext.ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;\r
+ return EFI_UNSUPPORTED;\r
+ }\r
\r
//\r
// Allocate memory of the correct memory type aligned on the required image boundry\r
UINTN Index;\r
UINTN StartIndex;\r
CHAR8 EfiFileName[256];\r
-\r
- DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Loading driver at 0x%10p EntryPoint=0x%10p ", (VOID *)(UINTN)Image->ImageContext.ImageAddress, (VOID *)(UINTN)Image->ImageContext.EntryPoint));\r
+ \r
+ if (Image->ImageContext.Machine != IMAGE_FILE_MACHINE_IA64) {\r
+ DEBUG ((EFI_D_INFO | EFI_D_LOAD, \r
+ "Loading driver at 0x%10p EntryPoint=0x%10p ", \r
+ (VOID *)(UINTN)Image->ImageContext.ImageAddress, \r
+ (VOID *)(UINTN)Image->ImageContext.EntryPoint));\r
+ } else {\r
+ //\r
+ // For IPF Image, the real entry point should be print.\r
+ // \r
+ DEBUG ((EFI_D_INFO | EFI_D_LOAD, \r
+ "Loading driver at 0x%10p EntryPoint=0x%10p ", \r
+ (VOID *)(UINTN)Image->ImageContext.ImageAddress, \r
+ (VOID *)(UINTN)(*(UINT64 *)(UINTN)Image->ImageContext.EntryPoint)));\r
+ }\r
+ \r
+ //\r
+ // Print Module Name by Pdb file path\r
+ //\r
if (Image->ImageContext.PdbPointer != NULL) {\r
StartIndex = 0;\r
for (Index = 0; Image->ImageContext.PdbPointer[Index] != 0; Index++) {\r