[PATCH] arm64: Expand arm64 image header
Roy Franz
roy.franz at linaro.org
Tue Aug 20 13:25:05 EDT 2013
On Thu, Aug 15, 2013 at 10:40 AM, Mark Salter <msalter at redhat.com> wrote:
> On Thu, 2013-08-15 at 08:49 -0700, Roy Franz wrote:
>> On Wed, Aug 14, 2013 at 8:58 PM, Mark Salter <msalter at redhat.com> wrote:
>> > On Wed, 2013-08-14 at 16:10 -0700, Roy Franz wrote:
>> >> Expand the arm64 image header to allow for co-existance with
>> >> PE/COFF header required by the EFI stub. The PE/COFF format
>> >> requires the "MZ" header to be at offset 0, and the offset
>> >> to the PE/COFF header to be at offset 0x3c. The image
>> >> header is expanded to allow 2 instructions at the beginning
>> >> to accommodate a benign intruction at offset 0 that includes
>> >> the "MZ" header, a magic number, and the offset to the PE/COFF
>> >> header.
>> >>
>> >>
>> >> Signed-off-by: Roy Franz <roy.franz at linaro.org>
>> >> ---
>> >> Documentation/arm64/booting.txt | 16 +++++++++++++---
>> >> arch/arm64/kernel/head.S | 8 ++++++++
>> >> 2 files changed, 21 insertions(+), 3 deletions(-)
>> >>
>> >> diff --git a/Documentation/arm64/booting.txt b/Documentation/arm64/booting.txt
>> >> index 9c4d388..5273c4d 100644
>> >> --- a/Documentation/arm64/booting.txt
>> >> +++ b/Documentation/arm64/booting.txt
>> >> @@ -68,13 +68,23 @@ Image target is available instead.
>> >>
>> >> Requirement: MANDATORY
>> >>
>> >> -The decompressed kernel image contains a 32-byte header as follows:
>> >> +The decompressed kernel image contains a 64-byte header as follows:
>> >>
>> >> - u32 magic = 0x14000008; /* branch to stext, little-endian */
>> >> - u32 res0 = 0; /* reserved */
>> >> + u32 code0; /* Executable code */
>> >> + u32 code1; /* Executable code */
>> >> u64 text_offset; /* Image load offset */
>> >> + u64 res0 = 0; /* reserved */
>> >> u64 res1 = 0; /* reserved */
>> >> u64 res2 = 0; /* reserved */
>> >> + u64 res3 = 0; /* reserved */
>> >> + u64 res4 = 0; /* reserved */
>> >> + u32 magic = 0x644d5241; /* Magic number, little endian, "ARM\x64" */
>> >> + u32 res5 = 0; /* reserved */
>> >> +
>> >> +
>> >> +Header notes:
>> >> +
>> >> +- code0/code1 are responsible for branching to stext.
>> >
>> > Do we really want to change the already documented image header? Any
>> > existing bootloaders which check the magic number would stop working.
>> > In my preliminary patches to add an efi stub, I avoid that by making
>> > an Image.efi which is an Image file with pe/coff header prepended. I
>> > could easily switch to using the above header change, but wanted to
>> > point out an alternative that doesn't change the already established
>> > header.
>> >
>> > --Mark
>> >
>>
>> Hi Mark,
>>
>> Yes, we do want to make the change, as one the goals is to have a
>> single binary format, not multiple formats. This was discussed fairly
>> extensively at LCE, and I think my patch represents the consensus on
>> how the EFI stub should be integrated.
>> Also, since it is early enough in the arm64 development this should be
>> a relatively easy time to make it. I don't think that the current
>> magic number is checked in the current UEFI loader, as the image boots
>> fine with either header. If the current ARM64 loaders don't check the
>> magic number, then they will work with either format, since the entry
>> point is the same.
>>
>> Roy
>
> That's fine. I wasn't at LCE, so I just wanted to avoid doubt and point
> out the alternative. Either way works for the main part of the efi stub
> so I'm okay with whatever uncompressed image header is used.
>
> --Mark
>
>
Hi Catalin,
Have you had a chance to look at this? Please let me know if this
is acceptable or if you would like changes made.
Thanks,
Roy
More information about the linux-arm-kernel
mailing list