Message ID | 1406717944-24725-3-git-send-email-ard.biesheuvel@linaro.org |
---|---|
State | Accepted |
Commit | c16173fa568582113145daee70fc317b10bc51e0 |
Headers | show |
On Wed, Jul 30, 2014 at 11:59:03AM +0100, Ard Biesheuvel wrote: > The static memory footprint of a kernel Image at boot is larger than the > Image file itself. Things like .bss data and initial page tables are allocated > statically but populated dynamically so their content is not contained in the > Image file. > > However, if EFI (or GRUB) has loaded the Image at precisely the desired offset > of base of DRAM + TEXT_OFFSET, the Image will be booted in place, and we have > to make sure that the allocation done by the PE/COFF loader is large enough. > > Fix this by growing the PE/COFF .text section to cover the entire static > memory footprint. The part of the section that is not covered by the payload > will be zero initialised by the PE/COFF loader. > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > Acked-by: Mark Salter <msalter@redhat.com> This looks sane to me and it seems we do the same for x86 as of c7fb93ec51d4 (x86/efi: Include a .bss section within the PE/COFF headers). So: Acked-by: Mark Rutland <mark.rutland@arm.com> > --- > arch/arm64/kernel/head.S | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index 144f10567f82..b6ca95aee348 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -151,7 +151,7 @@ optional_header: > .short 0x20b // PE32+ format > .byte 0x02 // MajorLinkerVersion > .byte 0x14 // MinorLinkerVersion > - .long _edata - stext // SizeOfCode > + .long _end - stext // SizeOfCode > .long 0 // SizeOfInitializedData > .long 0 // SizeOfUninitializedData > .long efi_stub_entry - efi_head // AddressOfEntryPoint > @@ -169,7 +169,7 @@ extra_header_fields: > .short 0 // MinorSubsystemVersion > .long 0 // Win32VersionValue > > - .long _edata - efi_head // SizeOfImage > + .long _end - efi_head // SizeOfImage > > // Everything before the kernel image is considered part of the header > .long stext - efi_head // SizeOfHeaders > @@ -216,7 +216,7 @@ section_table: > .byte 0 > .byte 0 > .byte 0 // end of 0 padding of section name > - .long _edata - stext // VirtualSize > + .long _end - stext // VirtualSize > .long stext - efi_head // VirtualAddress > .long _edata - stext // SizeOfRawData > .long stext - efi_head // PointerToRawData > -- > 1.8.3.2 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-efi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 144f10567f82..b6ca95aee348 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -151,7 +151,7 @@ optional_header: .short 0x20b // PE32+ format .byte 0x02 // MajorLinkerVersion .byte 0x14 // MinorLinkerVersion - .long _edata - stext // SizeOfCode + .long _end - stext // SizeOfCode .long 0 // SizeOfInitializedData .long 0 // SizeOfUninitializedData .long efi_stub_entry - efi_head // AddressOfEntryPoint @@ -169,7 +169,7 @@ extra_header_fields: .short 0 // MinorSubsystemVersion .long 0 // Win32VersionValue - .long _edata - efi_head // SizeOfImage + .long _end - efi_head // SizeOfImage // Everything before the kernel image is considered part of the header .long stext - efi_head // SizeOfHeaders @@ -216,7 +216,7 @@ section_table: .byte 0 .byte 0 .byte 0 // end of 0 padding of section name - .long _edata - stext // VirtualSize + .long _end - stext // VirtualSize .long stext - efi_head // VirtualAddress .long _edata - stext // SizeOfRawData .long stext - efi_head // PointerToRawData