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.");