diff options
Diffstat (limited to 'kernel/riscv/start.S')
| -rw-r--r-- | kernel/riscv/start.S | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/kernel/riscv/start.S b/kernel/riscv/start.S index ecec47b..aa35916 100644 --- a/kernel/riscv/start.S +++ b/kernel/riscv/start.S @@ -12,17 +12,31 @@ _start: la t0, _syscall_start csrw stvec, t0 - + la sp, __stack_top + # Copy .data + la t0, __data_load + la t1, __data_start + la t2, __data_end + +1: + beq t1, t2, 2f + lw t3, 0(t0) + sw t3, 0(t1) + addi t0, t0, 4 + addi t1, t1, 4 + j 1b +2: + # Zero .bss la t0, __bss_start la t1, __bss_end - beq t0, t1, 2f -1: +3: + beq t0, t1, 4f sw zero, 0(t0) addi t0, t0, 4 - bltu t0, t1, 1b -2: + j 3b +4: call kernel_main wfi |
