about summary refs log tree commit diff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/siginfo.h3
-rw-r--r--sysdeps/unix/sysv/linux/sigprocmask.c14
-rw-r--r--sysdeps/unix/sysv/linux/sigtimedwait.c12
-rw-r--r--sysdeps/unix/sysv/linux/sigwait.c12
-rw-r--r--sysdeps/unix/sysv/linux/sigwaitinfo.c12
-rw-r--r--sysdeps/unix/sysv/linux/waitid.c5
6 files changed, 46 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
index c3abe80de6..52d00e9da9 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
@@ -93,7 +93,7 @@ typedef struct siginfo
 	  {
 	    void *si_addr;	/* Faulting insn/memory ref.  */
 	    int _si_imm;
-	    int _si_pad0;
+	    unsigned int _si_flags;
 	    unsigned long int _si_isr;
 	  } _sigfault;
 
@@ -124,6 +124,7 @@ typedef struct siginfo
 
 #ifdef __USE_GNU
 #  define si_imm	_sifields._sigfault._si_imm
+#  define si_flags	_sifields._sigfault._si_flags
 #  define si_isr	_sifields._sigfault._si_isr
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/sigprocmask.c b/sysdeps/unix/sysv/linux/sigprocmask.c
index e1b57566a5..1573780d8e 100644
--- a/sysdeps/unix/sysv/linux/sigprocmask.c
+++ b/sysdeps/unix/sysv/linux/sigprocmask.c
@@ -43,12 +43,20 @@ __sigprocmask (how, set, oset)
 #ifdef SIGCANCEL
   sigset_t local_newmask;
 
-  /* The only thing we have to make sure here is that SIGCANCEL is not
-     blocked.  */
-  if (set != NULL && __builtin_expect (__sigismember (set, SIGCANCEL), 0))
+  /* The only thing we have to make sure here is that SIGCANCEL and
+     SIGSETXID are not blocked.  */
+  if (set != NULL
+      && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+	  || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+	  ))
     {
       local_newmask = *set;
       __sigdelset (&local_newmask, SIGCANCEL);
+# ifdef SIGSETXID
+      __sigdelset (&local_newmask, SIGSETXID);
+# endif
       set = &local_newmask;
     }
 #endif
diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c
index 1705cb10bd..adeadc1587 100644
--- a/sysdeps/unix/sysv/linux/sigtimedwait.c
+++ b/sysdeps/unix/sysv/linux/sigtimedwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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
@@ -32,12 +32,20 @@ do_sigtimedwait (const sigset_t *set, siginfo_t *info,
 {
 #ifdef SIGCANCEL
   sigset_t tmpset;
-  if (set != NULL && __sigismember (set, SIGCANCEL))
+  if (set != NULL
+      && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+	  || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+	  ))
     {
       /* Create a temporary mask without the bit for SIGCANCEL set.  */
       // We are not copying more than we have to.
       memcpy (&tmpset, set, _NSIG / 8);
       __sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+      __sigdelset (&tmpset, SIGSETXID);
+# endif
       set = &tmpset;
     }
 #endif
diff --git a/sysdeps/unix/sysv/linux/sigwait.c b/sysdeps/unix/sysv/linux/sigwait.c
index f755928493..7c865963cd 100644
--- a/sysdeps/unix/sysv/linux/sigwait.c
+++ b/sysdeps/unix/sysv/linux/sigwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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
@@ -36,12 +36,20 @@ do_sigwait (const sigset_t *set, int *sig)
 
 #ifdef SIGCANCEL
   sigset_t tmpset;
-  if (set != NULL && __sigismember (set, SIGCANCEL))
+  if (set != NULL
+      && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+	  || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+	  ))
     {
       /* Create a temporary mask without the bit for SIGCANCEL set.  */
       // We are not copying more than we have to.
       memcpy (&tmpset, set, _NSIG / 8);
       __sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+      __sigdelset (&tmpset, SIGSETXID);
+# endif
       set = &tmpset;
     }
 #endif
diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c
index a2dec820fc..a51a01f20b 100644
--- a/sysdeps/unix/sysv/linux/sigwaitinfo.c
+++ b/sysdeps/unix/sysv/linux/sigwaitinfo.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000,2002,2003,2004 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
@@ -33,12 +33,20 @@ do_sigwaitinfo (const sigset_t *set, siginfo_t *info)
 {
 #ifdef SIGCANCEL
   sigset_t tmpset;
-  if (set != NULL && __sigismember (set, SIGCANCEL))
+  if (set != NULL
+      && (__builtin_expect (__sigismember (set, SIGCANCEL), 0)
+# ifdef SIGSETXID
+	  || __builtin_expect (__sigismember (set, SIGSETXID), 0)
+# endif
+	  ))
     {
       /* Create a temporary mask without the bit for SIGCANCEL set.  */
       // We are not copying more than we have to.
       memcpy (&tmpset, set, _NSIG / 8);
       __sigdelset (&tmpset, SIGCANCEL);
+# ifdef SIGSETXID
+      __sigdelset (&tmpset, SIGSETXID);
+# endif
       set = &tmpset;
     }
 #endif
diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c
index 21226df37e..207c3d3453 100644
--- a/sysdeps/unix/sysv/linux/waitid.c
+++ b/sysdeps/unix/sysv/linux/waitid.c
@@ -47,10 +47,11 @@ do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
 {
   static int waitid_works;
   if (waitid_works > 0)
-    return INLINE_SYSCALL (waitid, 4, idtype, id, infop, options);
+    return INLINE_SYSCALL (waitid, 5, idtype, id, infop, options, NULL);
   if (waitid_works == 0)
     {
-      int result = INLINE_SYSCALL (waitid, 4, idtype, id, infop, options);
+      int result = INLINE_SYSCALL (waitid, 5,
+				   idtype, id, infop, options, NULL);
       if (result < 0 && errno == ENOSYS)
 	waitid_works = -1;
       else