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). 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
0x10send(port, w1, w2, w3) -> 0 or -err
0x11recv(port, timeout_ms) -> source; r1–r3 payload
0x12call(port, w1, w2, w3) -> r0–r3 reply
0x13reply(reply_handle, w1, w2, w3) -> 0 or -err
0x14lsend(port, len) -> 0 or -err
0x15lcall(port, len) -> {0, recv_len}
0x16lreply(reply_handle, len) -> 0 or -err
0x17waitany(handles*, count, timeout_ms, result*) -> 0 or -err

Handles & capabilities (0x20–0x26)

NumberNameSignature
0x20port_create() -> handle or -err
0x21ntfn_create() -> handle or -err
0x22dev_query(handle, out*, buf_len) -> irq or -err
0x23grant(handle, pid) -> slot or -err
0x24destroy(handle) -> 0 or -err
0x25ntfn_signal(ntfn_handle, bits) -> 0 or -err
0x26ntfn_wait(ntfn_handle, timeout_ms) -> bits or -err

Memory (0x30–0x38)

NumberNameSignature
0x30memmap(handle | HANDLE_ANON, size, prot, flags) -> va or -err
0x31memunmap(addr) -> 0 or -err
0x32shm_create(size) -> handle or -err
0x37memprotect(addr, size, prot) -> 0 or -err
0x38asinject(args*) -> 0 or -err

Interrupts (0x40–0x42)

NumberNameSignature
0x41irq_bind(dev_handle, ntfn_handle) -> 0 or -err
0x42irq_done(dev_handle) -> 0 or -err