From d0c1db5efc88a75a9060208b3196b089afec8baf Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 30 Sep 2021 09:36:43 -0400 Subject: [PATCH] Kernel: Zero out .bss contents on aarch64 After building and running objcopy -O binary Build/aarch64/Kernel/Prekernel/Prekernel \ /media/sdcard/kernel8.img things start booting on an actual RPi4 :^) (Assuming the sdcard contains RPi firmware, an empty config.txt, and no other kernel*.img files). --- Kernel/Prekernel/Arch/aarch64/boot.S | 8 ++++++++ Kernel/Prekernel/Arch/aarch64/linker.ld | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/Kernel/Prekernel/Arch/aarch64/boot.S b/Kernel/Prekernel/Arch/aarch64/boot.S index c5eee1a801..7eaa7fa557 100644 --- a/Kernel/Prekernel/Arch/aarch64/boot.S +++ b/Kernel/Prekernel/Arch/aarch64/boot.S @@ -21,6 +21,14 @@ start: ldr x14, =start mov sp, x14 + // Clear BSS. + ldr x14, =start_of_bss + ldr x15, =size_of_bss_divided_by_8 +Lbss_clear_loop: + str xzr, [x14], #8 + subs x15, x15, #1 + bne Lbss_clear_loop + b init .globl wait_cycles diff --git a/Kernel/Prekernel/Arch/aarch64/linker.ld b/Kernel/Prekernel/Arch/aarch64/linker.ld index 9a89f1d4d9..6b093cbd89 100644 --- a/Kernel/Prekernel/Arch/aarch64/linker.ld +++ b/Kernel/Prekernel/Arch/aarch64/linker.ld @@ -29,6 +29,10 @@ SECTIONS .bss ALIGN(4K) (NOLOAD) : AT (ADDR(.bss)) { + start_of_bss = .; *(.bss) + end_of_bss = .; } :bss } + +size_of_bss_divided_by_8 = (end_of_bss - start_of_bss) / 8;