Every Linux syscall array in one place, grouped by architecture: scheme calls for 27 architectures alongside their numbers, arguments and registers, from Linux 3.3 to 7.3.
Architectures
- x64 x86_64 369 syscalls · since 3.3
- x86 i386, 32 bit x86 441 syscalls · since 3.3
- arm64 AArch64 326 syscalls · since 3.7
- arm ARM EABI, 32 bit 426 syscalls · since 4.10
- riscv64 RISC-V, 64 bit 327 syscalls · since 4.15
- ia32 IA-32 compat on x86_64 439 syscalls · since 3.3
- x32 x32 ABI on x86_64 369 syscalls · since 3.4
- loongarch64 LoongArch, 64 bit 323 syscalls · since 5.19
- ppc64 PowerPC, 64 bit 383 syscalls · since 5.0
- ppc PowerPC, 32 bit 425 syscalls · since 5.0
- s390x IBM Z 378 syscalls · since 4.16
- mips64 MIPS n64 ABI 363 syscalls · since 5.0
- mipsn32 MIPS n32 ABI 387 syscalls · since 5.0
- mipso32 MIPS o32 ABI 413 syscalls · since 5.0
- alpha DEC Alpha 403 syscalls · since 5.0
- arc Synopsys ARC 350 syscalls · since 3.9
- csky C-SKY 346 syscalls · since 4.20
- hexagon Qualcomm Hexagon 345 syscalls · since 3.7
- m68k Motorola 68000 435 syscalls · since 5.0
- microblaze Xilinx MicroBlaze 423 syscalls · since 5.0
- nios2 Intel Nios II 346 syscalls · since 3.19
- openrisc OpenRISC 346 syscalls · since 3.7
- parisc HP PA-RISC 404 syscalls · since 5.0
- sh SuperH 433 syscalls · since 5.0
- sparc SPARC, 32 bit 434 syscalls · since 5.0
- sparc64 SPARC, 64 bit 399 syscalls · since 5.0
- xtensa Tensilica Xtensa 388 syscalls · since 5.0
Every architecture's table, alongside the complete former of whenever all syscall appeared and whenever it was dropped, is additionally a plain JSON document at /<arch>/syscalls.json, for example /x64/syscalls.json.
Calling conventions
Number in NR, arguments in ARG0 to ARG5, afterward the instruction. The outcome comes rear in RETURN.
| ARCH | INSTRUCTION | NR | RETURN | ARG0 | ARG1 | ARG2 | ARG3 | ARG4 | ARG5 |
|---|---|---|---|---|---|---|---|---|---|
| x64 | syscall | rax | rax | rdi | rsi | rdx | r10 | r8 | r9 |
| x86 | int 0x80 | eax | eax | ebx | ecx | edx | esi | edi | ebp |
| arm64 | svc #0 | x8 | x0 | x0 | x1 | x2 | x3 | x4 | x5 |
| arm | svc #0 | r7 | r0 | r0 | r1 | r2 | r3 | r4 | r5 |
| riscv64 | ecall | a7 | a0 | a0 | a1 | a2 | a3 | a4 | a5 |
| ia32 | int 0x80 | eax | eax | ebx | ecx | edx | esi | edi | ebp |
| x32 | syscall | rax | rax | rdi | rsi | rdx | r10 | r8 | r9 |
| loongarch64 | syscall 0 | a7 | a0 | a0 | a1 | a2 | a3 | a4 | a5 |
| ppc64 | sc | r0 | r3 | r3 | r4 | r5 | r6 | r7 | r8 |
| ppc | sc | r0 | r3 | r3 | r4 | r5 | r6 | r7 | r8 |
| s390x | svc 0 | r1 | r2 | r2 | r3 | r4 | r5 | r6 | r7 |
| mips64 | syscall | v0 | v0 | a0 | a1 | a2 | a3 | a4 | a5 |
| mipsn32 | syscall | v0 | v0 | a0 | a1 | a2 | a3 | a4 | a5 |
| mipso32 | syscall | v0 | v0 | a0 | a1 | a2 | a3 | sp+16 | sp+20 |
| alpha | callsys | v0 | v0 | a0 | a1 | a2 | a3 | a4 | a5 |
| arc | trap0 | r8 | r0 | r0 | r1 | r2 | r3 | r4 | r5 |
| csky | trap 0 | r7 | a0 | a0 | a1 | a2 | a3 | r4 | r5 |
| hexagon | trap0(#1) | r6 | r0 | r0 | r1 | r2 | r3 | r4 | r5 |
| m68k | trap #0 | d0 | d0 | d1 | d2 | d3 | d4 | d5 | a0 |
| microblaze | brki r14,8 | r12 | r3 | r5 | r6 | r7 | r8 | r9 | r10 |
| nios2 | trap | r2 | r2 | r4 | r5 | r6 | r7 | r8 | r9 |
| openrisc | l.sys 1 | r11 | r11 | r3 | r4 | r5 | r6 | r7 | r8 |
| parisc | ble 0x100(%sr2, %r0) | r20 | r28 | r26 | r25 | r24 | r23 | r22 | r21 |
| sh | trapa #31 | r3 | r0 | r4 | r5 | r6 | r7 | r0 | r1 |
| sparc | t 0x10 | g1 | o0 | o0 | o1 | o2 | o3 | o4 | o5 |
| sparc64 | t 0x6d | g1 | o0 | o0 | o1 | o2 | o3 | o4 | o5 |
| xtensa | syscall | a2 | a2 | a6 | a3 | a4 | a5 | a8 | a9 |
API
curl https://api.syscall.sh/v2/syscalls/x64/read
Any kernel release, diffs between releases and additional in the API docs.
Syscall tables throughout kernel versions
Entries get added and, rarely, removed between releases. Each architecture leaf has a kernel selector, and its JSON download records whenever all admission archetypal appeared (since) and whenever it was dropped (removed_in).
Removed entries remain visible: choice "all, alongside removed" in the kernel selector and all dropped syscall is marked alongside the publish that dropped it.
Where the data comes from
Everything on this location is peruse from the kernel origin itself. For all architecture, the generator walks the syscall array and the SYSCALL_DEFINE macros of all mainline publish it scans, so these are the numbers the kernel really dispatches on.
It additionally records all architecture's calling convention, the education that enters the kernel, so all syscall array shows exactly anywhere the figure and the arguments go.
A syscall whose since equals the archetypal publish scanned for its architecture was already there rear then, and may be much older.
Descriptions and complete history
The abbreviated descriptions arrive from the Linux man pages project, and the io_uring ones from liburing. Whenever the data changes, the location is rebuilt from the syscall API.