if (!CompareGuid (&PartitionEntry->PartitionTypeGUID, &mZeroGuid)) {\r
NumberOfPartition++; \r
}\r
- PartitionEntry++;\r
+ PartitionEntry = (EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntry + PrimaryHeader->SizeOfPartitionEntry);\r
}\r
\r
//\r
- // Parepare Data for Measurement\r
+ // Prepare Data for Measurement\r
// \r
EventSize = (UINT32)(sizeof (EFI_GPT_DATA) - sizeof (GptData->Partitions) \r
+ NumberOfPartition * PrimaryHeader->SizeOfPartitionEntry);\r
- TcgEvent = (TCG_PCR_EVENT *) AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT));\r
+ TcgEvent = (TCG_PCR_EVENT *) AllocateZeroPool (EventSize + sizeof (TCG_PCR_EVENT_HDR));\r
if (TcgEvent == NULL) {\r
FreePool (PrimaryHeader);\r
FreePool (EntryPtr);\r
for (Index = 0; Index < PrimaryHeader->NumberOfPartitionEntries; Index++) {\r
if (!CompareGuid (&PartitionEntry->PartitionTypeGUID, &mZeroGuid)) {\r
CopyMem (\r
- (UINT8 *)&GptData->Partitions + NumberOfPartition * sizeof (EFI_PARTITION_ENTRY),\r
+ (UINT8 *)&GptData->Partitions + NumberOfPartition * PrimaryHeader->SizeOfPartitionEntry,\r
(UINT8 *)PartitionEntry,\r
- sizeof (EFI_PARTITION_ENTRY)\r
+ PrimaryHeader->SizeOfPartitionEntry\r
);\r
NumberOfPartition++;\r
}\r
- PartitionEntry++;\r
+ PartitionEntry =(EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntry + PrimaryHeader->SizeOfPartitionEntry);\r
}\r
\r
//\r
// Measuring PE/COFF Image Header;\r
// But CheckSum field and SECURITY data directory (certificate) are excluded\r
//\r
- Magic = Hdr.Pe32->OptionalHeader.Magic;\r
+ if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
+ //\r
+ // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value \r
+ // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the \r
+ // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC\r
+ // then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
+ //\r
+ Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;\r
+ } else {\r
+ //\r
+ // Get the magic value from the PE/COFF Optional Header\r
+ //\r
+ Magic = Hdr.Pe32->OptionalHeader.Magic;\r
+ }\r
\r
//\r
// 3. Calculate the distance from the base of the image header to the image checksum address.\r