Linux System Call Tables

Numbers, names and arguments of the Linux system calls for 8 architectures, one table per kernel version. The tables are generated from the kernel sources, so each entry links to the place where the system call is defined. To find the number of a system call on every architecture at once, use the comparison table.

Tables (kernel version × architecture)

Kernelx86-64x86 (i386)ARM (EABI)AArch64RISC-V 64MIPS o32MIPS n64PowerPC64All
Linux 7.2421461424327328445374424compare
Linux 6.18419459422325326443372422compare
Linux 5.15396438401304304422352401compare
Linux 4.7329———————
Each cell is the number of entries of the table. Linux 4.7 is the historical hand-written x86-64 table of this site.

Calling conventions

ArchInstructionNumberArg 1Arg 2Arg 3Arg 4Arg 5Arg 6ReturnClobbered / error
x86-64syscallraxrdirsirdxr10r8r9raxrcx, r11
x86 (i386)int 0x80eaxebxecxedxesiediebpeax—
ARM (EABI)svc #0r7r0r1r2r3r4r5r0—
AArch64svc #0x8x0x1x2x3x4x5x0—
RISC-V 64ecalla7a0a1a2a3a4a5a0—
MIPS o32syscallv0a0a1a2a3sp+16sp+20v0a3 = error flag
MIPS n64syscallv0a0a1a2a3a4a5v0a3 = error flag
PowerPC64scr0r3r4r5r6r7r8r3CR0.SO = error flag
A return value between -4095 and -1 is an error (-errno); libc turns it into -1 and sets errno (MIPS and PowerPC flag errors separately, see below). Function call ABIs are on the calling conventions cheat sheet.

Changes between versions (x86-64)

System call numbers never change once allocated: new system calls get the next free number, removed ones become reserved. Since Linux 5.1 new system calls get the same number on every architecture (424 and up, plus the 4000/5000 base on MIPS), except on Alpha.

Linux 6.18 → 7.2 +2 / −0

Linux 5.15 → 6.18 +23 / −0

Linux 4.7 → 5.15 +31 / −0