~/syscall · the GNU/Linux programmer’s bookshelf
Linux System Call Reference
The small interface between your program and the kernel.
System call numbers, C signatures, and calling conventions, collected directly from Linux source.
Choose an architecture, look up a call, and follow it back to the kernel.
The syscall tables
Reading kernel snapshots…Arguments below are C prototype parameters, not a register-by-register assembly recipe. On 32-bit ABIs, 64-bit values may occupy multiple registers and require alignment; assembly wrappers may reorder them. See syscall(2).
ARG1 | ARG2 | ARG3 | ARG4 | ARG5 | ARG6 | Reference |
|---|
No system calls match this search.
ARG1–ARG6 contain kernel C parameters in order. Register headings apply to 64-bit ABIs. A dash means no argument; “not resolved” means the declaration is unavailable in the parsed headers. “Defined” indicates a table entry, not availability in every kernel configuration.
Calling conventions
Put the syscall number in NR, the arguments in the listed registers, then execute the entry instruction. The return value is delivered in RET. These are the raw kernel conventions; the C library provides its own wrappers.
| Architecture | Instruction | NR | RET | Argument registers |
|---|
On ARM EABI, some 64-bit arguments require an aligned register pair. See the architecture notes in syscall(2) before writing assembly.
A reference for programs, too
The same data is published as static JSON files. No account, key, or running API server is needed.
curl '/syscall/data/v7.3/x64.json'
GET /api/v1/index.json- API index, license information, and relative paths to each snapshot.
GET /api/v1/architectures.json- Supported architectures and their calling conventions.
GET /api/v1/versions.json- Available kernel snapshots, newest first.
GET /data/{version}/{arch}.json- A complete table with C declarations, licensing, source locations, and file hashes.
GET /data/{version}/sources.json- Input source files, original licenses, and checksums.
Search and release comparison run in your browser. For a single entry, open its details and choose “Download entry JSON”. Programs can filter the table locally, for example:
curl '/syscall/data/v7.3/x64.json' | jq '.syscalls[] | select(.name == "read")'
Download the manifest and the selected table for bulk use. Query parameters do not filter the static JSON files.
About this little reference
Inspired by syscall.sh and the plain, useful pages of the free software web. This is an independent project, with no affiliation to GNU or the Free Software Foundation.
The tables are generated from the Linux kernel source. Architecture-specific .tbl files supply numbers and entry points. include/linux/syscalls.h, compat.h, and architecture headers supply C declarations. ABI selection follows the kernel’s Makefile.syscalls. Register conventions are documented in Linux man-pages.
The details panel shows arguments as a table and offers a downloadable C template. Call numbers and declarations come from the selected kernel snapshot; valid pointers, flags and object lifetimes cannot be inferred from prototypes alone. Templates for write and getpid provide hand-written usage examples; other supported 64-bit calls get a TODO skeleton. Unresolved signatures, unimplemented slots and 32-bit ABIs do not get speculative code.
Each release is a separate snapshot. Comparison marks differences between those snapshots; it does not claim the exact release in which a call first appeared. Configuration-dependent calls and assembly-only signatures require consulting the linked source. Manual links use syscall names; not every entry has a separate manual page.
Updating from the kernel source
From this repository, run the importer with Python 3.9 or newer:
python3 scripts/sync_kernel.py --refs v7.3
# Or read an existing Linux checkout, without network access:
python3 scripts/sync_kernel.py --refs v7.3 --kernel-tree /path/to/linuxNo kernel build is required. The repository includes ready-to-use snapshots, so ordinary browsing works offline.