git: e0c3f66b4d5f - main - stand/efi: Call md_copymodules based on __LP64__ to fix 32-bit arm
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 23 Oct 2022 01:48:21 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=e0c3f66b4d5f0282e9c7c4803c4cd26b5a388a38
commit e0c3f66b4d5f0282e9c7c4803c4cd26b5a388a38
Author: Warner Losh <imp@FreeBSD.org>
AuthorDate: 2022-10-23 01:09:10 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2022-10-23 01:47:25 +0000
stand/efi: Call md_copymodules based on __LP64__ to fix 32-bit arm
When I refactored everything, I neglected to pass in the proper is64
value on 32-bit platforms. This corrects that. This prevented armv7 and
armv6 platforms from booting due to misaligned data in the kernel. The
only platform we support 32-bit booting in armv[67], which I apparently
neglected to test before commiting my refactoring.
Tested by: skibo
Fixes: 5d1531d9d4e7d
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D37095
---
stand/efi/loader/bootinfo.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/stand/efi/loader/bootinfo.c b/stand/efi/loader/bootinfo.c
index 558f7bdae91e..38175bf10bc5 100644
--- a/stand/efi/loader/bootinfo.c
+++ b/stand/efi/loader/bootinfo.c
@@ -316,6 +316,7 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp, bool exit_bs)
vm_offset_t size;
char *rootdevname;
int howto;
+ bool is64;
#if defined(LOADER_FDT_SUPPORT)
vm_offset_t dtbp;
int dtb_size;
@@ -335,6 +336,11 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp, bool exit_bs)
#endif
};
#endif
+#ifdef __LP64__
+ is64 = true;
+#else
+ is64 = false;
+#endif
howto = bi_getboothowto(args);
@@ -413,7 +419,7 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp, bool exit_bs)
#endif
bi_load_efi_data(kfp, exit_bs);
- size = md_copymodules(0, true);
+ size = md_copymodules(0, is64);
kernend = roundup(addr + size, PAGE_SIZE);
*kernendp = kernend;
@@ -438,7 +444,7 @@ bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp, bool exit_bs)
#endif
/* Copy module list and metadata. */
- (void)md_copymodules(addr, true);
+ (void)md_copymodules(addr, is64);
return (0);
}