f32f3638f4
- Got rid of dummy proc[0]. Now proc[0] is init. - Added initcode.S to exec /init, so that /init is just a regular binary. - Moved exec out of sysfile to exec.c - Moved code dealing with fs guts (like struct inode) from sysfile.c to fs.c. Code dealing with system call arguments stays in sysfile.c - Refactored directory routines in fs.c; should be simpler. - Changed iget to return *unlocked* inode structure. This solves the lookup-then-use race in namei without introducing deadlocks. It also enabled getting rid of the dummy proc[0].
29 lines
335 B
ArmAsm
29 lines
335 B
ArmAsm
# Initial process execs /init.
|
|
|
|
#include "syscall.h"
|
|
#include "traps.h"
|
|
|
|
# exec(init, argv)
|
|
start:
|
|
pushl $argv
|
|
pushl $init
|
|
pushl $0
|
|
movl $SYS_exec, %eax
|
|
int $T_SYSCALL
|
|
|
|
# for(;;) exit();
|
|
exit:
|
|
movl $SYS_exit, %eax
|
|
int $T_SYSCALL
|
|
jmp exit
|
|
|
|
# "/init\0"
|
|
init:
|
|
.string "/init\0"
|
|
|
|
.p2align 2
|
|
argv:
|
|
.long init
|
|
.long 0
|
|
|