Commit 94c9a77f authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Peter Jones

Handle empty .reloc section in PE/COFF loader

On archs where no EFI aware objcopy is available, the generated PE/COFF
header contains a .reloc section which is completely empty. Handle this by
- returning early from relocate_coff() with EFI_SUCCESS,
- ignoring discardable sections in the section loader.
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
parent 14acaa4a
......@@ -145,6 +145,9 @@ static EFI_STATUS relocate_coff (PE_COFF_LOADER_IMAGE_CONTEXT *context,
return EFI_UNSUPPORTED;
}
if (!context->RelocDir->Size)
return EFI_SUCCESS;
RelocBase = ImageAddress(data, size, context->RelocDir->VirtualAddress);
RelocBaseEnd = ImageAddress(data, size, context->RelocDir->VirtualAddress + context->RelocDir->Size - 1);
......@@ -996,7 +999,11 @@ static EFI_STATUS handle_image (void *data, unsigned int datasize,
* Copy the executable's sections to their desired offsets
*/
Section = context.FirstSection;
for (i = 0; i < context.NumberOfSections; i++) {
for (i = 0; i < context.NumberOfSections; i++, Section++) {
if (Section->Characteristics & 0x02000000)
/* section has EFI_IMAGE_SCN_MEM_DISCARDABLE attr set */
continue;
size = Section->Misc.VirtualSize;
if (size > Section->SizeOfRawData)
......@@ -1021,8 +1028,6 @@ static EFI_STATUS handle_image (void *data, unsigned int datasize,
if (size < Section->Misc.VirtualSize)
ZeroMem (base + size, Section->Misc.VirtualSize - size);
Section += 1;
}
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment