From 0c9cb6f7c42d146397a8cc817c1e6555a07ef3de Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 6 Jan 2021 00:09:52 +0800 Subject: [PATCH] Wrap syscalls in user_lib && change xstate to exit_code --- os/src/syscall/process.rs | 4 ++-- user/src/bin/03sleep.rs | 8 ++++---- user/src/console.rs | 6 ++++-- user/src/lib.rs | 9 +++++++-- user/src/syscall.rs | 6 ++---- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 93efe8ca..23eab1ff 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -4,8 +4,8 @@ use crate::task::{ }; use crate::timer::get_time_ms; -pub fn sys_exit(xstate: i32) -> ! { - println!("[kernel] Application exited with code {}", xstate); +pub fn sys_exit(exit_code: i32) -> ! { + println!("[kernel] Application exited with code {}", exit_code); exit_current_and_run_next(); panic!("Unreachable in sys_exit!"); } diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index ada77e91..83411233 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -4,14 +4,14 @@ #[macro_use] extern crate user_lib; -use user_lib::{sys_get_time, sys_yield}; +use user_lib::{get_time, yield_}; #[no_mangle] fn main() -> i32 { - let current_timer = sys_get_time(); + let current_timer = get_time(); let wait_for = current_timer + 3000; - while sys_get_time() < wait_for { - sys_yield(); + while get_time() < wait_for { + yield_(); } println!("Test sleep OK!"); 0 diff --git a/user/src/console.rs b/user/src/console.rs index a826b8fe..ac801174 100644 --- a/user/src/console.rs +++ b/user/src/console.rs @@ -1,11 +1,13 @@ use core::fmt::{self, Write}; -use crate::syscall::{STDOUT, sys_write}; +use super::write; struct Stdout; +const STDOUT: usize = 1; + impl Write for Stdout { fn write_str(&mut self, s: &str) -> fmt::Result { - sys_write(STDOUT, s.as_bytes()); + write(STDOUT, s.as_bytes()); Ok(()) } } diff --git a/user/src/lib.rs b/user/src/lib.rs index fdcb6d56..0d4e44a7 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -12,7 +12,7 @@ mod lang_items; #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { clear_bss(); - syscall::sys_exit(main()); + exit(main()); panic!("unreachable after sys_exit!"); } @@ -32,4 +32,9 @@ fn clear_bss() { }); } -pub use syscall::*; \ No newline at end of file +use syscall::*; + +pub fn write(fd: usize, buf: &[u8]) -> isize { sys_write(fd, buf) } +pub fn exit(exit_code: i32) -> isize { sys_exit(exit_code) } +pub fn yield_() -> isize { sys_yield() } +pub fn get_time() -> isize { sys_get_time() } \ No newline at end of file diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 8e4ff50b..1b23a48a 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,5 +1,3 @@ -pub const STDOUT: usize = 1; - const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; @@ -22,8 +20,8 @@ pub fn sys_write(fd: usize, buffer: &[u8]) -> isize { syscall(SYSCALL_WRITE, [fd, buffer.as_ptr() as usize, buffer.len()]) } -pub fn sys_exit(xstate: i32) -> isize { - syscall(SYSCALL_EXIT, [xstate as usize, 0, 0]) +pub fn sys_exit(exit_code: i32) -> isize { + syscall(SYSCALL_EXIT, [exit_code as usize, 0, 0]) } pub fn sys_yield() -> isize { -- GitLab