summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-11-02 10:07:25 +0000
committerUlrich Drepper <drepper@redhat.com>1998-11-02 10:07:25 +0000
commit160698e277bb4bc9a402c0f044289fd04f958089 (patch)
tree0e57b03f25bc859b8a95519884e79855cf530243 /sysdeps/unix
parentc55be36de736a025d54fb8c8fffab0191dc452de (diff)
downloadglibc-160698e277bb4bc9a402c0f044289fd04f958089.tar.gz
glibc-160698e277bb4bc9a402c0f044289fd04f958089.tar.xz
glibc-160698e277bb4bc9a402c0f044289fd04f958089.zip
Update.
1998-11-02  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/setgroups.c (setgroups): Remove
	unnecessary test and add cast.

1998-11-02  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* posix/getconf.c: Add initializer SYSCONF for CHARCLASS_NAME_MAX.

	* sysdeps/unix/sysv/linux/ttyname.c (getttyname): Remove unused
	parameter fd.
	* sysdeps/unix/sysv/linux/ttyname_r.c (__ttyname_r): Likewise.

1998-11-02  Mark Kettenis  <kettenis@phys.uva.nl>

	* sysdeps/generic/bits/types.h (__FDS_BITS): New macro to access
	fds_bits member.
	(__FDMASK): Use __fd_mask instead of unsigned long int in cast.

1998-10-31  Richard Henderson  <rth@cygnus.com>

	* math/Makefile (gmp-objs): Add udiv_qrnnd.

	* sysdeps/unix/alpha/sysdep.h (INLINE_SYSCALL*): New.
	(inline_syscall*): New.
	* sysdeps/unix/sysv/linux/alpha/sysdep.h (INLINE_SYSCALL): New.
	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Kill __syscall* bits.

1998-10-30  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* sunrpc/Versions: Add xdr_uint32_t and xdr_int32_t.
	* sunrpc/pmap_rmt.c: Initialize clnt_stat variable.
	* sunrpc/rpc/auth_des.h: Use uint32_t for time values.
	* sunrpc/rpc/xdr.h: Add INT32 support.

	* nis/nis_call.c: Changes for new 64bit clean NIS+ interface.
	* nis/nis_callback.c: Likewise.
	* nis/nis_creategroup.c: Likewise.
	* nis/nis_defaults.c: Likewise.
	* nis/nis_intern.h: Likewise.
	* nis/nis_lookup.c: Likewise.
	* nis/nis_ping.c: Likewise.
	* nis/nis_print.c: Likewise.
	* nis/nis_table.c: Likewise.
	* nis/nis_util.c: Likewise.
	* nis/nis_xdr.c: Likewise.
	* nis/rpcsvc/nis.h: Likewise.
	* nis/rpcsvc/nis.x: Likewise.
	* nis/rpcsvc/nis_callback.h: Likewise.
	* nis/rpcsvc/nis_object.x: Likewise.
	* nis/rpcsvc/nislib.h: Likewise.

	* nis/rpcsvc/yp.h: Remove casts to (u_long).
	* nis/rpcsvc/yp_prot.h: Likewise.
	* nis/rpcsvc/ypupd.h: Likewise.
	* nis/ypclnt.c: Change %ld to %d in sprintf.

1998-10-29  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* manual/locale.texi (Formatting Numbers): Fix strfmon examples.

1998-10-28  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* sysdeps/generic/bits/select.h (__FD_ZERO): Change '\0' to plain
	0, __fd_mask is usually not a char.

1998-10-30  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/unix/sysv/linux/sigpending.c (sigpending): Allow
	compilation on systems without rt_* syscalls (e.g. on Linux 2.0).
	* sysdeps/unix/sysv/linux/sigprocmask.c (__sigprocmask): Likewise.
	* sysdeps/unix/sysv/linux/sigwaitinfo.c: Likewise.
	* sysdeps/unix/sysv/linux/sigtimedwait.c: Likewise.
	* sysdeps/unix/sysv/linux/sigsuspend.c (__sigsuspend): Likewise
	* sysdeps/unix/sysv/linux/sigqueue.c: Likewise.
	* sysdeps/unix/sysv/linux/aio_sigqueue.c: Likewise.

	* sysdeps/unix/sysv/linux/i386/sigaction.c (__sigaction): Allow
	compiling on systems without rt_sigaction syscall.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c (__sigaction):
	Likewise.

