summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-10-26 03:59:27 +0000
committerRoland McGrath <roland@gnu.org>1995-10-26 03:59:27 +0000
commitc14e4c326d6b916112d03994105ddd3389515954 (patch)
treea6eacdb0d006783dd21626b55c4b37d98905329a
parentf44f9c33dff32b1f9f257ec855bbb7261c028039 (diff)
* hurd/hurdstartup.c (_hurd_startup): Use new
exec_startup_get_info RPC from exec_startup.defs in place of old exec_startup from exec.defs. Remove kludge to guess user entry and phdr locations, since the new RPC gives us that info. * sysdeps/generic/_strerror.c: Undo last change.
-rw-r--r--ChangeLog7
-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
15 files changed, 90 insertions, 90 deletions
diff --git a/ChangeLog b/ChangeLog
index ec313297eb..9ca3239516 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,13 @@
Wed Oct 25 14:23:35 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+ * hurd/hurdstartup.c (_hurd_startup): Use new
+ exec_startup_get_info RPC from exec_startup.defs
+ in place of old exec_startup from exec.defs. Remove kludge to
+ guess user entry and phdr locations, since the new RPC gives us
+ that info.
+
* stdio/stdio.h (sys_errlist, _sys_errlist): Declare const.
+ * sysdeps/generic/_strerror.c: Undo last change.
* sysdeps/unix/sysv/linux/stat.c: New file.
* sysdeps/unix/sysv/linux/fstat.c: New file.
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!) */