Linux System Call Tables

Numbers, names and arguments of the x86-64 Linux system calls, 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.

Kernel versions

Linux 7.2

421 entries (338 common, 47 x86-64 only, 36 x32 only), highest x86-64 number 471.

Generated from the linux-7.2.12 sources.

x86-64 table

Linux 6.18

419 entries (336 common, 47 x86-64 only, 36 x32 only), highest x86-64 number 469.

Generated from the linux-6.18.58 sources.

x86-64 table

Linux 5.15

396 entries (313 common, 47 x86-64 only, 36 x32 only), highest x86-64 number 448.

Generated from the linux-5.15.223 sources.

x86-64 table

Linux 4.7

329 entries, highest x86-64 number 328.

Historical hand-written table.

x86-64 table

Calling convention (x86-64)

InstructionNumberArg 1Arg 2Arg 3Arg 4Arg 5Arg 6ReturnClobbered
syscallraxrdirsirdxr10r8r9raxrcx, r11
A return value between -4095 and -1 is an error (-errno); libc turns it into -1 and sets errno. syscall saves the return address in rcx and RFLAGS in r11, which is why the 4th argument goes in r10 instead of rcx as in the function call ABI. The ABI column of syscall_64.tbl tells who can use an entry: common for both x86-64 and x32, 64 for x86-64 only, x32 for x32 only (x32 numbers are or-ed with 0x40000000). Other architectures are on the calling conventions cheat sheet.

Changes between versions

System call numbers never change once allocated: new system calls get the next free number, removed ones become reserved.

Linux 6.18 → 7.2 +2 / −0

Linux 5.15 → 6.18 +23 / −0

Linux 4.7 → 5.15 +31 / −0