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
60
61
62
63
64
|
.section .text.init.enter
.global _start
_start:
li t0, 0x4a7a7b0c
beq a0, t0, _magic_ok
ret
_magic_ok:
lui t0, %hi(__img_start)
addi t0, t0, %lo(__img_start)
la t1, __img_start
la t2, _early_copy_end
sub t2, t2, t1
_early_copy_loop:
lw t3, 0(t1)
sw t3, 0(t0)
addi t0, t0, 4
addi t1, t1, 4
addi t2, t2, -4
bgtz t2, _early_copy_loop
lui t2, %hi(_running_on_ram)
addi t2, t2, %lo(_running_on_ram)
jr t2
_running_on_ram:
la t2, __img_end
sub t2, t2, t0
_full_copy_loop:
lw t3, 0(t1)
lw t4, 4(t1)
lw t5, 8(t1)
lw t6, 12(t1)
sw t3, 0(t0)
sw t4, 4(t0)
sw t5, 8(t0)
sw t6, 12(t0)
addi t0, t0, 16
addi t1, t1, 16
addi t2, t2, -16
bgtz t2, _full_copy_loop
.balign 4
_early_copy_end:
la t0, __bss_start
la t2, __bss_end
sub t2, t2, t0
_clear_bss_loop:
sw zero, 0(t0)
sw zero, 4(t0)
sw zero, 8(t0)
sw zero, 12(t0)
addi t0, t0, 16
addi t2, t2, -16
bgtz t2, _clear_bss_loop
_start_done:
la sp, __stack
call main
j .
|