Pass arg5 for system calls

This commit is contained in:
Tate, Hongliang Tian 2019-04-06 11:59:07 +08:00 committed by Tate Tian
parent db40e8f52b
commit 8dfeb71c90
2 changed files with 10 additions and 9 deletions

@ -124,7 +124,7 @@ pub extern "C" fn dispatch_syscall(
SYS_ARCH_PRCTL => do_arch_prctl(arg0 as u32, arg1 as *mut usize),
_ => do_unknown(num),
_ => do_unknown(num, arg0, arg1, arg2, arg3, arg4, arg5),
};
debug!("syscall return: {:?}", ret);
@ -587,10 +587,11 @@ fn do_exit(status: i32) -> ! {
}
}
fn do_unknown(num: u32) -> Result<isize, Error> {
if cfg!(debug_assertions) {
//println!("[WARNING] Unknown syscall (num = {})", num);
}
fn do_unknown(num: u32, arg0: isize, arg1: isize, arg2: isize, arg3: isize, arg4: isize, arg5: isize) -> Result<isize, Error> {
warn!(
"unknown or unsupported syscall (# = {}): {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}",
num, arg0, arg1, arg2, arg3, arg4, arg5
);
Err(Error::new(ENOSYS, "Unknown syscall"))
}

@ -33,13 +33,13 @@ __occlum_syscall:
movq TASK_KERNEL_FSBASE_ADDR(%r12), %r11
wrfsbase %r11
// TODO: Pass arg5
// pushq 0x10(%rbp)
// Make %rsp 16-byte aligned before call
sub $0x8, %rsp
// Pass arg5
pushq 0x18(%rbp)
call dispatch_syscall
// addq 0x08, %rsp
// Use user fsbase
movq TASK_USER_FSBASE_ADDR(%r12), %r11
wrfsbase %r11