parent
09147732bc
commit
7cdfb9e6e2
@ -0,0 +1,49 @@
|
||||
use super::*;
|
||||
use process;
|
||||
use arch::interrupt::TrapFrame;
|
||||
|
||||
pub unsafe fn syscall(tf: &TrapFrame) -> i32 {
|
||||
let id = tf.scratch.rax;
|
||||
// For ucore:
|
||||
// let args = [tf.scratch.rdx, tf.scratch.rcx, tf.preserved.rbx, tf.scratch.rdi, tf.scratch.rsi];
|
||||
// For xv6 x86_64
|
||||
let args = [tf.scratch.rdi, tf.scratch.rsi, tf.scratch.rdx, tf.scratch.rcx, tf.scratch.r8, tf.scratch.r9];
|
||||
|
||||
match id {
|
||||
SYS_FORK => {
|
||||
process::fork(tf);
|
||||
0
|
||||
}
|
||||
SYS_WRITE => {
|
||||
io::write(args[0], args[1] as *const u8, args[2]);
|
||||
0
|
||||
}
|
||||
_ => {
|
||||
debug!("unknown syscall {}", id);
|
||||
-1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const SYS_FORK: usize = 1;
|
||||
const SYS_EXIT: usize = 2;
|
||||
const SYS_WAIT: usize = 3;
|
||||
const SYS_PIPE: usize = 4;
|
||||
const SYS_READ: usize = 5;
|
||||
const SYS_KILL: usize = 6;
|
||||
const SYS_EXEC: usize = 7;
|
||||
const SYS_FSTAT: usize = 8;
|
||||
const SYS_CHDIR: usize = 9;
|
||||
const SYS_DUP: usize = 10;
|
||||
const SYS_GETPID: usize = 11;
|
||||
const SYS_SBRK: usize = 12;
|
||||
const SYS_SLEEP: usize = 13;
|
||||
const SYS_UPTIME: usize = 14;
|
||||
const SYS_OPEN: usize = 15;
|
||||
const SYS_WRITE: usize = 16;
|
||||
const SYS_MKNOD: usize = 17;
|
||||
const SYS_UNLINK: usize = 18;
|
||||
const SYS_LINK: usize = 19;
|
||||
const SYS_MKDIR: usize = 20;
|
||||
const SYS_CLOSE: usize = 21;
|
||||
const SYS_CHMOD: usize = 22;
|
Loading…
Reference in new issue