initial commit
This commit is contained in:
56
bootloader/Start.S
Normal file
56
bootloader/Start.S
Normal file
@@ -0,0 +1,56 @@
|
||||
.section ".text.boot"
|
||||
|
||||
.global _start
|
||||
|
||||
_start:
|
||||
mrs x1, mpidr_el1
|
||||
and x1, x1, #3
|
||||
cbz x1, run
|
||||
|
||||
wait:
|
||||
wfe
|
||||
b wait
|
||||
|
||||
run:
|
||||
mov x20, x0
|
||||
adr x0, _start
|
||||
mov sp, x0
|
||||
|
||||
adr x0, __text_start
|
||||
ldr x1, =__new_text_start
|
||||
cmp x0, x1
|
||||
b.gt relocate
|
||||
|
||||
adr x0, __bss_start
|
||||
adr x1, __bss_end
|
||||
bl memzero
|
||||
|
||||
mov x0, x20
|
||||
bl main
|
||||
b wait
|
||||
|
||||
relocate:
|
||||
// move text section
|
||||
ldr x0, =__new_text_start
|
||||
adr x1, __text_start
|
||||
adr x2, __text_end
|
||||
sub x2, x2, x1
|
||||
bl memcpy
|
||||
mov x19, x0
|
||||
|
||||
// move rodata section
|
||||
ldr x0, =__new_ro_start
|
||||
adr x1, __rodata_start
|
||||
adr x2, __rodata_end
|
||||
sub x2, x2, x1
|
||||
bl memcpy
|
||||
|
||||
// move data section
|
||||
ldr x0, =__new_data_start
|
||||
adr x1, __data_start
|
||||
adr x2, __data_end
|
||||
sub x2, x2, x1
|
||||
bl memcpy
|
||||
|
||||
br x19
|
||||
b wait
|
||||
Reference in New Issue
Block a user