From 9aba9395e739e8db68e2e0d58775b9925e5dea49 Mon Sep 17 00:00:00 2001 From: David Karoly Date: Sun, 24 Oct 2021 12:58:27 +0200 Subject: [PATCH] boot/efi: fix alignment exception on arm Change-Id: I8384433c4bed474c3cb82bc8451ecde9a47bcff8 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4656 Tested-by: Commit checker robot Reviewed-by: Fredrik Holmqvist Reviewed-by: Adrien Destugues --- src/system/boot/platform/efi/arch/arm/arch_start.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/system/boot/platform/efi/arch/arm/arch_start.cpp b/src/system/boot/platform/efi/arch/arm/arch_start.cpp index b43e5029d1..242188a5b2 100644 --- a/src/system/boot/platform/efi/arch/arm/arch_start.cpp +++ b/src/system/boot/platform/efi/arch/arm/arch_start.cpp @@ -4,6 +4,7 @@ */ +#include #include #include #include @@ -11,6 +12,9 @@ #include "efi_platform.h" +#define ALIGN_MEMORY_MAP 4 + + extern "C" void arch_enter_kernel(uint32_t ttbr, struct kernel_args *kernelArgs, addr_t kernelEntry, addr_t kernelStackTop); @@ -85,7 +89,12 @@ arch_start_kernel(addr_t kernelEntry) // between calls to ExitBootServices. size_t actual_memory_map_size = memory_map_size * 2; memory_map - = (efi_memory_descriptor *)kernel_args_malloc(actual_memory_map_size); + = (efi_memory_descriptor *)kernel_args_malloc(actual_memory_map_size + + ALIGN_MEMORY_MAP); + + // align memory_map to 4-byte boundary + // otherwise we get alignment exception when calling GetMemoryMap below + memory_map = (efi_memory_descriptor *)ROUNDUP((uint32_t)memory_map, ALIGN_MEMORY_MAP); if (memory_map == NULL) panic("Unable to allocate memory map.");