about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/_strerror.c3
-rw-r--r--sysdeps/unix/configure.in6
-rw-r--r--sysdeps/unix/sysv/linux/i386/brk.S2
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap.S3
-rw-r--r--sysdeps/unix/sysv/linux/i386/sbrk.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/socket.S3
-rw-r--r--sysdeps/unix/sysv/linux/i386/syscall.S14
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h8
-rw-r--r--sysdeps/unix/sysv/linux/i386/xmknod.S7
-rw-r--r--sysdeps/unix/sysv/linux/i386/xstat.S9
-rw-r--r--sysdeps/unix/sysv/linux/sigaction.S24
-rw-r--r--sysdeps/unix/sysv/linux/sigaction.h54
-rw-r--r--sysdeps/unix/sysv/linux/signal.S8
-rw-r--r--sysdeps/unix/sysv/linux/syscall.h28
14 files changed, 83 insertions, 90 deletions
diff --git a/sysdeps/generic/_strerror.c b/sysdeps/generic/_strerror.c
index 71fabe7695..72ebb216bf 100644
--- a/sysdeps/generic/_strerror.c
+++ b/sysdeps/generic/_strerror.c
@@ -31,9 +31,6 @@ _strerror_internal (errnum, buf, buflen)
      char *buf;
      size_t buflen;
 {
-  extern const char *const _sys_errlist[];
-  extern const int _sys_nerr;
-
   if (errnum < 0 || errnum > _sys_nerr)
     {
       int len = __snprintf (buf, buflen, _("Unknown error %d"), errnum);
diff --git a/sysdeps/unix/configure.in b/sysdeps/unix/configure.in
index 37b6dcad86..6841a4f869 100644
--- a/sysdeps/unix/configure.in
+++ b/sysdeps/unix/configure.in
@@ -70,8 +70,8 @@ for unix_function in \
   dup2 lstat mkdir rmdir readlink symlink rename swapon \
   access select getgroups setgroups \
   getitimer setitimer \
-  getdomainname/getdomain=bsd/bsd4.4 \
-  setdomainname/setdomain=bsd/bsd4.4 \
+  getdomainname:getdomain=bsd/bsd4.4 \
+  setdomainname:setdomain=bsd/bsd4.4 \
   fchdir=bsd/bsd4.4 \
   profil=bsd readv=bsd writev=bsd \
   getpriority setpriority \
@@ -85,7 +85,7 @@ do
   unix_srcdir=common
   eval "unix_syscall=`echo $unix_function | \
 		      sed -e 's@=\(.*\)$@ unix_srcdir=\1@' \
-			  -e 's@/\([^=/]*\)$@ unix_srcname=\1@'`"
+			  -e 's@:\(.*\)@ unix_srcname=\1@'`"
   test -z "$unix_srcname" && unix_srcname=$unix_syscall
 
   unix_implementor=none
diff --git a/sysdeps/unix/sysv/linux/i386/brk.S b/sysdeps/unix/sysv/linux/i386/brk.S
index ef2f55db97..2a9a2bcd24 100644
--- a/sysdeps/unix/sysv/linux/i386/brk.S
+++ b/sysdeps/unix/sysv/linux/i386/brk.S
@@ -32,8 +32,8 @@ C_LABEL(__curbrk)
 #endif
 
 .text
-.globl C_SYMBOL_NAME(syscall_error)
 
+	SYSCALL_ERROR_HANDLER
 ENTRY (__brk)
 	movl %ebx, %edx
 	movl $SYS_ify(brk), %eax
diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
index 96ea870846..1d1d628ad5 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap.S
@@ -18,7 +18,8 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER
 
 ENTRY (__mmap)
 
diff --git a/sysdeps/unix/sysv/linux/i386/sbrk.S b/sysdeps/unix/sysv/linux/i386/sbrk.S
index 7a0e940cfe..e38e88f64d 100644
--- a/sysdeps/unix/sysv/linux/i386/sbrk.S
+++ b/sysdeps/unix/sysv/linux/i386/sbrk.S
@@ -22,7 +22,7 @@ Cambridge, MA 02139, USA.  */
 .globl C_SYMBOL_NAME(__curbrk)
 
 .text
-.globl C_SYMBOL_NAME(syscall_error)
+	SYSCALL_ERROR_HANDLER
 
 ENTRY (__sbrk)
 
@@ -53,7 +53,7 @@ ENTRY (__sbrk)
 	movl C_SYMBOL_NAME(__curbrk), %ebx
 	movl %ebx, %eax
 #endif
-	
+
 	addl 4(%esp), %ebx
 	cmpl %ebx, %eax
 	je .L2
diff --git a/sysdeps/unix/sysv/linux/i386/socket.S b/sysdeps/unix/sysv/linux/i386/socket.S
index 3d3a67213b..b2e6b2603f 100644
--- a/sysdeps/unix/sysv/linux/i386/socket.S
+++ b/sysdeps/unix/sysv/linux/i386/socket.S
@@ -22,7 +22,8 @@ Cambridge, MA 02139, USA.  */
 #define P(a, b) P2(a, b)
 #define P2(a, b) a##b
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER
 
 /* The socket-oriented system calls are handled unusally in Linux.
    They are all gated through the single `socketcall' system call number.
diff --git a/sysdeps/unix/sysv/linux/i386/syscall.S b/sysdeps/unix/sysv/linux/i386/syscall.S
index 6e6aa5d3c8..52eb48a9ae 100644
--- a/sysdeps/unix/sysv/linux/i386/syscall.S
+++ b/sysdeps/unix/sysv/linux/i386/syscall.S
@@ -18,14 +18,14 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Define error handler for PIC.  */
 ENTRY (syscall)
-	popl %ecx		/* Pop return address into %ecx.  */
-	popl %eax		/* Pop syscall number into %eax.  */
-	pushl %ecx		/* Push back return address.  */
-	DO_CALL (5)		/* Frob the args and do the system call.  */
-	movl (%esp), %ecx
-	pushl %ecx
+	PUSHARGS_5		/* Save register contents.  */
+	_DOARGS_5(36)		/* Load arguments.  */
+	movl 16(%esp), %eax	/* Load syscall number into %eax.  */
+	int $0x80		/* Do the system call.  */
+	POPARGS_5		/* Restore register contents.  */
 	testl %eax, %eax	/* Check %eax for error.  */
 	jl JUMPTARGET(syscall_error) /* Jump to error handler if negative.  */
 	ret			/* Return to caller.  */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 7bd910e534..f6da272c75 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -44,8 +44,7 @@ Cambridge, MA 02139, USA.  */
   .text;								      \
   SYSCALL_ERROR_HANDLER							      \
   ENTRY (name)								      \
-    movl $SYS_ify (syscall_name), %eax;					      \
-    DO_CALL (args);							      \
+    DO_CALL (args, syscall_name);					      \
     testl %eax, %eax;							      \
     jl syscall_error;
 
@@ -62,7 +61,7 @@ syscall_error:								      \
   movl errno@GOT(%ecx), %ecx;						      \
   movl %eax, (%ecx);							      \
   movl $-1, %eax;							      \
-  ret
+  ret;
 #endif
 
 /* We define our own ENTRY macro because the alignment should be 16 for
@@ -119,9 +118,10 @@ syscall_error:								      \
    i386 and i486 processors though.  */
 
 #undef	DO_CALL
-#define DO_CALL(args)					      		      \
+#define DO_CALL(args, syscall_name)			      		      \
     PUSHARGS_##args							      \
     DOARGS_##args							      \
+    movl $SYS_ify (syscall_name), %eax;					      \
     int $0x80								      \
     POPARGS_##args
 
diff --git a/sysdeps/unix/sysv/linux/i386/xmknod.S b/sysdeps/unix/sysv/linux/i386/xmknod.S
index fde3165d01..10778bdceb 100644
--- a/sysdeps/unix/sysv/linux/i386/xmknod.S
+++ b/sysdeps/unix/sysv/linux/i386/xmknod.S
@@ -19,21 +19,20 @@ Cambridge, MA 02139, USA.  */
 #include <sysdep.h>
 #include <errnos.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Error handler for PIC.  */
 ENTRY (__xmknod)
 	popl %ecx		/* Pop return address into %eax.  */
 	popl %edx		/* Pop version number into %edx.  */
 	pushl %ecx		/* Push back the return address.  */
 
-	movl $SYS_ify(mknod), %eax
-			/* Load syscall number for prev_stat in %eax.  */
 	cmpl $1, %edx		/* Version 1 xstat call?  */
 	je .L1			/* Yes, do syscall.  */
 
 	movl $-EINVAL, %eax	/* Load error code into %eax.  */
 	jmp .L2
 
-.L1:	DO_CALL (3)		/* Do the syscall.   */
+.L1:	DO_CALL (3, mknod)	/* Do the syscall.   */
 
 	movl (%esp), %ecx
 	testl %eax, %eax	/* Check for error.  */
diff --git a/sysdeps/unix/sysv/linux/i386/xstat.S b/sysdeps/unix/sysv/linux/i386/xstat.S
index 34822beda6..58c5f558c4 100644
--- a/sysdeps/unix/sysv/linux/i386/xstat.S
+++ b/sysdeps/unix/sysv/linux/i386/xstat.S
@@ -19,23 +19,20 @@ Cambridge, MA 02139, USA.  */
 #include <sysdep.h>
 #include <errnos.h>
 
-#define SYS_expand(name) SYS_ify(name)
-
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Error handler for PIC.  */
 ENTRY (__xstat)
 	popl %ecx		/* Pop return address into %eax.  */
 	popl %edx		/* Pop version number into %edx.  */
 	pushl %ecx		/* Push back the return address.  */
 
-	movl $SYS_expand(stat), %eax
-			/* Load syscall number for prev_stat in %eax.  */
 	cmpl $1, %edx		/* Version 1 xstat call?  */
 	je .L1			/* Yes, do syscall.  */
 
 	movl $-EINVAL, %eax	/* Load error code into %eax.  */
 	jmp .L2
 
-.L1:	DO_CALL (2)		/* Do the syscall.   */
+.L1:	DO_CALL (2, stat)	/* Do the syscall.   */
 
 	movl (%esp), %ecx
 	testl %eax, %eax	/* Check for error.  */
diff --git a/sysdeps/unix/sysv/linux/sigaction.S b/sysdeps/unix/sysv/linux/sigaction.S
deleted file mode 100644
index 0618d6ea95..0000000000
--- a/sysdeps/unix/sysv/linux/sigaction.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <sysdep.h>
-
-SYSCALL__ (sigaction, 3)
-	ret
-
-weak_alias (__sigaction, sigaction)
diff --git a/sysdeps/unix/sysv/linux/sigaction.h b/sysdeps/unix/sysv/linux/sigaction.h
new file mode 100644
index 0000000000..d8930782d7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sigaction.h
@@ -0,0 +1,54 @@
+/* The proper definitions for Linux's sigaction.
+Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Structure describing the action to be taken when a signal arrives.  */
+struct sigaction
+  {
+    /* Signal handler.  */
+    __sighandler_t sa_handler;
+
+    /* Additional set of signals to be blocked.  */
+    __sigset_t sa_mask;
+
+    /* Special flags.  */
+    unsigned long sa_flags;
+
+    /* Restore handler.  */
+    void (*sa_restorer) __P ((void));
+  };
+
+/* Bits in `sa_flags'.  */
+#define	SA_NOCLDSTOP 1		/* Don't send SIGCHLD when children stop.  */
+#ifdef __USE_MISC
+#define SA_STACK     0x08000000	/* Use signal stack by using `sa_restorer'.  */
+#define SA_RESTART   0x10000000	/* Don't restart syscall on signal return.  */
+#define SA_INTERRUPT 0x20000000	/* Historical no-op.  */
+#define SA_NODEFER   0x40000000	/* Don't automatically block the signal when
+				   its handler is being executed.  */
+#define SA_RESETHAND 0x80000000	/* Reset to SIG_DFL on entry to handler.  */
+
+/* Some aliases for the SA_ constants.  */
+#define SA_NOMASK	SA_NODEFER
+#define SA_ONESHOT	SA_RESETHAND
+#endif
+
+/* Values for the HOW argument to `sigprocmask'.  */
+#define	SIG_BLOCK	0	/* Block signals.  */
+#define	SIG_UNBLOCK	1	/* Unblock signals.  */
+#define	SIG_SETMASK	2	/* Set the set of blocked signals.  */
diff --git a/sysdeps/unix/sysv/linux/signal.S b/sysdeps/unix/sysv/linux/signal.S
deleted file mode 100644
index 68582a68f7..0000000000
--- a/sysdeps/unix/sysv/linux/signal.S
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <sysdeps/unix/sysv/signal.S>
-
-/* Used in siginterrupt() */
-
-	.data
-	.globl _sigintr
-_sigintr:
-	.long 0
diff --git a/sysdeps/unix/sysv/linux/syscall.h b/sysdeps/unix/sysv/linux/syscall.h
index fe6cfcf84c..efe285c1fe 100644
--- a/sysdeps/unix/sysv/linux/syscall.h
+++ b/sysdeps/unix/sysv/linux/syscall.h
@@ -25,34 +25,10 @@ Cambridge, MA 02139, USA.  */
 #include <asm/unistd.h>
 
 /* Among the system calls defined there are
-	_dup2	
-	_mkdir	
-	_rmdir	
-	_readlink	
-	_symlink	
-	_rename		
-	_swapon		
-	_access		
-	_select		
-	_getgroups	
-	_setgroups	
-	_getitimer	
-	_setitimer	
 	_setdomainname	
-	_getrlimit	
-	_setrlimit	
-	_getrusage	
-	_getpriority	
-	_setpriority	
-	_truncate	
-	_ftruncate	
-	_setpgid	
-	_fchmod	
 	_fchdir	
-	_fchown	
-	_setregid	
-	_setreuid	
-	_vhangup	
+	_readv	
+	_writev	
    (This is a hack for the autoconf mechanism.  Don't change a single
     character, esp white spaces, unless you know what you are doing!)  */