30 lines
444 B
ArmAsm
30 lines
444 B
ArmAsm
// Initial process that execs /init.
|
|
// This code runs in user space.
|
|
|
|
#include <syscall.h>
|
|
|
|
// exec(init, argv)
|
|
.globl start
|
|
start:
|
|
la a0, init
|
|
la a1, argv
|
|
addi a2, a1, 8
|
|
li a7, SYS_execve
|
|
ecall
|
|
|
|
// for(;;) exit();
|
|
exit:
|
|
li a7, SYS_exit
|
|
ecall
|
|
jal exit
|
|
|
|
// char init[] = "/init\0";
|
|
init:
|
|
.string "/init\0"
|
|
|
|
// char *argv[] = { init, 0 };
|
|
.p2align 3
|
|
argv:
|
|
.quad init
|
|
.quad 0
|