182 lines
4.8 KiB
Rust
182 lines
4.8 KiB
Rust
#![allow(dead_code)]
|
|
|
|
pub mod memoryflags;
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum Message {
|
|
MutableBorrow = 0,
|
|
Borrow = 1,
|
|
Move = 2,
|
|
Scalar = 3,
|
|
BlockingScalar = 4,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum SyscallResultNumber {
|
|
Ok = 0,
|
|
Error = 1,
|
|
MemoryRange = 3,
|
|
ConnectionId = 7,
|
|
Message = 9,
|
|
ThreadId = 10,
|
|
Unimplemented = 12,
|
|
Scalar1 = 14,
|
|
Scalar2 = 15,
|
|
MemoryReturned = 18,
|
|
Scalar5 = 20,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum SyscallErrorNumber {
|
|
NoError = 0,
|
|
BadAlignment = 1,
|
|
BadAddress = 2,
|
|
OutOfMemory = 3,
|
|
MemoryInUse = 4,
|
|
InterruptNotFound = 5,
|
|
InterruptInUse = 6,
|
|
InvalidString = 7,
|
|
ServerExists = 8,
|
|
ServerNotFound = 9,
|
|
ProcessNotFound = 10,
|
|
ProcessNotChild = 11,
|
|
ProcessTerminated = 12,
|
|
Timeout = 13,
|
|
InternalError = 14,
|
|
ServerQueueFull = 15,
|
|
ThreadNotAvailable = 16,
|
|
UnhandledSyscall = 17,
|
|
InvalidSyscall = 18,
|
|
ShareViolation = 19,
|
|
InvalidThread = 20,
|
|
InvalidPID = 21,
|
|
UnknownError = 22,
|
|
AccessDenied = 23,
|
|
UseBeforeInit = 24,
|
|
DoubleFree = 25,
|
|
DebugInProgress = 26,
|
|
InvalidLimit = 27,
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum Syscall {
|
|
Unknown([i64; 8]),
|
|
Yield,
|
|
IncreaseHeap(
|
|
i64, /* number of bytes to add */
|
|
i64, /* memory flags */
|
|
),
|
|
MapMemory(
|
|
i64, /* address */
|
|
i64, /* size */
|
|
i64, /* flags */
|
|
i64, /* name */
|
|
),
|
|
Connect([u32; 4] /* Server ID */),
|
|
SendMessage(
|
|
u32, /* Connection ID */
|
|
u32, /* message kind */
|
|
u32, /* opcode */
|
|
[u32; 4], /* descriptor */
|
|
),
|
|
UpdateMemoryFlags(
|
|
i64, /* address */
|
|
i64, /* range */
|
|
i64, /* flags */
|
|
),
|
|
CreateThread(
|
|
i64, /* entry point */
|
|
i64, /* stack pointer */
|
|
i64, /* stack length */
|
|
i64, /* argument 1 */
|
|
i64, /* argument 2 */
|
|
i64, /* argument 3 */
|
|
i64, /* argument 4 */
|
|
),
|
|
JoinThread(i64 /* thread ID */),
|
|
UnmapMemory(i64, /* address */ i64 /* size */),
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum SyscallNumber {
|
|
MapMemory = 2,
|
|
Yield = 3,
|
|
IncreaseHeap = 10,
|
|
UpdateMemoryFlags = 12,
|
|
ReceiveMessage = 15,
|
|
SendMessage = 16,
|
|
Connect = 17,
|
|
CreateThread = 18,
|
|
UnmapMemory = 19,
|
|
ReturnMemory = 20,
|
|
TerminateProcess = 22,
|
|
TrySendMessage = 24,
|
|
TryConnect = 25,
|
|
GetThreadId = 32,
|
|
JoinThread = 36,
|
|
AdjustProcessLimit = 38,
|
|
ReturnScalar = 40,
|
|
Unknown = 0,
|
|
}
|
|
|
|
impl From<[i64; 8]> for Syscall {
|
|
fn from(value: [i64; 8]) -> Self {
|
|
match value[0].into() {
|
|
SyscallNumber::IncreaseHeap => Syscall::IncreaseHeap(value[1], value[2]),
|
|
SyscallNumber::MapMemory => Syscall::MapMemory(value[1], value[2], value[3], value[4]),
|
|
SyscallNumber::UnmapMemory => Syscall::UnmapMemory(value[1], value[2]),
|
|
SyscallNumber::Connect => Syscall::Connect([
|
|
value[1] as u32,
|
|
value[2] as u32,
|
|
value[3] as u32,
|
|
value[4] as u32,
|
|
]),
|
|
SyscallNumber::SendMessage => Syscall::SendMessage(
|
|
value[1] as u32,
|
|
value[2] as u32,
|
|
value[3] as u32,
|
|
[
|
|
value[4] as u32,
|
|
value[5] as u32,
|
|
value[6] as u32,
|
|
value[7] as u32,
|
|
],
|
|
),
|
|
SyscallNumber::UpdateMemoryFlags => {
|
|
Syscall::UpdateMemoryFlags(value[1], value[2], value[3])
|
|
}
|
|
SyscallNumber::CreateThread => Syscall::CreateThread(
|
|
value[1], value[2], value[3], value[4], value[5], value[6], value[7],
|
|
),
|
|
SyscallNumber::Yield => Syscall::Yield,
|
|
SyscallNumber::JoinThread => Syscall::JoinThread(value[1]),
|
|
_ => Syscall::Unknown(value),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<i64> for SyscallNumber {
|
|
fn from(value: i64) -> Self {
|
|
match value {
|
|
2 => SyscallNumber::MapMemory,
|
|
3 => SyscallNumber::Yield,
|
|
10 => SyscallNumber::IncreaseHeap,
|
|
12 => SyscallNumber::UpdateMemoryFlags,
|
|
15 => SyscallNumber::ReceiveMessage,
|
|
16 => SyscallNumber::SendMessage,
|
|
17 => SyscallNumber::Connect,
|
|
18 => SyscallNumber::CreateThread,
|
|
19 => SyscallNumber::UnmapMemory,
|
|
20 => SyscallNumber::ReturnMemory,
|
|
22 => SyscallNumber::TerminateProcess,
|
|
24 => SyscallNumber::TrySendMessage,
|
|
25 => SyscallNumber::TryConnect,
|
|
32 => SyscallNumber::GetThreadId,
|
|
36 => SyscallNumber::JoinThread,
|
|
38 => SyscallNumber::AdjustProcessLimit,
|
|
40 => SyscallNumber::ReturnScalar,
|
|
_ => SyscallNumber::Unknown,
|
|
}
|
|
}
|
|
}
|