
    .section .init
    .globl _start
    .type _start,@function

.extern main
# .extern trap_handler
.extern SW_handler
.extern entry
_start:

    la sp, _sp

    /* Load data section */
    la a0, _data_lma
    la a1, _data
    la a2, _edata
    bgeu a1, a2, 2f
1:
    lw t0, (a0)
    sw t0, (a1)
    addi a0, a0, 4
    addi a1, a1, 4
    bltu a1, a2, 1b
2:

    /* Clear bss section */
    la a0, __bss_start
    la a1, _end
    bgeu a0, a1, 2f
1:
    sw zero, (a0)
    addi a0, a0, 4
    bltu a0, a1, 1b
2:
    la a0, SW_handler
    csrw mtvec, a0

    /* Call global constructors */
    # la a0, __libc_fini_array
    # call __libc_init_array
    # j main
    j entry