diff options
author | H. Peter Anvin <hpa@zytor.com> | 2004-10-10 19:29:13 +0000 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2004-10-10 19:29:13 +0000 |
commit | 9b23403f6d6d01592a2a83a933e8524197e4d7e7 (patch) | |
tree | 6eee944b181984bc952266ba908c9a5871bff1e7 | |
parent | 55d922ad05ada849d74b6fb01fd2edd5d756e8ee (diff) | |
download | klibc-9b23403f6d6d01592a2a83a933e8524197e4d7e7.tar.gz |
Get rid of the last remaining use of the syscall macros (for _exit());klibc-0.183
Optimize the ppc64 syscall stubs slightly
-rw-r--r-- | klibc/SYSCALLS.def | 4 | ||||
-rw-r--r-- | klibc/arch/ppc64/sysstub.ph | 5 | ||||
-rw-r--r-- | klibc/exitc.c | 15 |
3 files changed, 5 insertions, 19 deletions
diff --git a/klibc/SYSCALLS.def b/klibc/SYSCALLS.def index 220e5630e578e..7cc0b976e7997 100644 --- a/klibc/SYSCALLS.def +++ b/klibc/SYSCALLS.def @@ -15,6 +15,7 @@ ; ; Process-related syscalls ; +<!i386,x86_64> void _exit,exit::_exit(int) <?!ia64> pid_t clone::__clone(unsigned long, void *) <?ia64> pid_t clone::__clone2(unsigned long, void *, void *) <?!sparc> pid_t fork() @@ -126,7 +127,8 @@ int close(int) int dup(int) int dup2(int, int) <i386> int fcntl64@varadic::fcntl(int, int, unsigned long) -<!i386> int fcntl64,fcntl::fcntl(int, int, unsigned long) +<ppc64> int fcntl(int, int, unsigned long) +<!i386,ppc64> int fcntl64,fcntl::fcntl(int, int, unsigned long) int ioctl(int, int, void *) int flock(int, int) int _newselect,select::select(int, fd_set *, fd_set *, fd_set *, struct timeval *) diff --git a/klibc/arch/ppc64/sysstub.ph b/klibc/arch/ppc64/sysstub.ph index 1469cc6071ad7..0a379158e1c82 100644 --- a/klibc/arch/ppc64/sysstub.ph +++ b/klibc/arch/ppc64/sysstub.ph @@ -16,16 +16,13 @@ sub make_sysstub($$$$@) { print OUT "\t.align 3\n"; print OUT "${fname}:\n"; print OUT "\t.quad .${fname},.TOC.\@tocbase,0\n"; - print OUT "\t.size ${fname},24\n"; print OUT "\t.text\n"; print OUT "\t.type .${fname},\@function\n"; print OUT "\t.globl .${fname}\n"; print OUT ".${fname}:\n"; print OUT "\tli 0,__NR_${sname}\n"; print OUT "\tsc\n"; - print OUT "\tmfcr 0\n"; - print OUT "\trldicl. 9,0,36,63\n"; - print OUT "\tbeqlr- 0\n"; + print OUT "\tbnslr\n"; print OUT "\tb .__syscall_error\n"; print OUT "\t.size .${fname},.-.${fname}\n"; close(OUT); diff --git a/klibc/exitc.c b/klibc/exitc.c index 6e5d78979ddb7..8819737fb7afe 100644 --- a/klibc/exitc.c +++ b/klibc/exitc.c @@ -1,9 +1,7 @@ /* * exit.c * - * Note: all programs need exit(), since it's invoked from - * crt0.o. Therefore there is no point in breaking apart - * exit() and _exit(). + * Implement exit() */ #include <stdlib.h> @@ -14,11 +12,6 @@ #if !defined(__i386__) && !defined(__x86_64__) -#define __NR___exit __NR_exit - -/* Syscalls can't return void... */ -static inline _syscall1(int,__exit,int,rv); - /* This allows atexit/on_exit to install a hook */ __noreturn (*__exit_handler)(int) = _exit; @@ -27,10 +20,4 @@ __noreturn exit(int rv) __exit_handler(rv); } -__noreturn _exit(int rv) -{ - __exit(rv); - for(;;); -} - #endif |