//\r
CoffOffset = sizeof(EFI_IMAGE_DOS_HEADER) + 0x40;\r
NtHdrOffset = CoffOffset;\r
- CoffOffset += sizeof(EFI_IMAGE_OPTIONAL_HEADER_UNION);\r
+ switch (Ehdr->e_machine) {\r
+ case EM_386:\r
+ case EM_ARM:\r
+ CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS32);\r
+ break;\r
+ case EM_X86_64:\r
+ case EM_IA_64:\r
+ CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS64);\r
+ break;\r
+ default:\r
+ VerboseMsg ("%s unknown e_machine type. Assume IA-32", (UINTN)Ehdr->e_machine);\r
+ CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS32);\r
+ break;\r
+ }\r
+\r
TableOffset = CoffOffset;\r
CoffOffset += CoffNbrSections * sizeof(EFI_IMAGE_SECTION_HEADER);\r
\r
//\r
// Compute sections new address.\r
//\r
+ \r
ScanSections();\r
\r
VerboseMsg ("Compute sections new address.");\r
//\r
// Init variable.\r
//\r
- DebugDirectoryEntryRva = 0;\r
- ExportDirectoryEntryRva = 0;\r
- ResourceDirectoryEntryRva = 0;\r
+ DebugDirectoryEntryRva = 0;\r
+ ExportDirectoryEntryRva = 0;\r
+ ResourceDirectoryEntryRva = 0;\r
+ DebugDirectoryEntryFileOffset = 0;\r
+ ExportDirectoryEntryFileOffset = 0;\r
+ ResourceDirectoryEntryFileOffset = 0;\r
DosHdr = (EFI_IMAGE_DOS_HEADER *) FileBuffer;\r
FileHdr = (EFI_IMAGE_FILE_HEADER *) (FileBuffer + DosHdr->e_lfanew + sizeof (UINT32));\r
\r
//\r
FileHdr->TimeDateStamp = 0;\r
\r
- if (ExportDirectoryEntryRva != 0) {\r
+ if (ExportDirectoryEntryFileOffset != 0) {\r
NewTimeStamp = (UINT32 *) (FileBuffer + ExportDirectoryEntryFileOffset + sizeof (UINT32));\r
*NewTimeStamp = 0;\r
}\r
\r
- if (ResourceDirectoryEntryRva != 0) {\r
+ if (ResourceDirectoryEntryFileOffset != 0) {\r
NewTimeStamp = (UINT32 *) (FileBuffer + ResourceDirectoryEntryFileOffset + sizeof (UINT32));\r
*NewTimeStamp = 0;\r
}\r
\r
- if (DebugDirectoryEntryRva != 0) {\r
+ if (DebugDirectoryEntryFileOffset != 0) {\r
DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (FileBuffer + DebugDirectoryEntryFileOffset);\r
DebugEntry->TimeDateStamp = 0;\r
if (ZeroDebugFlag) {\r