Я заметил, что системные вызовы x86 int $0x80
и amd64 syscall
имеют разные номера. Например, sys_exit
- это syscall 1 в x86 и syscall 60 в amd64. Существует ли (историческая) причина для различных схем нумерации системных вызовов?
Почему системные номера вызовов различаются в amd64 linux?
Ответ 1
Интерфейс syscall должен быть очень стабильным, и допускаются только добавления. Говоря о преимуществах того факта, что интерфейс syscall отличается для каждой архитектуры, ребята из Linux, скорее всего, решили очистить накопленный рывок и начать сэкономить на работе с amd64.
Ссылка: linux/Documentation/ABI/stable/syscalls
Этот интерфейс соответствует большей части интерфейса POSIX и основан на нем и другие интерфейсы на основе Unix. Он будет добавляться только через какое-то время, и не удалять вещи из него.
Обратите внимание, что этот интерфейс отличается для каждой архитектуры, которая Linux поддерживает. См. Документацию, относящуюся к архитектуре для получения подробной информации о номерах системного вызова, которые должны отображаться для каждого Системный вызов.