diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/sysdeps/linux/common/_exit.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/libc/sysdeps/linux/common/_exit.c b/libc/sysdeps/linux/common/_exit.c index 2196a98fe..c9e73c546 100644 --- a/libc/sysdeps/linux/common/_exit.c +++ b/libc/sysdeps/linux/common/_exit.c @@ -10,17 +10,33 @@ #include <unistd.h> #include <stdlib.h> #include <sys/syscall.h> +#include <bits/kernel-features.h> + +#ifdef __UCLIBC_ABORT_INSTRUCTION__ +# define ABORT_INSTRUCTION __asm__(__UCLIBC_ABORT_INSTRUCTION__) +#else +# warning "no abort instruction defined for this arch" +#endif + +/* have to check for kernel 2.5.35 too, since NR was earlier present */ +#if defined __NR_exit_group && __LINUX_KERNEL_VERSION >= 0x020600 \ + && defined __UCLIBC_HAS_THREADS__ +# undef __NR_exit +# define __NR_exit __NR_exit_group +#endif void _exit(int status) { /* The loop is added only to keep gcc happy. */ while(1) { -#if defined __NR_exit_group && defined __UCLIBC_HAS_THREADS_NATIVE__ - INLINE_SYSCALL(exit_group, 1, status); -#endif INLINE_SYSCALL(exit, 1, status); +#ifdef ABORT_INSTRUCTION + ABORT_INSTRUCTION; +#endif } } libc_hidden_def(_exit) +#ifdef __USE_ISOC99 weak_alias(_exit,_Exit) +#endif |