Arch Linux поставляется unistd_32.h
и unistd_64.h
in /usr/include/asm/
. Просто посмотрите на эти заголовки, если вы не модифицируете ядро для добавления новых системных вызовов.
<asm/unistd.h>
проверяет макросы, чтобы выяснить, включено ли их в 32- или 64-битный код (и проверяет x32), и использует #include
, чтобы получить правильный набор определений для цели.
В моей современной системе Arch x86-64:
$ pacman -Fo /usr/include/asm/unistd*
usr/include/asm/unistd_32.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd_64.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd.h is owned by core/linux-api-headers 4.7-1
usr/include/asm/unistd_x32.h is owned by core/linux-api-headers 4.7-1
В самом исходном коде ядра, начиная с версии 3.3, unistd_32.h
для использования пользовательским пространством построен из других файлов .
https://github.com/torvalds/linux/search?q=unistd_32.h&unscoped_q=unistd_32.h находит это в arch/x86/entry/syscalls/Makefile
$(uapi)/unistd_32.h: $(syscall32) $(syshdr)
$(call if_changed,syshdr)
Таблицы системных вызовов определены в: arch/x86/entry/syscalls/syscall_32.tbl
и .../syscall_64.tbl
https://github.com/torvalds/linux/tree/6f0d349d922ba44e4348a17a78ea51b7135965b1/arch/x86/entry/syscalls
Содержимое syscall_32.tbl
выглядит так:
# some comments
0 i386 restart_syscall sys_restart_syscall __ia32_sys_restart_syscall
1 i386 exit sys_exit __ia32_sys_exit
2 i386 fork sys_fork __ia32_sys_fork
3 i386 read sys_read __ia32_sys_read
...