mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-22 17:03:23 +00:00
Extract OS-specific part from UserContextApi
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
657d6719c7
commit
a5707b4ddc
@ -5,7 +5,7 @@
|
||||
use aster_frame::cpu::UserContext;
|
||||
pub use clock_gettime::ClockID;
|
||||
|
||||
use crate::prelude::*;
|
||||
use crate::{cpu::LinuxAbi, prelude::*};
|
||||
|
||||
mod accept;
|
||||
mod access;
|
||||
@ -204,14 +204,8 @@ pub enum SyscallReturn {
|
||||
|
||||
impl SyscallArgument {
|
||||
fn new_from_context(context: &UserContext) -> Self {
|
||||
let syscall_number = context.rax() as u64;
|
||||
let mut args = [0u64; 6];
|
||||
args[0] = context.rdi() as u64;
|
||||
args[1] = context.rsi() as u64;
|
||||
args[2] = context.rdx() as u64;
|
||||
args[3] = context.r10() as u64;
|
||||
args[4] = context.r8() as u64;
|
||||
args[5] = context.r9() as u64;
|
||||
let syscall_number = context.syscall_num() as u64;
|
||||
let args = context.syscall_args().map(|x| x as u64);
|
||||
Self {
|
||||
syscall_number,
|
||||
args,
|
||||
@ -227,13 +221,13 @@ pub fn handle_syscall(context: &mut UserContext) {
|
||||
match syscall_return {
|
||||
Ok(return_value) => {
|
||||
if let SyscallReturn::Return(return_value) = return_value {
|
||||
context.set_rax(return_value as usize);
|
||||
context.set_syscall_ret(return_value as usize);
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
debug!("syscall return error: {:?}", err);
|
||||
let errno = err.error() as i32;
|
||||
context.set_rax((-errno) as usize)
|
||||
context.set_syscall_ret((-errno) as usize)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user