_exit.c:
#include <sys/types.h>
#include <sys/syscall.h>void __syscall(quad_t n, ...);
void _exit(int status)
{
__syscall(SYS_exit, status);
}
$ cc -c -Wall _exit.c
_exit.c:31:1: warning: function declared 'noreturn' should not return
[-Winvalid-noreturn]
}
^
1 warning generated.Вроде функция вызывает другую noreturn функцию, предупреждений быть не должно, а есть... Я не понимаю почему, помогите плиз.
А __syscall точно noreturn? `syscall` и `_syscall` точно не noreturn, про ваш `__syscall` ничего не знаю) Если что, добавьте вечный цикл в конце функции, например просто while(1);
> void _exit(int status)Переопределять функцию стандартной библиотеки - не самая лучшая идея.
Пример реализации из состава glibc малость сложнее вашего:
https://github.com/lattera/glibc/blob/master/sysdeps/unix/sy...