grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multiboot2 on aarch64: Alignment of ELF Headers


From: Hans Ulrich Niedermann
Subject: Re: Multiboot2 on aarch64: Alignment of ELF Headers
Date: Sat, 23 May 2020 12:43:16 +0200

On Fri, 22 May 2020 17:23:35 +0100
Chris Plant via Grub-devel <address@hidden> wrote:

> I'm continuing to work on Multiboot2 support on aarch64, and I'm
> looking at the alignment of the ELF headers which are passed through
> MB2.

At the risk of me sounding stupid...

Having read the MB2 specs quite thoroughly in the past few months, I
still have no idea what "ELF headers" being "passed through MB2" could
be about. The MB2 spec defines a MB2 header consisting of a four MB2
header magic fields and a set of MB2 header tags.

The only thing ELF related I could find there is the MB2 header address
tag which duplicates some information from ELF (if OS image is in ELF
format) or contains address information (if OS image is in non-ELF
format). Is that what you are talking about?

> The alignment of the MB2 header's isn't the problem, the problem is in
> the ELF headers which are linked through.  Some of the 8 byte wide
> fields (specifically addr and size) in the ELF headers are not aligned
> on 8 byte boundaries, and instead can aligned on 4-byte boundaries.
> 
> My question is, is it preferable to state that it is possible that the
> headers may be aligned on 4 byte boundaries (and manage that through
> reading two 4-byte chunks), or to change grub code to ensure that the
> ELF headers are aligned on 8 byte boundaries and state that 8 byte
> alignment is always the case?

As it is, the largest values in the MB2 header defined in the OS image
are u32, there are no u64 values. Sorry if I am asking stupid questions,
but where would u64 values come into play here in the MB2 spec? Are you
redefining some MB2 header tags with u64 values instead of u32 values?

> I think logically that it should be 8 byte aligned so that's my
> preference, but I thought I'd ask.

If you happen to be speaking about MB2 Header Tags when you say "linked
through ELF headers" and you have been modeling your boot code off the
example boot.S and boot_mips.S and run into alignment issues there, be
advised that the current example boot code does violate the MB2 spec:

The MB2 spec and the grub2 code both agree on the MB2 header tags being
aligned to 8 byte boundaries, while the example code (both for ia32 and
for mips) does not align the MB2 header tags at all.

Uli



reply via email to

[Prev in Thread] Current Thread [Next in Thread]