diff --git a/linker.ld b/linker.ld index d57403d..d583890 100644 --- a/linker.ld +++ b/linker.ld @@ -5,7 +5,7 @@ SECTIONS .text.start : { *(.text.start) } .text : { *(.text) } .data : { *(.data) } - .bss : { *(.bss COMMON) } + .bss : { __bss_start = .; *(.bss COMMON) } __bss_end = .; .rodata : { *(.rodata) } . = ALIGN(4); } diff --git a/source/start.s b/source/start.s index c108bc6..ecc3ebf 100644 --- a/source/start.s +++ b/source/start.s @@ -77,6 +77,15 @@ start: mcr p15, 0, r8, c2, c0, 0 @ Data cacheable 0, 2, 4 mcr p15, 0, r8, c2, c0, 1 @ Inst cacheable 0, 2, 4 + @ Clear BSS + ldr r0, =__bss_start + ldr r1, =__bss_end + mov r2, #0 + clear_bss_loop: + str r2, [r0], #4 + cmp r0, r1 + blo clear_bss_loop + @ Enable caches / MPU / ITCM mrc p15, 0, r0, c1, c0, 0 @ read control register orr r0, r0, #(1<<18) @ - ITCM enable