mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-21 16:33:24 +00:00
Remove the shim kernel crate
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
d76c7a5b1e
commit
dafd16075f
102
kernel/src/arch/x86/cpu.rs
Normal file
102
kernel/src/arch/x86/cpu.rs
Normal file
@ -0,0 +1,102 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use ostd::{
|
||||
cpu::{RawGeneralRegs, UserContext},
|
||||
Pod,
|
||||
};
|
||||
|
||||
use crate::cpu::LinuxAbi;
|
||||
|
||||
impl LinuxAbi for UserContext {
|
||||
fn syscall_num(&self) -> usize {
|
||||
self.rax()
|
||||
}
|
||||
|
||||
fn syscall_ret(&self) -> usize {
|
||||
self.rax()
|
||||
}
|
||||
|
||||
fn set_syscall_ret(&mut self, ret: usize) {
|
||||
self.set_rax(ret);
|
||||
}
|
||||
|
||||
fn syscall_args(&self) -> [usize; 6] {
|
||||
[
|
||||
self.rdi(),
|
||||
self.rsi(),
|
||||
self.rdx(),
|
||||
self.r10(),
|
||||
self.r8(),
|
||||
self.r9(),
|
||||
]
|
||||
}
|
||||
|
||||
fn set_tls_pointer(&mut self, tls: usize) {
|
||||
self.set_fsbase(tls);
|
||||
}
|
||||
|
||||
fn tls_pointer(&self) -> usize {
|
||||
self.fsbase()
|
||||
}
|
||||
}
|
||||
|
||||
/// General-purpose registers.
|
||||
#[derive(Debug, Clone, Copy, Pod, Default)]
|
||||
#[repr(C)]
|
||||
pub struct GpRegs {
|
||||
pub rax: usize,
|
||||
pub rbx: usize,
|
||||
pub rcx: usize,
|
||||
pub rdx: usize,
|
||||
pub rsi: usize,
|
||||
pub rdi: usize,
|
||||
pub rbp: usize,
|
||||
pub rsp: usize,
|
||||
pub r8: usize,
|
||||
pub r9: usize,
|
||||
pub r10: usize,
|
||||
pub r11: usize,
|
||||
pub r12: usize,
|
||||
pub r13: usize,
|
||||
pub r14: usize,
|
||||
pub r15: usize,
|
||||
pub rip: usize,
|
||||
pub rflags: usize,
|
||||
pub fsbase: usize,
|
||||
pub gsbase: usize,
|
||||
}
|
||||
|
||||
macro_rules! copy_gp_regs {
|
||||
($src: ident, $dst: ident) => {
|
||||
$dst.rax = $src.rax;
|
||||
$dst.rbx = $src.rbx;
|
||||
$dst.rcx = $src.rcx;
|
||||
$dst.rdx = $src.rdx;
|
||||
$dst.rsi = $src.rsi;
|
||||
$dst.rdi = $src.rdi;
|
||||
$dst.rbp = $src.rbp;
|
||||
$dst.rsp = $src.rsp;
|
||||
$dst.r8 = $src.r8;
|
||||
$dst.r9 = $src.r9;
|
||||
$dst.r10 = $src.r10;
|
||||
$dst.r11 = $src.r11;
|
||||
$dst.r12 = $src.r12;
|
||||
$dst.r13 = $src.r13;
|
||||
$dst.r14 = $src.r14;
|
||||
$dst.r15 = $src.r15;
|
||||
$dst.rip = $src.rip;
|
||||
$dst.rflags = $src.rflags;
|
||||
$dst.fsbase = $src.fsbase;
|
||||
$dst.gsbase = $src.gsbase;
|
||||
};
|
||||
}
|
||||
|
||||
impl GpRegs {
|
||||
pub fn copy_to_raw(&self, dst: &mut RawGeneralRegs) {
|
||||
copy_gp_regs!(self, dst);
|
||||
}
|
||||
|
||||
pub fn copy_from_raw(&mut self, src: &RawGeneralRegs) {
|
||||
copy_gp_regs!(src, self);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user