Re: git: a60e7e6ff0ec - main - stand: compile ia32 EFI loader with -malign-double

From: Ahmad Khalifa <ahmadkhalifa570_at_gmail.com>
Date: Sun, 15 Feb 2026 14:27:42 UTC
On Sun Feb 15, 2026 at 4:02 PM +0200, Jessica Clarke wrote:
> On 15 Feb 2026, at 13:56, Ahmad Khalifa <vexeduxr@FreeBSD.org> wrote:
>>
>> The branch main has been updated by vexeduxr:
>>
>> URL: https://cgit.FreeBSD.org/src/commit/?id=a60e7e6ff0ec1fdd66c2568ac6c03b843dbb3c9d
>>
>> commit a60e7e6ff0ec1fdd66c2568ac6c03b843dbb3c9d
>> Author:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
>> AuthorDate: 2026-02-15 12:23:26 +0000
>> Commit:     Ahmad Khalifa <vexeduxr@FreeBSD.org>
>> CommitDate: 2026-02-15 13:30:06 +0000
>>
>>    stand: compile ia32 EFI loader with -malign-double
>>
>>    The UEFI spec says:
>>> Structures are aligned on boundaries equal to the largest internal
>>> datum of the structure and internal data are implicitly padded to
>>> achieve natural alignment.
>>
>>    By default, structs containing members of type "long long" have 4 byte
>>    alignment on i386. This caused some EFI structures to be subtly wrong.
>>
>>    Fix this by compiling the ia32 EFI loader with -malign-double, which
>>    bumps the alignment up to 8 if such members are present.
>
> This seems like a dangerously big hammer. Are there any types shared
> with libsa or the kernel itself that would change layout? (I suppose
> for the latter they already need to be aligned as the kernel is 64-bit?)

For the kernel, any shared types would have already needed to be
aligned, yes. I didn't consider shared types with either libsa or libefi
though, I'll look into it now. Nice catch.

>
> Annotating just the EFI types would seem more appropriate, like how we
> annotate function pointers to use the Microsoft calling convention.

They're all under contrib unfortunately. Not sure if we want to
introduce that big of a diff with upstream.

>
> Jessica