On 4/23/16 10:09 AM, Kenneth Westerback wrote:
On 23 April 2016 at 09:55, Mark Kettenis <[email protected]> wrote:
Date: Sat, 23 Apr 2016 08:25:22 -0400
From: Kenneth Westerback <[email protected]>
And here is a possible fix. Got the inspiration from the SYSLINUX
bootloader. This forces alignment of the EFI-specific 64-bit types.
It leaves the normal int64_t/uint64_t alone, but we shouldn't use
those directly to define EFI data structures.
John, can you confirm that this fixes the issue for you?
Jonathan, Ken, provided that it does, ok?
Index: efi/include/i386/efibind.h
===================================================================
RCS file: /home/cvs/src/sys/arch/amd64/stand/efi/include/i386/efibind.h,v
retrieving revision 1.2
diff -u -p -r1.2 efibind.h
--- efi/include/i386/efibind.h 11 Dec 2015 20:17:10 -0000 1.2
+++ efi/include/i386/efibind.h 23 Apr 2016 11:38:26 -0000
@@ -88,8 +88,8 @@ Revision History
#ifndef ACPI_THREAD_ID /* ACPI's definitions are fine, use those */
#define ACPI_USE_SYSTEM_INTTYPES 1 /* Tell ACPI we've defined types */
-typedef uint64_t UINT64;
-typedef int64_t INT64;
+typedef uint64_t UINT64 __attribute__((__aligned__(8)));
+typedef int64_t INT64 __attribute__((__aligned__(8)));
#ifndef _BASETSD_H_
typedef uint32_t UINT32;
Your analysis is much more useful than mine was. :-). I was wondering
how many other places might get bit by the mis-alignment, but this
approach would seem to get them all in one fell swoop.
If this works it is ok with me. It would be good to get yasuoka@ ok too.
I can confirm it works here. Just did an install on the eMMC of the
lenovo stick 300. Got the same messages that John reported. But
boots fine now after installing the BOOTIA32.EFI with my fix.
Excellent. ok krw@
.... Ken
Yes, this fixes my issue -- glad it's not a firmware bug. :)
Thanks,
John