Я читаю Linux Kernel Development, 3-е изд., чтобы узнать о реализации и дизайне ядра. Глава 5 касается системных вызовов. Автор показывает пример объявления syscall, который определяется с помощью макроса SYSCALL_DEFINE0
, который в этом конкретном примере расширяется до:
asmlinkage long sys_getpid(void)
Далее он говорит, что:
[...] Для совместимости между 32- и 64-разрядными системами системные вызовы, определенные для возврата int в пользовательском пространстве, возвращают длинные в ядре.
Он не идет глубже этого, и я не могу точно понять, почему это так. Почему использование long
связано с 32- и 64-разрядными системами? Почему мы не можем вернуть простой int
?