Re: git: a60e7e6ff0ec - main - stand: compile ia32 EFI loader with -malign-double
Date: Sun, 15 Feb 2026 14:02:32 UTC
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?) Annotating just the EFI types would seem more appropriate, like how we annotate function pointers to use the Microsoft calling convention. Jessica > MFC after: 3 days > --- > stand/efi/loader/arch/i386/Makefile.inc | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/stand/efi/loader/arch/i386/Makefile.inc b/stand/efi/loader/arch/i386/Makefile.inc > index e27b553c6bab..89fcb2a3c093 100644 > --- a/stand/efi/loader/arch/i386/Makefile.inc > +++ b/stand/efi/loader/arch/i386/Makefile.inc > @@ -7,3 +7,5 @@ SRCS+= amd64_tramp.S \ > SRCS+= nullconsole.c \ > comconsole.c \ > spinconsole.c > + > +CFLAGS+= -malign-double >