Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e4643c9de | |||
| 9fad5e653c | |||
| c59951c038 |
@@ -95,6 +95,14 @@ pub struct IntRegisters {
|
||||
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 {
|
||||
type Target = [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)]
|
||||
#[repr(C, packed)]
|
||||
pub struct EnvRegisters {
|
||||
|
||||
@@ -96,6 +96,14 @@ pub struct IntRegisters {
|
||||
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 {
|
||||
type Target = [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)]
|
||||
#[repr(packed)]
|
||||
pub struct EnvRegisters {
|
||||
|
||||
@@ -164,6 +164,14 @@ pub struct IntRegisters {
|
||||
// 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 {
|
||||
type Target = [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)]
|
||||
#[repr(C, packed)]
|
||||
pub struct EnvRegisters {
|
||||
|
||||
@@ -81,6 +81,14 @@ pub struct IntRegisters {
|
||||
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 {
|
||||
type Target = [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)]
|
||||
#[repr(C, packed)]
|
||||
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
|
||||
pub fn fsync(fd: usize) -> Result<usize> {
|
||||
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_FCNTL: usize = SYS_CLASS_FILE | 55;
|
||||
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
|
||||
// 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_FSTAT: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 28;
|
||||
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_FUTEX: usize = 240;
|
||||
|
||||
Reference in New Issue
Block a user