Сайт Syscall.sh обновил справочник системных вызовов Linux и собрал таблицы для 27 архитектур в одном месте. Он охватывает основные релизы ядра с версии 3.3 по 7.3. Для каждого вызова указаны номер, аргументы и используемые регистры, а для архитектуры — инструкция перехода в ядро и соглашение о возврате результата. Например, на x64 номер помещается в rax, аргументы передаются через rdi, rsi, rdx, r10, r8 и r9, а результат возвращается в rax. На arm64 используются инструкция svc #0, регистр x8 для номера и x0–x5 для аргументов.
У каждой архитектуры есть отдельная таблица и JSON-файл по адресу //syscalls.json. Переключатель версии ядра позволяет увидеть состояние таблицы в конкретном релизе. Поля since и removed_in фиксируют, когда запись появилась и когда её удалили. Удалённые вызовы можно не скрывать: в режиме all, with removed они остаются в таблице вместе с номером версии, в которой исчезли. Если since совпадает с первой проверенной для архитектуры версией, это означает лишь, что вызов уже существовал тогда; фактически он может быть значительно старше.
Через API можно запрашивать конкретные записи и получать различия между выпусками ядра. На главной странице приведён пример обращения к https://api.syscall.sh/v2/syscalls/x64/read, а остальные возможности описаны в документации API. Изменения данных автоматически приводят к пересборке сайта из того же API.
Источником номеров и соглашений служит не вручную составленная таблица, а исходный код ядра. Генератор проходит по таблицам системных вызовов и макросам SYSCALL_DEFINE каждого проверяемого mainline-релиза. Поэтому сайт показывает номера, которые ядро действительно использует при диспетчеризации, и одновременно записывает инструкцию входа в ядро для каждой архитектуры.
Краткие описания взяты из проекта Linux man pages, а сведения о вызовах io_uring — из liburing. В результате справочник объединяет машиночитаемую историю таблиц, архитектурные соглашения и документацию, не требуя отдельно сопоставлять эти сведения по исходникам разных выпусков Linux.