diff options
author | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-09-05 11:28:57 +0000 |
---|---|---|
committer | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-09-05 11:28:57 +0000 |
commit | 7c9e5810d09c0f084096d69c6a3823e685505316 (patch) | |
tree | 32c775bed574a2993879c46016794aa17f0473b5 /EdkModulePkg/Core/Pei | |
parent | 701d95b339340ec89c71ae980a2b72e1e4d9680e (diff) | |
download | edk2-7c9e5810d09c0f084096d69c6a3823e685505316.zip edk2-7c9e5810d09c0f084096d69c6a3823e685505316.tar.gz edk2-7c9e5810d09c0f084096d69c6a3823e685505316.tar.bz2 |
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/Core/Pei')
-rw-r--r-- | EdkModulePkg/Core/Pei/Image/Image.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/EdkModulePkg/Core/Pei/Image/Image.c b/EdkModulePkg/Core/Pei/Image/Image.c index c5c68c1..6a26bb2 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;
|