summaryrefslogtreecommitdiffstats
path: root/EdkModulePkg
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2006-09-05 11:28:57 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2006-09-05 11:28:57 +0000
commit7c9e5810d09c0f084096d69c6a3823e685505316 (patch)
tree32c775bed574a2993879c46016794aa17f0473b5 /EdkModulePkg
parent701d95b339340ec89c71ae980a2b72e1e4d9680e (diff)
downloadedk2-7c9e5810d09c0f084096d69c6a3823e685505316.tar.gz
edk2-7c9e5810d09c0f084096d69c6a3823e685505316.tar.bz2
edk2-7c9e5810d09c0f084096d69c6a3823e685505316.zip
Fix PeiLoadImage() for compressed peim to print the correct image address and entrypoint.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1467 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg')
-rw-r--r--EdkModulePkg/Core/Pei/Image/Image.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/EdkModulePkg/Core/Pei/Image/Image.c b/EdkModulePkg/Core/Pei/Image/Image.c
index c5c68c1d92..6a26bb2ab4 100644
--- a/EdkModulePkg/Core/Pei/Image/Image.c
+++ b/EdkModulePkg/Core/Pei/Image/Image.c
@@ -105,10 +105,10 @@ Returns:
}
//
- // Got the entry point from ImageEntryPoint
+ // Got the entry point from ImageEntryPoint and ImageStartAddress
//
+ Pe32Data = (VOID *) ((UINTN) ImageAddress);
*EntryPoint = (VOID *) ((UINTN) ImageEntryPoint);
- return EFI_SUCCESS;
} else {
//
// Retrieve the entry point from the TE image header
@@ -171,23 +171,27 @@ Returns:
// is present in the image. You have to check the NumberOfRvaAndSizes in
// the optional header to verify a desired directory entry is there.
//
- DebugEntry = NULL;
- DirectoryEntry = NULL;
- TEImageAdjust = 0;
+ DebugEntry = NULL;
+ DirectoryEntry = NULL;
+ NumberOfRvaAndSizes = 0;
+ TEImageAdjust = 0;
+
if (TEImageHeader == NULL) {
if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
//
- // Use PE32 offset
+ // Use PE32 offset get Debug Directory Entry
//
NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
- } else {
+ DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);
+ } else if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
//
- // Use PE32+ offset
+ // Use PE32+ offset get Debug Directory Entry
//
NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;
DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);
- }
+ DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) Pe32Data + DirectoryEntry->VirtualAddress);
+ }
if (NumberOfRvaAndSizes <= EFI_IMAGE_DIRECTORY_ENTRY_DEBUG) {
DirectoryEntry = NULL;