/* * boot_info_offsets.h — fixed byte offsets of BootInfo fields * * Read by kernel_entry.S (assembly) AND verified by _Static_assert in * uefi_loader.c. Both uses share this header; only #define directives * are used so the file is valid for the C preprocessor AND the GAS * preprocessor (which runs on .S files compiled via CC). * * If you change the BootInfo struct layout in uefi.h, update the * constants below AND re-check the _Static_asserts (search BOOT_INFO_OFFSETS). * * BootInfo layout (64-bit, natural alignment): * 0: memory_map ptr (8) * 8: memory_map_size u64 (8) * 16: memory_map_descriptor_size u64 (8) * 24: runtime_services ptr (8) * 32: acpi_table ptr (8) * 40: dtb ptr (8) * 48: framebuffer FramebufferInfo (32) * .base ptr (8) * .size u64 (8) * .width u32 (4) * .height u32 (4) * .pixels_per_scanline u32 (4) * .pixel_format u32 (4) * 80: uefi_boot_services_exited u8 (1) * 81: [7 bytes padding] * 88: kernel_stack_base ptr (8) ← BOOT_INFO_KERNEL_STACK_BASE_OFFSET * 96: kernel_stack_size u64 (8) ← BOOT_INFO_KERNEL_STACK_SIZE_OFFSET * 104: args KernelArgs * * 2026-08-03, punch-list item 0.3: `dtb` inserted at 40, shifting everything * below it by 8. The _Static_asserts in uefi_loader.c caught the stale * constants immediately — that is what they are for; do not silence them by * moving a field, fix the offsets. */ #define BOOT_INFO_KERNEL_STACK_BASE_OFFSET 88 #define BOOT_INFO_KERNEL_STACK_SIZE_OFFSET 96