Pass arg5 for system calls
This commit is contained in:
parent
db40e8f52b
commit
8dfeb71c90
@ -124,7 +124,7 @@ pub extern "C" fn dispatch_syscall(
|
|||||||
|
|
||||||
SYS_ARCH_PRCTL => do_arch_prctl(arg0 as u32, arg1 as *mut usize),
|
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);
|
debug!("syscall return: {:?}", ret);
|
||||||
|
|
||||||
@ -587,10 +587,11 @@ fn do_exit(status: i32) -> ! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_unknown(num: u32) -> Result<isize, Error> {
|
fn do_unknown(num: u32, arg0: isize, arg1: isize, arg2: isize, arg3: isize, arg4: isize, arg5: isize) -> Result<isize, Error> {
|
||||||
if cfg!(debug_assertions) {
|
warn!(
|
||||||
//println!("[WARNING] Unknown syscall (num = {})", num);
|
"unknown or unsupported syscall (# = {}): {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}",
|
||||||
}
|
num, arg0, arg1, arg2, arg3, arg4, arg5
|
||||||
|
);
|
||||||
Err(Error::new(ENOSYS, "Unknown syscall"))
|
Err(Error::new(ENOSYS, "Unknown syscall"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,13 +33,13 @@ __occlum_syscall:
|
|||||||
movq TASK_KERNEL_FSBASE_ADDR(%r12), %r11
|
movq TASK_KERNEL_FSBASE_ADDR(%r12), %r11
|
||||||
wrfsbase %r11
|
wrfsbase %r11
|
||||||
|
|
||||||
// TODO: Pass arg5
|
// Make %rsp 16-byte aligned before call
|
||||||
// pushq 0x10(%rbp)
|
sub $0x8, %rsp
|
||||||
|
// Pass arg5
|
||||||
|
pushq 0x18(%rbp)
|
||||||
|
|
||||||
call dispatch_syscall
|
call dispatch_syscall
|
||||||
|
|
||||||
// addq 0x08, %rsp
|
|
||||||
|
|
||||||
// Use user fsbase
|
// Use user fsbase
|
||||||
movq TASK_USER_FSBASE_ADDR(%r12), %r11
|
movq TASK_USER_FSBASE_ADDR(%r12), %r11
|
||||||
wrfsbase %r11
|
wrfsbase %r11
|
||||||
|
Loading…
Reference in New Issue
Block a user