.text .arm .align 4 .global _start _start: stmdb sp!, {r4, lr} /* store context */ movs r4, r0 /* Clear the .bss section */ bl .L_clean_bss /* restore context */ adr r0, [.L_context] str r4, [r0] ldr r0, [r0] /* call user's main */ bl main ldmia sp!, {r4, pc} .L_context: .long 0 /* r0 = start address r1 = end address tmp: r2 */ .L_clean_bss: ldr r0, =__bss_start ldr r1, =__bss_end sub r1, r1, #4 mov r2, #0 .L_clean_bss_loop: cmp r0, r1 strlt r2, [r0], #4 blt .L_clean_bss_loop bx lr