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;