aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2004-10-10 19:29:13 +0000
committerH. Peter Anvin <hpa@zytor.com>2004-10-10 19:29:13 +0000
commit9b23403f6d6d01592a2a83a933e8524197e4d7e7 (patch)
tree6eee944b181984bc952266ba908c9a5871bff1e7
parent55d922ad05ada849d74b6fb01fd2edd5d756e8ee (diff)
downloadklibc-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.def4
-rw-r--r--klibc/arch/ppc64/sysstub.ph5
-rw-r--r--klibc/exitc.c15
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