}\r
\r
//\r
- // Got the entry point from ImageEntryPoint\r
+ // Got the entry point from ImageEntryPoint and ImageStartAddress\r
//\r
+ Pe32Data = (VOID *) ((UINTN) ImageAddress);\r
*EntryPoint = (VOID *) ((UINTN) ImageEntryPoint);\r
- return EFI_SUCCESS;\r
} else {\r
//\r
// Retrieve the entry point from the TE image header\r
// is present in the image. You have to check the NumberOfRvaAndSizes in\r
// the optional header to verify a desired directory entry is there.\r
//\r
- DebugEntry = NULL;\r
- DirectoryEntry = NULL;\r
- TEImageAdjust = 0;\r
+ DebugEntry = NULL;\r
+ DirectoryEntry = NULL;\r
+ NumberOfRvaAndSizes = 0;\r
+ TEImageAdjust = 0;\r
+ \r
if (TEImageHeader == NULL) {\r
if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
// \r
- // Use PE32 offset\r
+ // Use PE32 offset get Debug Directory Entry\r
//\r
NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
- } else {\r
+ DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);\r
+ } else if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
// \r
- // Use PE32+ offset\r
+ // Use PE32+ offset get Debug Directory Entry\r
//\r
NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
- } \r
+ DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);\r
+ }\r
\r
if (NumberOfRvaAndSizes <= EFI_IMAGE_DIRECTORY_ENTRY_DEBUG) {\r
DirectoryEntry = NULL;\r