X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBasePeCoffLib%2FBasePeCoff.c;h=cce9a825205249d52ca0e56c78b5c62187245282;hp=0ddbc7a672e295d22f82c63da4841f8178041ff7;hb=582c7220f83e9e37778cd2ef5a34cd79d1494538;hpb=513b53b1396b7dd668d1499eaa6032a5c6309096 diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c index 0ddbc7a672..cce9a82520 100644 --- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c @@ -299,7 +299,7 @@ PeCoffLoaderGetImageInfo ( ImageContext->ImageAddress = Hdr.Pe32Plus->OptionalHeader.ImageBase; } } else { - ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase); + ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase + Hdr.Te->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER)); } // @@ -391,7 +391,7 @@ PeCoffLoaderGetImageInfo ( } if (DebugDirectoryEntryFileOffset != 0) { - for (Index = 0; Index < DebugDirectoryEntry->Size; Index++) { + for (Index = 0; Index < DebugDirectoryEntry->Size; Index += Size) { // // Read next debug directory entry // @@ -406,9 +406,8 @@ PeCoffLoaderGetImageInfo ( ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ; return Status; } - if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) { - ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index * sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)); + ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index); if (DebugEntry.RVA == 0 && DebugEntry.FileOffset != 0) { ImageContext->ImageSize += DebugEntry.SizeOfData; } @@ -480,7 +479,7 @@ PeCoffLoaderGetImageInfo ( } if (DebugDirectoryEntryFileOffset != 0) { - for (Index = 0; Index < DebugDirectoryEntry->Size; Index++) { + for (Index = 0; Index < DebugDirectoryEntry->Size; Index += Size) { // // Read next debug directory entry // @@ -497,7 +496,7 @@ PeCoffLoaderGetImageInfo ( } if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) { - ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index * sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)); + ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index); return RETURN_SUCCESS; } } @@ -599,8 +598,11 @@ PeCoffLoaderRelocateImage ( // if (ImageContext->DestinationAddress != 0) { BaseAddress = ImageContext->DestinationAddress; - } else { + } else if (!(ImageContext->IsTeImage)) { BaseAddress = ImageContext->ImageAddress; + } else { + Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress); + BaseAddress = ImageContext->ImageAddress + sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize; } if (!(ImageContext->IsTeImage)) {