-
Notifications
You must be signed in to change notification settings - Fork 0
/
boot.S
55 lines (46 loc) · 974 Bytes
/
boot.S
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
/* boot.S - assembly startup code */
// To keep this in the first portion of the binary.
.section ".text.boot"
// Make Start global.
.globl _start
// Entry point for the kernel.
// r15 -> should begin execution at 0x8000.
// r0 -> 0x00000000
// r1 -> 0x00000C42
// r2 -> 0x00000100 - start of ATAGS
// preserve these registers as argument for kernel_main
_start:
// Setup the stack.
ldr sp, =stack_top//#0x8000
ldr r2, =__bss_start__
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2], #4
LoopFillZerobss:
ldr r3, = __bss_end__
cmp r2, r3
bcc FillZerobss
// Clear out bss.
//ldr r4, =__bss_start__
//ldr r9, =__bss_end__
//mov r5, #0
//mov r6, #0
//mov r7, #0
//mov r8, #0
//b 2f
1:
// store multiple at r4.
//stmia r4!, {r5-r8}
// If we are still below bss_end, loop.
2:
//cmp r4, r9
//blo 1b
// Call kernel_main
ldr r3, =kernel_main
blx r3
// halt
halt:
wfe
b halt