Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e4643c9de | |||
| 9fad5e653c | |||
| c59951c038 |
@@ -95,6 +95,14 @@ pub struct IntRegisters {
|
|||||||
pub x0: usize,
|
pub x0: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct FullContextRegs {
|
||||||
|
pub int: IntRegisters,
|
||||||
|
pub float: FloatRegisters,
|
||||||
|
pub env: EnvRegisters,
|
||||||
|
}
|
||||||
|
|
||||||
impl Deref for IntRegisters {
|
impl Deref for IntRegisters {
|
||||||
type Target = [u8];
|
type Target = [u8];
|
||||||
fn deref(&self) -> &[u8] {
|
fn deref(&self) -> &[u8] {
|
||||||
@@ -149,6 +157,29 @@ impl DerefMut for FloatRegisters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Deref for FullContextRegs {
|
||||||
|
type Target = [u8];
|
||||||
|
fn deref(&self) -> &[u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts(
|
||||||
|
self as *const FullContextRegs as *const u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for FullContextRegs {
|
||||||
|
fn deref_mut(&mut self) -> &mut [u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts_mut(
|
||||||
|
self as *mut FullContextRegs as *mut u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Default)]
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct EnvRegisters {
|
pub struct EnvRegisters {
|
||||||
|
|||||||
@@ -96,6 +96,14 @@ pub struct IntRegisters {
|
|||||||
pub x1: usize,
|
pub x1: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct FullContextRegs {
|
||||||
|
pub int: IntRegisters,
|
||||||
|
pub float: FloatRegisters,
|
||||||
|
pub env: EnvRegisters,
|
||||||
|
}
|
||||||
|
|
||||||
impl Deref for IntRegisters {
|
impl Deref for IntRegisters {
|
||||||
type Target = [u8];
|
type Target = [u8];
|
||||||
fn deref(&self) -> &[u8] {
|
fn deref(&self) -> &[u8] {
|
||||||
@@ -149,6 +157,29 @@ impl DerefMut for FloatRegisters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Deref for FullContextRegs {
|
||||||
|
type Target = [u8];
|
||||||
|
fn deref(&self) -> &[u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts(
|
||||||
|
self as *const FullContextRegs as *const u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for FullContextRegs {
|
||||||
|
fn deref_mut(&mut self) -> &mut [u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts_mut(
|
||||||
|
self as *mut FullContextRegs as *mut u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Default)]
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
#[repr(packed)]
|
#[repr(packed)]
|
||||||
pub struct EnvRegisters {
|
pub struct EnvRegisters {
|
||||||
|
|||||||
@@ -164,6 +164,14 @@ pub struct IntRegisters {
|
|||||||
// pub gs: usize
|
// pub gs: usize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct FullContextRegs {
|
||||||
|
pub int: IntRegisters,
|
||||||
|
pub float: FloatRegisters,
|
||||||
|
pub env: EnvRegisters,
|
||||||
|
}
|
||||||
|
|
||||||
impl Deref for IntRegisters {
|
impl Deref for IntRegisters {
|
||||||
type Target = [u8];
|
type Target = [u8];
|
||||||
fn deref(&self) -> &[u8] {
|
fn deref(&self) -> &[u8] {
|
||||||
@@ -227,6 +235,29 @@ impl DerefMut for FloatRegisters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Deref for FullContextRegs {
|
||||||
|
type Target = [u8];
|
||||||
|
fn deref(&self) -> &[u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts(
|
||||||
|
self as *const FullContextRegs as *const u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for FullContextRegs {
|
||||||
|
fn deref_mut(&mut self) -> &mut [u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts_mut(
|
||||||
|
self as *mut FullContextRegs as *mut u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Default)]
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct EnvRegisters {
|
pub struct EnvRegisters {
|
||||||
|
|||||||
@@ -81,6 +81,14 @@ pub struct IntRegisters {
|
|||||||
pub ss: usize,
|
pub ss: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct FullContextRegs {
|
||||||
|
pub int: IntRegisters,
|
||||||
|
pub float: FloatRegisters,
|
||||||
|
pub env: EnvRegisters,
|
||||||
|
}
|
||||||
|
|
||||||
impl Deref for IntRegisters {
|
impl Deref for IntRegisters {
|
||||||
type Target = [u8];
|
type Target = [u8];
|
||||||
fn deref(&self) -> &[u8] {
|
fn deref(&self) -> &[u8] {
|
||||||
@@ -133,6 +141,29 @@ impl DerefMut for FloatRegisters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Deref for FullContextRegs {
|
||||||
|
type Target = [u8];
|
||||||
|
fn deref(&self) -> &[u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts(
|
||||||
|
self as *const FullContextRegs as *const u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for FullContextRegs {
|
||||||
|
fn deref_mut(&mut self) -> &mut [u8] {
|
||||||
|
unsafe {
|
||||||
|
slice::from_raw_parts_mut(
|
||||||
|
self as *mut FullContextRegs as *mut u8,
|
||||||
|
mem::size_of::<FullContextRegs>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#[derive(Clone, Copy, Debug, Default)]
|
#[derive(Clone, Copy, Debug, Default)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct EnvRegisters {
|
pub struct EnvRegisters {
|
||||||
|
|||||||
+12
@@ -101,6 +101,18 @@ pub fn fstat(fd: usize, stat: &mut Stat) -> Result<usize> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get filesystem metadata about a file descriptor
|
||||||
|
pub fn fstatvfs(fd: usize, stat: &mut Stat) -> Result<usize> {
|
||||||
|
unsafe {
|
||||||
|
syscall3(
|
||||||
|
SYS_FSTATVFS,
|
||||||
|
fd,
|
||||||
|
stat as *mut Stat as usize,
|
||||||
|
mem::size_of::<Stat>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Sync a file descriptor to its underlying medium
|
/// Sync a file descriptor to its underlying medium
|
||||||
pub fn fsync(fd: usize) -> Result<usize> {
|
pub fn fsync(fd: usize) -> Result<usize> {
|
||||||
unsafe { syscall1(SYS_FSYNC, fd) }
|
unsafe { syscall1(SYS_FSYNC, fd) }
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ pub const SYS_LSEEK: usize = SYS_CLASS_FILE | 19;
|
|||||||
pub const SYS_FCHOWN: usize = SYS_CLASS_FILE | 207;
|
pub const SYS_FCHOWN: usize = SYS_CLASS_FILE | 207;
|
||||||
pub const SYS_FCNTL: usize = SYS_CLASS_FILE | 55;
|
pub const SYS_FCNTL: usize = SYS_CLASS_FILE | 55;
|
||||||
pub const SYS_FEVENT: usize = SYS_CLASS_FILE | 927;
|
pub const SYS_FEVENT: usize = SYS_CLASS_FILE | 927;
|
||||||
|
pub const SYS_GETDENTS: usize = SYS_CLASS_FILE | 0x1B2;
|
||||||
|
pub const SYS_FTRUNCATE: usize = SYS_CLASS_FILE | 0x1B3;
|
||||||
|
pub const SYS_FUTIMENS: usize = SYS_CLASS_FILE | 0x1B4;
|
||||||
|
pub const SYS_FSTATVFS: usize = SYS_CLASS_FILE | 0x1B5;
|
||||||
|
pub const SYS_MKNS: usize = SYS_CLASS_FILE | 0x1B6;
|
||||||
|
|
||||||
// SYS_CALL, fd, inout buf ptr, inout buf len, flags, metadata buf ptr, metadata buf len
|
// SYS_CALL, fd, inout buf ptr, inout buf len, flags, metadata buf ptr, metadata buf len
|
||||||
// TODO: new number for SYS_CALL where flags are sent as 6th argument (using syscall6)
|
// TODO: new number for SYS_CALL where flags are sent as 6th argument (using syscall6)
|
||||||
@@ -53,6 +58,8 @@ pub const SYS_FPATH: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 928;
|
|||||||
pub const SYS_FRENAME: usize = SYS_CLASS_FILE | SYS_ARG_PATH | 38;
|
pub const SYS_FRENAME: usize = SYS_CLASS_FILE | SYS_ARG_PATH | 38;
|
||||||
pub const SYS_FSTAT: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 28;
|
pub const SYS_FSTAT: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 28;
|
||||||
pub const SYS_FSYNC: usize = SYS_CLASS_FILE | 118;
|
pub const SYS_FSYNC: usize = SYS_CLASS_FILE | 118;
|
||||||
|
pub const SYS_SYNC: usize = SYS_CLASS_FILE | 119;
|
||||||
|
pub const SYS_SYNCFS: usize = SYS_CLASS_FILE | 120;
|
||||||
|
|
||||||
pub const SYS_CLOCK_GETTIME: usize = 265;
|
pub const SYS_CLOCK_GETTIME: usize = 265;
|
||||||
pub const SYS_FUTEX: usize = 240;
|
pub const SYS_FUTEX: usize = 240;
|
||||||
|
|||||||
Reference in New Issue
Block a user