1998-10-30  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* time/strptime.c (HERE_D_FMT): Fix typo.
	Reported by Claus Heine <heine@math1.rwth-aachen.de>, PR libc/842.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/alpha/sysdep.h165
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list27
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep.h12
-rw-r--r--sysdeps/unix/sysv/linux/i386/setgroups.c2
-rw-r--r--sysdeps/unix/sysv/linux/ttyname.c17
-rw-r--r--sysdeps/unix/sysv/linux/ttyname_r.c17
6 files changed, 193 insertions, 47 deletions
diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h
index f43c7f8edf..80cb3e2486 100644
--- a/sysdeps/unix/alpha/sysdep.h
+++ b/sysdeps/unix/alpha/sysdep.h
@@ -109,4 +109,167 @@ __LABEL(name)					\
 
 #define MOVE(x,y)	mov x,y
 
-#endif
+#else /* !ASSEMBLER */
+
+/* Define a macro which expands inline into the wrapper code for a
+   system call.  */
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...)  INLINE_SYSCALL1(name, nr, args)
+
+#define INLINE_SYSCALL1(name, nr, args...)	\
+({						\
+	long _sc_ret, _sc_err;			\
+	inline_syscall##nr(name, args);		\
+	if (_sc_err)				\
+	  {					\
+	    __set_errno (_sc_ret);		\
+	    _sc_ret = -1L;			\
+	  }					\
+	_sc_ret;				\
+})
+
+#define inline_syscall_clobbers				\
+	"$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8",	\
+	"$22", "$23", "$24", "$25", "$27", "$28"
+
+/* It is moderately important optimization-wise to limit the lifetime
+   of the hard-register variables as much as possible.  Thus we copy
+   in/out as close to the asm as possible.  */
+
+#define inline_syscall0(name)			\
+{						\
+	register long _sc_0 __asm__("$0");	\
+	register long _sc_19 __asm__("$19");	\
+						\
+	_sc_0 = __NR_##name;			\
+	__asm__("callsys # %0 %1 <= %2"		\
+		: "=r"(_sc_0), "=r"(_sc_19)	\
+		: "0"(_sc_0)			\
+		: inline_syscall_clobbers);	\
+	_sc_ret = _sc_0, _sc_err = _sc_19;	\
+}
+
+#define inline_syscall1(name,arg1)		\
+{						\
+	register long _sc_0 __asm__("$0");	\
+	register long _sc_16 __asm__("$16");	\
+	register long _sc_19 __asm__("$19");	\
+						\
+	_sc_0 = __NR_##name;			\
+	_sc_16 = (long) (arg1);			\
+	__asm__("callsys # %0 %1 <= %2 %3"	\
+		: "=r"(_sc_0), "=r"(_sc_19)	\
+		: "0"(_sc_0), "r"(_sc_16)	\
+		: inline_syscall_clobbers);	\
+	_sc_ret = _sc_0, _sc_err = _sc_19;	\
+}
+
+#define inline_syscall2(name,arg1,arg2)			\
+{							\
+	register long _sc_0 __asm__("$0");		\
+	register long _sc_16 __asm__("$16");		\
+	register long _sc_17 __asm__("$17");		\
+	register long _sc_19 __asm__("$19");		\
+							\
+	_sc_0 = __NR_##name;				\
+	_sc_16 = (long) (arg1);				\
+	_sc_17 = (long) (arg2);				\
+	__asm__("callsys # %0 %1 <= %2 %3 %4"		\
+		: "=r"(_sc_0), "=r"(_sc_19)		\
+		: "0"(_sc_0), "r"(_sc_16), "r"(_sc_17)	\
+		: inline_syscall_clobbers);		\
+	_sc_ret = _sc_0, _sc_err = _sc_19;		\
+}
+
+#define inline_syscall3(name,arg1,arg2,arg3)		\
+{							\
+	register long _sc_0 __asm__("$0");		\
+	register long _sc_16 __asm__("$16");		\
+	register long _sc_17 __asm__("$17");		\
+	register long _sc_18 __asm__("$18");		\
+	register long _sc_19 __asm__("$19");		\
+							\
+	_sc_0 = __NR_##name;				\
+	_sc_16 = (long) (arg1);				\
+	_sc_17 = (long) (arg2);				\
+	_sc_18 = (long) (arg3);				\
+	__asm__("callsys # %0 %1 <= %2 %3 %4 %5"	\
+		: "=r"(_sc_0), "=r"(_sc_19)		\
+		: "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),	\
+		  "r"(_sc_18)				\
+		: inline_syscall_clobbers);		\
+	_sc_ret = _sc_0, _sc_err = _sc_19;		\
+}
+
+#define inline_syscall4(name,arg1,arg2,arg3,arg4)	\
+{							\
+	register long _sc_0 __asm__("$0");		\
+	register long _sc_16 __asm__("$16");		\
+	register long _sc_17 __asm__("$17");		\
+	register long _sc_18 __asm__("$18");		\
+	register long _sc_19 __asm__("$19");		\
+							\
+	_sc_0 = __NR_##name;				\
+	_sc_16 = (long) (arg1);				\
+	_sc_17 = (long) (arg2);				\
+	_sc_18 = (long) (arg3);				\
+	_sc_19 = (long) (arg4);				\
+	__asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6"	\
+		: "=r"(_sc_0), "=r"(_sc_19)		\
+		: "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),	\
+		  "r"(_sc_18), "1"(_sc_19)		\
+		: inline_syscall_clobbers);		\
+	_sc_ret = _sc_0, _sc_err = _sc_19;		\
+}
+
+#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5)	\
+{							\
+	register long _sc_0 __asm__("$0");		\
+	register long _sc_16 __asm__("$16");		\
+	register long _sc_17 __asm__("$17");		\
+	register long _sc_18 __asm__("$18");		\
+	register long _sc_19 __asm__("$19");		\
+	register long _sc_20 __asm__("$20");		\
+							\
+	_sc_0 = __NR_##name;				\
+	_sc_16 = (long) (arg1);				\
+	_sc_17 = (long) (arg2);				\
+	_sc_18 = (long) (arg3);				\
+	_sc_19 = (long) (arg4);				\
+	_sc_20 = (long) (arg5);				\
+	__asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7"	\
+		: "=r"(_sc_0), "=r"(_sc_19)		\
+		: "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),	\
+		  "r"(_sc_18), "1"(_sc_19), "r"(_sc_20)	\
+		: inline_syscall_clobbers);		\
+	_sc_ret = _sc_0, _sc_err = _sc_19;		\
+}
+
+#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
+{								\
+	register long _sc_0 __asm__("$0");			\
+	register long _sc_16 __asm__("$16");			\
+	register long _sc_17 __asm__("$17");			\
+	register long _sc_18 __asm__("$18");			\
+	register long _sc_19 __asm__("$19");			\
+	register long _sc_20 __asm__("$20");			\
+	register long _sc_21 __asm__("$21");			\
+								\
+	_sc_0 = __NR_##name;					\
+	_sc_16 = (long) (arg1);					\
+	_sc_17 = (long) (arg2);					\
+	_sc_18 = (long) (arg3);					\
+	_sc_19 = (long) (arg4);					\
+	_sc_20 = (long) (arg5);					\
+	_sc_21 = (long) (arg6);					\
+	__asm__("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8"	\
+		: "=r"(_sc_0), "=r"(_sc_19)			\
+		: "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),		\
+		  "r"(_sc_18), "1"(_sc_19), "r"(_sc_20),	\
+		  "r"(_sc_21)					\
+		: inline_syscall_clobbers);			\
+	_sc_ret = _sc_0, _sc_err = _sc_19;			\
+}
+
+#endif /* ASSEMBLER */
diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list
index b48f538211..9f002b2ad1 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscalls.list
+++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list
@@ -79,30 +79,3 @@ old_adjtimex	-	old_adjtimex	1	__adjtimex_tv32  __adjtimex@GLIBC_2.0 adjtimex@GLI
 
 # and one for timeval64 entry points
 adjtimex	adjtime	adjtimex	1	__syscall_adjtimex_tv64
-
-# System calls with wrappers.
-rt_sigaction	-	rt_sigaction	4	__syscall_rt_sigaction
-rt_sigpending	-	rt_sigpending	2	__syscall_rt_sigpending
-rt_sigprocmask	-	rt_sigprocmask	4	__syscall_rt_sigprocmask
-rt_sigqueueinfo	-	rt_sigqueueinfo	3	__syscall_rt_sigqueueinfo
-rt_sigsuspend	-	rt_sigsuspend	2	__syscall_rt_sigsuspend
-rt_sigtimedwait	-	rt_sigtimedwait	4	__syscall_rt_sigtimedwait
-s_getcwd	getcwd	getcwd		2	__syscall_getcwd
-s_getdents	getdents getdents	3	__syscall_getdents
-s_getpriority	getpriority getpriority	2	__syscall_getpriority
-s_getresgid	getresgid getresgid	3	__syscall_getresgid
-s_getresuid	getresuid getresuid	3	__syscall_getresuid
-s_poll		poll	poll		3	__syscall_poll
-s_ptrace	ptrace	ptrace		4	__syscall_ptrace
-s_reboot	reboot	reboot		3	__syscall_reboot
-s_sigaction	sigaction sigaction	3	__syscall_sigaction
-s_sigpending	sigpending sigpending	1	__syscall_sigpending
-s_sigprocmask	sigprocmask sigprocmask	3	__syscall_sigprocmask
-s_sigsuspend	sigsuspend sigsuspend	3	__syscall_sigsuspend
-s_sysctl	sysctl	_sysctl		1	__syscall__sysctl
-sys_fstat	fxstat	fstat		2	__syscall_fstat
-sys_lstat	lxstat	lstat		2	__syscall_lstat
-sys_mknod	xmknod	mknod		3	__syscall_mknod
-sys_readv	readv	readv		3	__syscall_readv
-sys_stat	xstat	stat		2	__syscall_stat
-sys_writev	writev	writev		3	__syscall_writev
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h
index 29d973f5b9..1a3cf37c6d 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h
@@ -55,3 +55,15 @@
 #define __NR_osf_shmat		209
 #define __NR_osf_getsysinfo	256
 #define __NR_osf_setsysinfo	257
+
+/*
+ * In order to get the hidden arguments for rt_sigaction set up
+ * properly, we need to call the assembly version.  Detect this in the
+ * INLINE_SYSCALL macro, and fail to expand inline in that case.
+ */
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...)	\
+	(__NR_##name == __NR_rt_sigaction	\
+	 ? __syscall_##name(args)		\
+	 : INLINE_SYSCALL1(name, nr, args))
diff --git a/sysdeps/unix/sysv/linux/i386/setgroups.c b/sysdeps/unix/sysv/linux/i386/setgroups.c
index 4266145d01..e57004f8ac 100644
--- a/sysdeps/unix/sysv/linux/i386/setgroups.c
+++ b/sysdeps/unix/sysv/linux/i386/setgroups.c
@@ -36,7 +36,7 @@ setgroups (n, groups)
      size_t n;
      const gid_t *groups;
 {
-  if (n < 0 || n > __sysconf (_SC_NGROUPS_MAX))
+  if (n > (size_t) __sysconf (_SC_NGROUPS_MAX))
     {
       __set_errno (EINVAL);
       return -1;
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index 35eb4b4696..6ea406a8b8 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -30,15 +30,14 @@
 
 char *__ttyname = NULL;
 
-static char * getttyname __P ((const char *dev, int fd, dev_t mydev,
+static char * getttyname __P ((const char *dev, dev_t mydev,
 			       ino_t myino, int save, int *dostat))
      internal_function;
 
 static char *
 internal_function
-getttyname (dev, fd, mydev, myino, save, dostat)
+getttyname (dev, mydev, myino, save, dostat)
      const char *dev;
-     int fd;
      dev_t mydev;
      ino_t myino;
      int save;
@@ -142,9 +141,9 @@ ttyname (fd)
   if (stat ("/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
     {
 #ifdef _STATBUF_ST_RDEV
-      name = getttyname ("/dev/pts", fd, st.st_rdev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev/pts", st.st_rdev, st.st_ino, save, &dostat);
 #else
-      name = getttyname ("/dev/pts", fd, st.st_dev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev/pts", st.st_dev, st.st_ino, save, &dostat);
 #endif
     }
   else
@@ -156,9 +155,9 @@ ttyname (fd)
   if (!name && dostat != -1)
     {
 #ifdef _STATBUF_ST_RDEV
-      name = getttyname ("/dev", fd, st.st_rdev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat);
 #else
-      name = getttyname ("/dev", fd, st.st_dev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat);
 #endif
     }
 
@@ -166,9 +165,9 @@ ttyname (fd)
     {
       dostat = 1;
 #ifdef _STATBUF_ST_RDEV
-      name = getttyname ("/dev", fd, st.st_rdev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat);
 #else
-      name = getttyname ("/dev", fd, st.st_dev, st.st_ino, save, &dostat);
+      name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat);
 #endif
     }
 
diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c
index 449942a96d..fe68e10b4d 100644
--- a/sysdeps/unix/sysv/linux/ttyname_r.c
+++ b/sysdeps/unix/sysv/linux/ttyname_r.c
@@ -28,14 +28,13 @@
 
 #include <stdio-common/_itoa.h>
 
-static int getttyname_r __P ((int fd, char *buf, size_t buflen,
+static int getttyname_r __P ((char *buf, size_t buflen,
 			      dev_t mydev, ino_t myino, int save,
 			      int *dostat)) internal_function;
 
 static int
 internal_function
-getttyname_r (fd, buf, buflen, mydev, myino, save, dostat)
-     int fd;
+getttyname_r (buf, buflen, mydev, myino, save, dostat)
      char *buf;
      size_t buflen;
      dev_t mydev;
@@ -152,10 +151,10 @@ __ttyname_r (fd, buf, buflen)
   if (stat (buf, &st1) == 0 && S_ISDIR (st1.st_mode))
     {
 #ifdef _STATBUF_ST_RDEV
-      ret = getttyname_r (fd, buf, buflen, st.st_rdev, st.st_ino, save,
+      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save,
 			  &dostat);
 #else
-      ret = getttyname_r (fd, buf, buflen, st.st_dev, st.st_ino, save,
+      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save,
 			  &dostat);
 #endif
     }
@@ -170,10 +169,10 @@ __ttyname_r (fd, buf, buflen)
       buf[sizeof ("/dev/") - 1] = '\0';
       buflen += sizeof ("pts/") - 1;
 #ifdef _STATBUF_ST_RDEV
-      ret = getttyname_r (fd, buf, buflen, st.st_rdev, st.st_ino, save,
+      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save,
 			  &dostat);
 #else
-      ret = getttyname_r (fd, buf, buflen, st.st_dev, st.st_ino, save,
+      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save,
 			  &dostat);
 #endif
     }
@@ -183,10 +182,10 @@ __ttyname_r (fd, buf, buflen)
       buf[sizeof ("/dev/") - 1] = '\0';
       dostat = 1;
 #ifdef _STATBUF_ST_RDEV
-      ret = getttyname_r (fd, buf, buflen, st.st_rdev, st.st_ino,
+      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino,
 			  save, &dostat);
 #else
-      ret = getttyname_r (fd, buf, buflen, st.st_dev, st.st_ino,
+      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino,
 			  save, &dostat);
 #endif
     }