#[cfg(target_arch = "aarch64")]
pub mod aarch64;
#[cfg(target_arch = "aarch64")]
pub use aarch64::{MContext, UContext};
#[cfg(target_arch = "loongarch64")]
pub mod loongarch64;
#[cfg(target_arch = "loongarch64")]
pub use loongarch64::{MContext, UContext};
#[cfg(target_arch = "riscv64")]
pub mod riscv64;
#[cfg(target_arch = "riscv64")]
pub use riscv64::{MContext, UContext};
#[cfg(target_arch = "x86_64")]
pub mod x86_64;
#[cfg(target_arch = "x86_64")]
pub use x86_64::{MContext, UContext};
use crate::types::TimeSpec;
#[repr(C)]
#[derive(Debug, Clone)]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy::FromBytes,
zerocopy::Immutable,
zerocopy::IntoBytes,
zerocopy::KnownLayout
)
)]
pub struct SignalStackFlags(u32);
bitflags! {
impl SignalStackFlags: u32 {
const ONSTACK = 1;
const DISABLE = 2;
const AUTODISARM = 0x80000000;
}
}
#[repr(C)]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy::FromBytes,
zerocopy::Immutable,
zerocopy::IntoBytes,
zerocopy::KnownLayout
)
)]
#[derive(Debug, Clone)]
pub struct UStack {
pub sp: usize,
pub flags: SignalStackFlags,
_pad0: u32,
pub size: usize,
}
#[derive(Debug, Default, Clone, PartialEq, Eq)]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy::FromBytes,
zerocopy::Immutable,
zerocopy::IntoBytes,
zerocopy::KnownLayout
)
)]
pub struct StatMode(u32);
bitflags! {
impl StatMode: u32 {
const NULL = 0;
const TYPE_MASK = 0o170000;
const FIFO = 0o010000;
const CHAR = 0o020000;
const DIR = 0o040000;
const BLOCK = 0o060000;
const FILE = 0o100000;
const LINK = 0o120000;
const SOCKET = 0o140000;
const SET_UID = 0o4000;
const SET_GID = 0o2000;
const OWNER_MASK = 0o700;
const OWNER_READ = 0o400;
const OWNER_WRITE = 0o200;
const OWNER_EXEC = 0o100;
const GROUP_MASK = 0o70;
const GROUP_READ = 0o40;
const GROUP_WRITE = 0o20;
const GROUP_EXEC = 0o10;
const OTHER_MASK = 0o7;
const OTHER_READ = 0o4;
const OTHER_WRITE = 0o2;
const OTHER_EXEC = 0o1;
}
}
#[repr(C)]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy::FromBytes,
zerocopy::Immutable,
zerocopy::IntoBytes,
zerocopy::KnownLayout
)
)]
#[derive(Debug, Default, Clone)]
#[cfg(not(target_arch = "x86_64"))]
pub struct Stat {
pub dev: u64,
pub ino: u64,
pub mode: StatMode,
pub nlink: u32,
pub uid: u32,
pub gid: u32,
pub rdev: u64,
pub __pad: u64,
pub size: u64,
pub blksize: u32,
pub __pad2: u32,
pub blocks: u64,
pub atime: TimeSpec,
pub mtime: TimeSpec,
pub ctime: TimeSpec,
}
#[repr(C)]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy::FromBytes,
zerocopy::Immutable,
zerocopy::IntoBytes,
zerocopy::KnownLayout
)
)]
#[derive(Debug, Default, Clone)]
#[cfg(target_arch = "x86_64")]
pub struct Stat {
pub dev: u64,
pub ino: u64,
pub nlink: u64,
pub mode: StatMode,
pub uid: u32,
pub gid: u32,
pub _pad0: u32,
pub rdev: u64,
pub size: u64,
pub blksize: u64,
pub blocks: u64,
pub atime: TimeSpec,
pub mtime: TimeSpec,
pub ctime: TimeSpec,
}