Я копаю глубже в системные вызовы,
Добавлен системный вызов в syscall_32.tbl и syscall_64.tbl
syscall_32.tbl
434 i386 hello sys_hello __ia32_sys_hello
syscall_64. tbl
434 common hello __x64_sys_hello
Определение:
SYSCALL_DEFINE0(hello) {
pr_info("%s\n", __func__);
pr_info("Hello, world!\n");
return 0;
}
Код пространства пользователя:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/syscall.h>
#include <string.h>
int main(void)
{
long return_value = syscall(434);
printf("return value from syscall: %ld, erron:%d\n", return_value, errno);
return 0;
}
Когда я запускаю этот код пространства пользователя на x86_64, я получаю следующий вывод в dmesg
$ gcc userspace.c -o userspace
[ 800.837360] __x64_sys_hello
[ 800.837361] Hello, world!
Но когда я компилирую его для 32-битной системы, я получаю
$ gcc userspace.c -o userspace -m32
[ 838.979286] __x64_sys_hello
[ 838.979286] Hello, world!
Как получается, что точка входа в syscall_32.tbl (__ia32_sys_hello) отображается на __x64_sys_hello?