From 8dfeb71c90e6e58463b25e287cadfc396ee473a9 Mon Sep 17 00:00:00 2001 From: "Tate, Hongliang Tian" Date: Sat, 6 Apr 2019 11:59:07 +0800 Subject: [PATCH] Pass arg5 for system calls --- src/libos/src/syscall/mod.rs | 11 ++++++----- src/libos/src/syscall/syscall_entry_x86-64.S | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/libos/src/syscall/mod.rs b/src/libos/src/syscall/mod.rs index 40198bce..d7828303 100644 --- a/src/libos/src/syscall/mod.rs +++ b/src/libos/src/syscall/mod.rs @@ -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 { - 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 { + warn!( + "unknown or unsupported syscall (# = {}): {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}", + num, arg0, arg1, arg2, arg3, arg4, arg5 + ); Err(Error::new(ENOSYS, "Unknown syscall")) } diff --git a/src/libos/src/syscall/syscall_entry_x86-64.S b/src/libos/src/syscall/syscall_entry_x86-64.S index d7b528ce..f471c0e0 100644 --- a/src/libos/src/syscall/syscall_entry_x86-64.S +++ b/src/libos/src/syscall/syscall_entry_x86-64.S @@ -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