39 lines
590 B
ArmAsm
39 lines
590 B
ArmAsm
.section .vector,"ax",@progbits
|
|
.align 1
|
|
|
|
.global _start
|
|
_start:
|
|
// Set up global pointer
|
|
.option push
|
|
.option norelax
|
|
la gp, __global_pointer$
|
|
.option pop
|
|
|
|
// Load data section from flash to RAM
|
|
la a0, _data_lma
|
|
la a1, _data_vma
|
|
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, _sbss
|
|
la a1, _ebss
|
|
bgeu a0, a1, 2f
|
|
1:
|
|
sw zero, (a0)
|
|
addi a0, a0, 4
|
|
bltu a0, a1, 1b
|
|
2:
|
|
|
|
// Invoke main
|
|
la t0, main
|
|
csrw mepc, t0
|
|
mret
|