Syscall table

The syscall number is the SVC immediate; arguments pass in r0–r3 and the result returns in r0, with negative values meaning error (see Syscall ABI for the convention and error codes for the full list). Every kernel object -port, notification, shared-memory region, device, task- is named by a handle, a small per-process slot index; userspace never holds a raw kernel pointer.

This table reflects the Loaf freeze (kernel 1.0) plus compatible 1.x additions such as stamp. The numbers and signatures below are stable: a number is never renumbered or reused, and retired calls leave their slots permanently reserved rather than recycling them.

The table

Task lifecycle (0x00–0x0B)

NumberNameSignature
0x00PQuit(status) -> never returns
0x01Yield() -> 0
0x03Wait(pid, &status, flags) -> pid or -err
0x04GetPid() -> pid
0x05Sleep(ms) -> 0
0x06PSpawn(args*) -> {handle, pid} or -err
0x07Kickstart(args*) -> 0 or -err
0x08PKill(task_handle) -> 0 or -err
0x09TMake(entry, sp, arg) -> tid or -err
0x0ATJoin(tid) -> exit_status or -err
0x0BTQuit(status) -> never returns

Messaging (0x10–0x17)

NumberNameSignature
0x10MsgSend(port, w1, w2, w3) -> 0 or -err
0x11MsgRecv(port, timeout_ms) -> source; r1–r3 payload
0x12MsgCall(port, w1, w2, w3) -> r0–r3 reply
0x13MsgReply(reply_handle, w1, w2, w3) -> 0 or -err
0x14MsgLsend(port, len) -> 0 or -err
0x15MsgLcall(port, len) -> {0, recv_len}
0x16MsgLreply(reply_handle, len) -> 0 or -err
0x17Waitany(handles*, count, timeout_ms, result*) -> 0 or -err

Handles & capabilities (0x20–0x27)

NumberNameSignature
0x20PortCreate() -> handle or -err
0x21NtfnCreate() -> handle or -err
0x22DeviceQuery(handle, out*, buf_len) -> irq or -err
0x23Grant(handle, pid) -> slot or -err
0x24Destroy(handle) -> 0 or -err
0x25NtfnSignal(ntfn_handle, bits) -> 0 or -err
0x26NtfnWait(ntfn_handle, timeout_ms) -> bits or -err
0x27Stamp(handle, marker) -> stamped_handle or -err
0x28SetLabel(handle, marker) -> stamped_handle or -err

Memory (0x30–0x38)

NumberNameSignature
0x30MemMap(handle | HANDLE_ANON, size, prot, flags) -> va or -err
0x31MemUnmap(addr) -> 0 or -err
0x32ShmemCreate(size) -> handle or -err
0x37MemProtect(addr, size, prot) -> 0 or -err
0x38AsInject(args*) -> 0 or -err

Interrupts (0x40–0x42)

NumberNameSignature
0x41IrqBind(dev_handle, ntfn_handle) -> 0 or -err
0x42IrqDone(dev_handle) -> 0 or -err