1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
.section .init
.globl _start
_start:
prog:
/*
la t0, 4
la t1, 1
sw t1, 0(t0)
la t0, 0x00100000
li t1, 1
sw t1, 0(t0)
lw t2, 0(t0)
j halt
*/
/* Set up stack pointer */
la sp, _stack_end
/* Initialize .data section (copy from LMA to VMA) */
la t0, _sdata /* VMA start of .data */
la t1, _edata /* VMA end of .data */
la t2, _etext /* LMA start of .data in flash */
copy_data:
beq t0, t1, clear_bss
lw t3, 0(t2)
sw t3, 0(t0)
addi t0, t0, 4
addi t2, t2, 4
j copy_data
clear_bss:
/* Clear .bss section */
la t0, _sbss /* VMA start of .bss */
la t1, _ebss /* VMA end of .bss */
clear_loop:
beq t0, t1, init_libc
sw x0, 0(t0)
addi t0, t0, 4
j clear_loop
init_libc:
/* Call libc initialization functions */
/* call _init */
/* Call main function */
call main
finalize_libc:
/* Call libc finalization functions */
/* call _fini */
halt:
/* Infinite loop after main returns */
j halt
|