about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2004-09-29 08:48:32 +0000
committerJakub Jelinek <jakub@redhat.com>2004-09-29 08:48:32 +0000
commit2b13f2ccc0b53bb2f3a4f6dcc006d4dea7149e16 (patch)
tree4d407d9cf3aaa05d597017bf8c326fda4e960f66
parentf1750fb9c68854778e6e023ed490ff80e1c90167 (diff)
downloadglibc-2b13f2ccc0b53bb2f3a4f6dcc006d4dea7149e16.tar.gz
glibc-2b13f2ccc0b53bb2f3a4f6dcc006d4dea7149e16.tar.xz
glibc-2b13f2ccc0b53bb2f3a4f6dcc006d4dea7149e16.zip
Updated to fedora-glibc-20040929T0821
-rw-r--r--ChangeLog72
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in10
-rw-r--r--io/utime.h2
-rw-r--r--localedata/ChangeLog9
-rw-r--r--localedata/locales/cy_GB6
-rw-r--r--localedata/locales/nb_NO2
-rw-r--r--malloc/arena.c3
-rw-r--r--nptl/ChangeLog19
-rw-r--r--nptl/sysdeps/pthread/pthread_sigmask.c10
-rw-r--r--nptl/sysdeps/pthread/sigaction.c4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/pthread_kill.c7
-rw-r--r--nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h8
-rw-r--r--nscd/nscd_getai.c6
-rw-r--r--posix/sys/wait.h7
-rw-r--r--posix/tst-waitid.c71
-rw-r--r--stdlib/stdlib.h3
-rw-r--r--sunrpc/Makefile4
-rw-r--r--sunrpc/Versions3
-rw-r--r--sunrpc/get_myaddr.c2
-rw-r--r--sunrpc/pmap_clnt.c2
-rw-r--r--sunrpc/pmap_rmt.c2
-rw-r--r--sunrpc/rpc/xdr.h2
-rw-r--r--sunrpc/rpc_parse.c12
-rw-r--r--sunrpc/tst-getmyaddr.c24
-rw-r--r--sunrpc/xdr_intXX_t.c11
-rw-r--r--sysdeps/generic/bits/waitstatus.h18
-rw-r--r--sysdeps/generic/sigfillset.c6
-rw-r--r--sysdeps/i386/dl-machine.h16
-rw-r--r--sysdeps/posix/getaddrinfo.c10
-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
43 files changed, 375 insertions, 92 deletions
diff --git a/ChangeLog b/ChangeLog
index d208b771e9..f8a6690432 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,75 @@
+2004-09-28  Ulrich Drepper  <drepper@redhat.com>
+
+	* nscd/nscd_getai.c: Use NO_MAPPING instead of MAP_FAILED for test
+	of failing __nscd_get_map_ref.  Fix a few typos.
+
+	* sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Make sure
+	SIGSETXID is not blocked.
+	* sysdeps/unix/sysv/linux/sigwaitinfo.c (do_sigwaitinfo): Likewise.
+	* sysdeps/unix/sysv/linux/sigtimedwait.c (do_sigtimedwait): Likewise.
+	* sysdeps/unix/sysv/linux/sigprocmask.c (__sigprocmask): Likewise.
+	* sysdeps/generic/sigfillset.c (sigfillset): Don't set SIGSETXID.
+
+	* sunrpc/get_myaddr.c (get_myaddress): Fix test for failing
+	getifaddrs call.
+	* sunrpc/pmap_clnt.c (__get_myaddress): Likewise.
+	* sunrpc/pmap_rmt.c (getbroadcastnets): Likewise.
+	* sunrpc/Makefile (xtests): Add tst-getmyaddr.
+	* sunrpc/tst-getmyaddr.c: New file.
+
+	* malloc/arena.c (ptmalloc_init): Allow MALLOC_CHECK_==0 to
+	disable all checking.
+
+	* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (si_flags): Add
+	support to get this value.
+
+2004-09-28  Jakub Jelinek  <jakub@redhat.com>
+
+	* io/utime.h (utime): Allow second argument to be NULL.
+
+2004-09-28  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/posix/getaddrinfo.c (gaih_inet): If NAME is a numerical IP
+	address and AI_CANONNAME is set, return copy of NAME as ai_canonname.
+
+2004-09-27  Andreas Jaeger  <aj@suse.de>
+
+	* sysdeps/i386/dl-machine.h (elf_machine_rela_relative): Replace
+	static inline by auto inline, add always_inline attribute.
+	(elf_machine_rel): Likewise.
+	(elf_machine_rela): Likewise.
+	(elf_machine_lazy_rel): Likewise.
+	(elf_machine_lazy_rela): Likewise.
+	(elf_machine_rel_relative): Likewise.
+
+2004-09-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* sunrpc/xdr_intXX_t.c: Add xdr_quad_t and xdr_u_quad_t aliases.
+	* sunrpc/rpc/xdr.h: Declare xdr_quad_t and xdr_u_quad_t.
+	* sunrpc/rpc_parse.c (get_type): Use "quad_t" for TOK_HYPER.
+	Otherwise isvectordef will loop infinitely if typedef hyper int64_t
+	is seen.
+	(unsigned_dec): Use "u_quad_t" for similar reasons.
+	* sunrpc/Versions: Export xdr_quad_t and xdr_u_quad_t.
+
+2004-09-27  Roland McGrath  <roland@redhat.com>
+
+	* sysdeps/generic/bits/waitstatus.h (__WIFSIGNALED): Simplify bit
+	twiddling in last change.
+
+	* posix/tst-waitid.c (do_test): Add tests for waitpid with WCONTINUED.
+
+	[BZ #409]
+	* posix/sys/wait.h [__WIFCONTINUED] (WIFCONTINUED): New macro.
+	* stdlib/stdlib.h [__WIFCONTINUED] (WIFCONTINUED): New macro.
+	* sysdeps/generic/bits/waitstatus.h (__W_CONTINUED): New macro.
+	[WCONTINUED] (__WIFCONTINUED): New macro.
+	(__WIFSIGNALED): Rewritten to exclude __W_CONTINUED value, and have no
+	branches.
+
+	* sysdeps/unix/sysv/linux/waitid.c (do_waitid): Add fifth argument to
+	all three syscall uses, not just one!
+
 2004-09-26  Richard Henderson  <rth@redhat.com>
 
 	* sysdeps/alpha/alphaev6/memcpy.S: Mark .prologue.
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 7a862eaf51..b85d5f7846 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -1,5 +1,5 @@
 # This file is updated automatically by Makefile.
 glibc-branch := fedora
 glibc-base := HEAD
-fedora-sync-date := 2004-09-27 06:11 UTC
-fedora-sync-tag := fedora-glibc-20040927T0611
+fedora-sync-date := 2004-09-29 08:21 UTC
+fedora-sync-tag := fedora-glibc-20040929T0821
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index 35e9dc74bd..2d32470640 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 59
+%define glibcrelease 60
 %define auxarches i586 i686 athlon sparcv9 alphaev6
 %define prelinkarches noarch
 %define nptlarches i386 i686 athlon x86_64 ia64 s390 s390x sparcv9 ppc ppc64
@@ -1239,6 +1239,14 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Wed Sep 29 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-60
+- update from CVS
+  - fix get_myaddress (#133982)
+  - remove nonnull attribute from second utime argument (#133866)
+  - handle SIGSETXID the same way as SIGCANCEL in
+    sigaction/pthread_kill/sigwait/sigwaitinfo etc.
+  - add __extension__ to long long types in NPTL <bits/pthreadtypes.h>
+
 * Mon Sep 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-59
 - update from CVS
   - fix BZ #151, #362, #381, #407
diff --git a/io/utime.h b/io/utime.h
index 4b861451bc..dd5d265708 100644
--- a/io/utime.h
+++ b/io/utime.h
@@ -45,7 +45,7 @@ struct utimbuf
    *FILE_TIMES.  If FILE_TIMES is NULL, set them to the current time.  */
 extern int utime (__const char *__file,
 		  __const struct utimbuf *__file_times)
-     __THROW __nonnull ((1, 2));
+     __THROW __nonnull ((1));
 
 __END_DECLS
 
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 2062632fa1..7014099b68 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,12 @@
+2004-09-28  Ulrich Drepper  <drepper@redhat.com>
+
+	* locales/nb_NO: Make language field consistent in form with nn_NO.
+
+2004-09-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* locales/cy_GB: Fix d_t_fmt ("a viz" -> "mis").
+	Reported by Alan Cox <alan@redhat.com>.
+
 2004-08-07  Petter Reinholdtsen  <pere@hungry.com>
 
 	* Makefile (test-input): Add tr_TR.UTF-8 sorting test.  Test case
diff --git a/localedata/locales/cy_GB b/localedata/locales/cy_GB
index 4890754a8a..0415e78454 100644
--- a/localedata/locales/cy_GB
+++ b/localedata/locales/cy_GB
@@ -13,8 +13,8 @@ tel ""
 fax ""
 language "Welsh"
 territory "Great Britain"
-revision "0.8"
-date "2001-01-28"
+revision "0.9"
+date "2004-09-27"
 
 category cy_GB:2000;LC_IDENTIFICATION
 category cy_GB:2000;LC_CTYPE
@@ -245,7 +245,7 @@ mon         "<U0049><U006F><U006E><U0061><U0077><U0072>";/
             "<U0048><U0079><U0064><U0072><U0065><U0066>";/
             "<U0054><U0061><U0063><U0068><U0077><U0065><U0064><U0064>";/
             "<U0052><U0068><U0061><U0067><U0066><U0079><U0072>"
-d_t_fmt     "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U0061><U0020><U0076><U0069><U007A><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+d_t_fmt     "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
 d_fmt       "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
 t_fmt       "<U0025><U0054>"
 am_pm       "<U0041><U004D>";"<U0050><U004D>"
diff --git a/localedata/locales/nb_NO b/localedata/locales/nb_NO
index a382a2ff4e..f43a7323a3 100644
--- a/localedata/locales/nb_NO
+++ b/localedata/locales/nb_NO
@@ -28,7 +28,7 @@ contact    ""
 email      "bug-glibc@gnu.org"
 tel        ""
 fax        ""
-language   "Norwegian Bokm<U00E5>l"
+language   "Norwegian, Bokm<U00E5>l"
 territory  "Norway"
 revision   "1.0"
 date       "2000-06-29"
diff --git a/malloc/arena.c b/malloc/arena.c
index 16574e1f7d..3adfbc45f8 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -495,7 +495,8 @@ ptmalloc_init (void)
 #endif
   if(s) {
     if(s[0]) mALLOPt(M_CHECK_ACTION, (int)(s[0] - '0'));
-    __malloc_check_init();
+    if (check_action != 0)
+      __malloc_check_init();
   }
   if(__malloc_initialize_hook != NULL)
     (*__malloc_initialize_hook)();
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 2aff8c8dbb..aba6fc4661 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,22 @@
+2004-09-28  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/pthread_kill.c (__pthread_kill): Don't
+	allow SIGSETXID to be sent.
+	* sysdeps/pthread/sigaction.c (__sigaction): Don't allow action
+	for SIGSETXID to be defined.
+	* sysdeps/pthread/pthread_sigmask.c (pthread_sigmask): Make sure
+	SIGSETXID cannot be blocked.
+
+	* sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h (pthread_cond_t):
+	Add __extension__ to long long types.
+	* sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h: Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise.
+
 2004-09-25  Ulrich Drepper  <drepper@redhat.com>
 
 	* descr.h (struct pthread): Add stopped_start field.
diff --git a/nptl/sysdeps/pthread/pthread_sigmask.c b/nptl/sysdeps/pthread/pthread_sigmask.c
index efe186ac2c..0d12fe6bf0 100644
--- a/nptl/sysdeps/pthread/pthread_sigmask.c
+++ b/nptl/sysdeps/pthread/pthread_sigmask.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -31,13 +31,15 @@ pthread_sigmask (how, newmask, oldmask)
 {
   sigset_t local_newmask;
 
-  /* The only thing we have to make sure here is that SIGCANCEL is not
-     blocked.  */
+  /* The only thing we have to make sure here is that SIGCANCEL and
+     SIGSETXID is not blocked.  */
   if (newmask != NULL
-      && __builtin_expect (__sigismember (newmask, SIGCANCEL), 0))
+      && (__builtin_expect (__sigismember (newmask, SIGCANCEL), 0)
+	  || __builtin_expect (__sigismember (newmask, SIGSETXID), 0)))
     {
       local_newmask = *newmask;
       __sigdelset (&local_newmask, SIGCANCEL);
+      __sigdelset (&local_newmask, SIGSETXID);
       newmask = &local_newmask;
     }
 
diff --git a/nptl/sysdeps/pthread/sigaction.c b/nptl/sysdeps/pthread/sigaction.c
index 392cb65c90..4d36150a90 100644
--- a/nptl/sysdeps/pthread/sigaction.c
+++ b/nptl/sysdeps/pthread/sigaction.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -36,7 +36,7 @@ __sigaction (sig, act, oact)
      const struct sigaction *act;
      struct sigaction *oact;
 {
-  if (sig == SIGCANCEL)
+  if (__builtin_expect (sig == SIGCANCEL || sig == SIGSETXID, 0))
     {
       __set_errno (EINVAL);
       return -1;
diff --git a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
index 79d43febdd..d13d6e86a4 100644
--- a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
@@ -77,15 +77,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
index 1db372d6a3..4d1c9450b5 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h
@@ -77,15 +77,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
index 746138e420..afb8800ac9 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h
@@ -77,9 +77,9 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 2f8e1d9600..90c0695697 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -97,15 +97,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
index 87577be4dc..9115d6f40b 100644
--- a/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
+++ b/nptl/sysdeps/unix/sysv/linux/pthread_kill.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -37,8 +37,9 @@ __pthread_kill (threadid, signo)
     /* Not a valid thread handle.  */
     return ESRCH;
 
-  /* Disallow sending the signal we use for cancellation.  */
-  if (signo == SIGCANCEL || signo == SIGTIMER)
+  /* Disallow sending the signal we use for cancellation, timers, for
+     for the setxid implementation.  */
+  if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID)
     return EINVAL;
 
   /* We have a special syscall to do the work.  */
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
index 9d7490444d..6b3618cd57 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
@@ -96,15 +96,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
index 914351a3e2..5125408dcb 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
@@ -78,15 +78,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
index c894f12495..3c5a289445 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
@@ -97,15 +97,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     unsigned int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
index 6b996a412a..03c2ef8106 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
@@ -96,15 +96,15 @@ typedef union
   {
     int __lock;
     unsigned int __futex;
-    unsigned long long int __total_seq;
-    unsigned long long int __wakeup_seq;
-    unsigned long long int __woken_seq;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
     void *__mutex;
     int __nwaiters;
     unsigned int __broadcast_seq;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
-  long long int __align;
+  __extension__ long long int __align;
 } pthread_cond_t;
 
 typedef union
diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c
index 627fe8cf9d..a9eac48ac8 100644
--- a/nscd/nscd_getai.c
+++ b/nscd/nscd_getai.c
@@ -38,7 +38,7 @@ libc_locked_map_ptr (map_handle);
 /* Note that we only free the structure if necessary.  The memory
    mapping is not removed since it is not visible to the malloc
    handling.  */
-libc_freeres_fn (gr_map_free)
+libc_freeres_fn (ai_map_free)
 {
 
   if (map_handle.mapped != NO_MAPPING)
@@ -63,7 +63,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
   struct mapped_database *mapped = __nscd_get_map_ref (GETFDHST, "hosts",
 						       &map_handle, &gc_cycle);
  retry:
-  if (mapped != MAP_FAILED)
+  if (mapped != NO_MAPPING)
     {
       const struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
 							  mapped);
@@ -86,7 +86,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
 	{
 	  /* nscd not running or wrong version or hosts caching disabled.  */
 	  __nss_not_use_nscd_hosts = 1;
-	  goto out;;
+	  goto out;
 	}
 
       ai_resp = &ai_resp_mem;
diff --git a/posix/sys/wait.h b/posix/sys/wait.h
index e758f9e3ff..372d46c79a 100644
--- a/posix/sys/wait.h
+++ b/posix/sys/wait.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1994,1996-2001,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1994,1996-2001,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
@@ -30,7 +30,7 @@ __BEGIN_DECLS
 #include <signal.h>
 #include <sys/resource.h>
 
-/* These macros could also be defined int <stdlib.h>.  */
+/* These macros could also be defined in <stdlib.h>.  */
 #if !defined _STDLIB_H || !defined __USE_XOPEN
 /* This will define the `W*' macros for the flag
    bits to `waitpid', `wait3', and `wait4'.  */
@@ -84,6 +84,9 @@ typedef union
 # define WIFEXITED(status)	__WIFEXITED(__WAIT_INT(status))
 # define WIFSIGNALED(status)	__WIFSIGNALED(__WAIT_INT(status))
 # define WIFSTOPPED(status)	__WIFSTOPPED(__WAIT_INT(status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status)	__WIFCONTINUED(__WAIT_INT(status))
+# endif
 #endif	/* <stdlib.h> not included.  */
 
 #ifdef	__USE_BSD
diff --git a/posix/tst-waitid.c b/posix/tst-waitid.c
index 3e81d7a0ac..642d529a9a 100644
--- a/posix/tst-waitid.c
+++ b/posix/tst-waitid.c
@@ -335,6 +335,77 @@ do_test (int argc, char *argv[])
 	       info.si_signo);
       RETURN (EXIT_FAILURE);
     }
+
+  /* Now stop him again and test waitpid with WCONTINUED.  */
+  expecting_sigchld = 1;
+  if (kill (pid, SIGSTOP) != 0)
+    {
+      error (0, errno, "kill (%d, SIGSTOP)", pid);
+      RETURN (EXIT_FAILURE);
+    }
+  pid_t wpid = waitpid (pid, &fail, WUNTRACED);
+  if (wpid < 0)
+    {
+      error (0, errno, "waitpid WUNTRACED on stopped");
+      RETURN (EXIT_FAILURE);
+    }
+  else if (wpid != pid)
+    {
+      error (0, 0,
+	     "waitpid WUNTRACED on stopped returned %d != %d (status %x)",
+	     wpid, pid, fail);
+      RETURN (EXIT_FAILURE);
+    }
+  else if (!WIFSTOPPED (fail) || WIFSIGNALED (fail) || WIFEXITED (fail)
+	   || WIFCONTINUED (fail) || WSTOPSIG (fail) != SIGSTOP)
+    {
+      error (0, 0, "waitpid WUNTRACED on stopped: status %x", fail);
+      RETURN (EXIT_FAILURE);
+    }
+  CHECK_SIGCHLD ("stopped", CLD_STOPPED, SIGSTOP);
+
+  expecting_sigchld = 1;
+  if (kill (pid, SIGCONT) != 0)
+    {
+      error (0, errno, "kill (%d, SIGCONT)", pid);
+      RETURN (EXIT_FAILURE);
+    }
+
+  /* Wait for the child to have continued.  */
+  sleep (2);
+
+  if (expecting_sigchld)
+    {
+      error (0, 0, "no SIGCHLD seen for SIGCONT (optional)");
+      expecting_sigchld = 0;
+    }
+  else
+    CHECK_SIGCHLD ("continued", CLD_CONTINUED, SIGCONT);
+
+  wpid = waitpid (pid, &fail, WCONTINUED);
+  if (wpid < 0)
+    {
+      if (errno == EINVAL)
+	error (0, 0, "waitpid does not support WCONTINUED");
+      else
+	{
+	  error (0, errno, "waitpid WCONTINUED on continued");
+	  RETURN (EXIT_FAILURE);
+	}
+    }
+  else if (wpid != pid)
+    {
+      error (0, 0,
+	     "waitpid WCONTINUED on continued returned %d != %d (status %x)",
+	     wpid, pid, fail);
+      RETURN (EXIT_FAILURE);
+    }
+  else if (WIFSTOPPED (fail) || WIFSIGNALED (fail) || WIFEXITED (fail)
+	   || !WIFCONTINUED (fail))
+    {
+      error (0, 0, "waitpid WCONTINUED on continued: status %x", fail);
+      RETURN (EXIT_FAILURE);
+    }
 #endif
 
   expecting_sigchld = 1;
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index dc0c712df7..e4f79369a6 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -88,6 +88,9 @@ typedef union
 # define WIFEXITED(status)	__WIFEXITED(__WAIT_INT(status))
 # define WIFSIGNALED(status)	__WIFSIGNALED(__WAIT_INT(status))
 # define WIFSTOPPED(status)	__WIFSTOPPED(__WAIT_INT(status))
+# ifdef __WIFCONTINUED
+#  define WIFCONTINUED(status)	__WIFCONTINUED(__WAIT_INT(status))
+# endif
 #endif	/* X/Open and <sys/wait.h> not included.  */
 
 __BEGIN_NAMESPACE_STD
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 6431324f3e..284e355cc3 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1994-2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 1994-2001, 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
@@ -85,6 +85,8 @@ all: # Make this the default target; it will be defined in Rules.
 
 include ../Makeconfig
 
+xtests := tst-getmyaddr
+
 ifeq ($(have-thread-library),yes)
 xtests += thrsvc
 endif
diff --git a/sunrpc/Versions b/sunrpc/Versions
index b800172e08..cddf188766 100644
--- a/sunrpc/Versions
+++ b/sunrpc/Versions
@@ -113,4 +113,7 @@ libc {
     __rpc_thread_svc_fdset; __rpc_thread_createerr;
     __rpc_thread_svc_pollfd; __rpc_thread_svc_max_pollfd;
   }
+  GLIBC_2.3.4 {
+    xdr_quad_t; xdr_u_quad_t;
+  }
 }
diff --git a/sunrpc/get_myaddr.c b/sunrpc/get_myaddr.c
index ee822970f9..c0beee9c59 100644
--- a/sunrpc/get_myaddr.c
+++ b/sunrpc/get_myaddr.c
@@ -63,7 +63,7 @@ get_myaddress (struct sockaddr_in *addr)
 {
   struct ifaddrs *ifa;
 
-  if (getifaddrs (&ifa) == 0)
+  if (getifaddrs (&ifa) != 0)
     {
       perror ("get_myaddress: getifaddrs");
       exit (1);
diff --git a/sunrpc/pmap_clnt.c b/sunrpc/pmap_clnt.c
index c968511e96..aa5740c8a0 100644
--- a/sunrpc/pmap_clnt.c
+++ b/sunrpc/pmap_clnt.c
@@ -57,7 +57,7 @@ __get_myaddress (struct sockaddr_in *addr)
 {
   struct ifaddrs *ifa;
 
-  if (getifaddrs (&ifa) == 0)
+  if (getifaddrs (&ifa) != 0)
     {
       perror ("get_myaddress: getifaddrs");
       exit (1);
diff --git a/sunrpc/pmap_rmt.c b/sunrpc/pmap_rmt.c
index e446f5e608..4ff707ad15 100644
--- a/sunrpc/pmap_rmt.c
+++ b/sunrpc/pmap_rmt.c
@@ -179,7 +179,7 @@ getbroadcastnets (struct in_addr *addrs, int naddrs)
 {
   struct ifaddrs *ifa;
 
-  if (getifaddrs (&ifa) == 0)
+  if (getifaddrs (&ifa) != 0)
     {
       perror ("broadcast: getifaddrs");
       return 0;
diff --git a/sunrpc/rpc/xdr.h b/sunrpc/rpc/xdr.h
index 64ac42fc5b..ba9691d1af 100644
--- a/sunrpc/rpc/xdr.h
+++ b/sunrpc/rpc/xdr.h
@@ -303,6 +303,8 @@ extern bool_t xdr_int32_t (XDR *__xdrs, int32_t *__ip) __THROW;
 extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
 extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
 extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
+extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
+extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
 extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
 extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
 extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
index b036aa456d..d6eda42309 100644
--- a/sunrpc/rpc_parse.c
+++ b/sunrpc/rpc_parse.c
@@ -621,10 +621,10 @@ get_type (const char **prefixp, const char **typep, defkind dkind)
       *typep = "long";
       (void) peekscan (TOK_INT, &tok);
       break;
-	case TOK_HYPER:
-	  *typep = "int64_t";
+    case TOK_HYPER:
+      *typep = "quad_t";
       (void) peekscan(TOK_INT, &tok);
-	  break;    
+      break;
     case TOK_VOID:
       if (dkind != DEF_UNION && dkind != DEF_PROGRAM)
 	{
@@ -668,11 +668,11 @@ unsigned_dec (const char **typep)
       *typep = "u_long";
       (void) peekscan (TOK_INT, &tok);
       break;
-	case TOK_HYPER:
+    case TOK_HYPER:
       get_token (&tok);
-	  *typep = "uint64_t";
+      *typep = "u_quad_t";
       (void) peekscan(TOK_INT, &tok);
-	  break;    
+      break;
     case TOK_INT:
       get_token (&tok);
       *typep = "u_int";
diff --git a/sunrpc/tst-getmyaddr.c b/sunrpc/tst-getmyaddr.c
new file mode 100644
index 0000000000..1eaf9b22ca
--- /dev/null
+++ b/sunrpc/tst-getmyaddr.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <rpc/clnt.h>
+
+
+static int
+do_test (void)
+{
+  struct sockaddr_in ad;
+  struct sockaddr_in ad2;
+  memset (&ad, '\0', sizeof (ad));
+  memset (&ad2, '\0', sizeof (ad2));
+
+  get_myaddress (&ad);
+
+  printf ("addr = %s:%d\n", inet_ntoa (ad.sin_addr), ad.sin_port);
+
+  return memcmp (&ad, &ad2, sizeof (ad)) == 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/sunrpc/xdr_intXX_t.c b/sunrpc/xdr_intXX_t.c
index d36d1623bc..9d2f92e10d 100644
--- a/sunrpc/xdr_intXX_t.c
+++ b/sunrpc/xdr_intXX_t.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (c) 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998.
 
@@ -18,7 +18,14 @@
    02111-1307 USA.  */
 
 #include <rpc/types.h>
+
+/* We play dirty tricks with aliases.  */
+#define xdr_quad_t Xdr_quad_t
+#define xdr_u_quad_t Xdr_u_quad_t
 #include <rpc/xdr.h>
+#undef xdr_quad_t
+#undef xdr_u_quad_t
+
 
 /* XDR 64bit integers */
 bool_t
@@ -47,6 +54,7 @@ xdr_int64_t (XDR *xdrs, int64_t *ip)
       return FALSE;
     }
 }
+strong_alias (xdr_int64_t, xdr_quad_t)
 
 /* XDR 64bit unsigned integers */
 bool_t
@@ -75,6 +83,7 @@ xdr_uint64_t (XDR *xdrs, uint64_t *uip)
       return FALSE;
     }
 }
+strong_alias (xdr_int64_t, xdr_u_quad_t)
 
 /* XDR 32bit integers */
 bool_t
diff --git a/sysdeps/generic/bits/waitstatus.h b/sysdeps/generic/bits/waitstatus.h
index 982c9dbb28..699c224989 100644
--- a/sysdeps/generic/bits/waitstatus.h
+++ b/sysdeps/generic/bits/waitstatus.h
@@ -1,5 +1,5 @@
 /* Definitions of status bits for `wait' et al.
-   Copyright (C) 1992, 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,1994,1996,1997,2000,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
@@ -38,23 +38,25 @@
 #define	__WIFEXITED(status)	(__WTERMSIG(status) == 0)
 
 /* Nonzero if STATUS indicates termination by a signal.  */
-#ifdef	__GNUC__
-# define __WIFSIGNALED(status) \
-  (__extension__ ({ int __status = (status);				      \
-		    !__WIFSTOPPED(__status) && !__WIFEXITED(__status); }))
-#else	/* Not GCC.  */
-# define __WIFSIGNALED(status)	(!__WIFSTOPPED(status) && !__WIFEXITED(status))
-#endif	/* GCC.  */
+#define __WIFSIGNALED(status) \
+  (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
 
 /* Nonzero if STATUS indicates the child is stopped.  */
 #define	__WIFSTOPPED(status)	(((status) & 0xff) == 0x7f)
 
+/* Nonzero if STATUS indicates the child continued after a stop.  We only
+   define this if <bits/waitflags.h> provides the WCONTINUED flag bit.  */
+#ifdef WCONTINUED
+# define __WIFCONTINUED(status)	((status) == __W_CONTINUED)
+#endif
+
 /* Nonzero if STATUS indicates the child dumped core.  */
 #define	__WCOREDUMP(status)	((status) & __WCOREFLAG)
 
 /* Macros for constructing status values.  */
 #define	__W_EXITCODE(ret, sig)	((ret) << 8 | (sig))
 #define	__W_STOPCODE(sig)	((sig) << 8 | 0x7f)
+#define __W_CONTINUED		0xffff
 #define	__WCOREFLAG		0x80
 
 
diff --git a/sysdeps/generic/sigfillset.c b/sysdeps/generic/sigfillset.c
index 5f91fa6bda..95d52cf0c0 100644
--- a/sysdeps/generic/sigfillset.c
+++ b/sysdeps/generic/sigfillset.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,96,97,2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991,96,97,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
@@ -37,6 +37,10 @@ sigfillset (set)
 #ifdef SIGCANCEL
   __sigdelset (set, SIGCANCEL);
 #endif
+  /* Likewise for the signal to implement setxid.  */
+#ifdef SIGSETXID
+  __sigdelset (set, SIGSETXID);
+#endif
 
   return 0;
 }
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 4b5b8f22e7..c48d9d325e 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -388,7 +388,7 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
    MAP is the object containing the reloc.  */
 
-static inline void
+auto inline void
 __attribute ((always_inline))
 elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 		 const Elf32_Sym *sym, const struct r_found_version *version,
@@ -533,7 +533,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 }
 
 #ifndef RTLD_BOOTSTRAP
-static inline void
+auto inline void
+__attribute__ ((always_inline))
 elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 		  const Elf32_Sym *sym, const struct r_found_version *version,
 		  void *const reloc_addr_arg)
@@ -639,7 +640,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
 }
 #endif	/* !RTLD_BOOTSTRAP */
 
-static inline void
+auto inline void
 __attribute ((always_inline))
 elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
 			  void *const reloc_addr_arg)
@@ -650,7 +651,8 @@ elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
 }
 
 #ifndef RTLD_BOOTSTRAP
-static inline void
+auto inline void
+__attribute__ ((always_inline))
 elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
 			   void *const reloc_addr_arg)
 {
@@ -659,7 +661,8 @@ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
 }
 #endif	/* !RTLD_BOOTSTRAP */
 
-static inline void
+auto inline void
+__attribute__ ((always_inline))
 elf_machine_lazy_rel (struct link_map *map,
 		      Elf32_Addr l_addr, const Elf32_Rel *reloc)
 {
@@ -680,7 +683,8 @@ elf_machine_lazy_rel (struct link_map *map,
 
 #ifndef RTLD_BOOTSTRAP
 
-static inline void
+auto inline void
+__attribute__ ((always_inline))
 elf_machine_lazy_rela (struct link_map *map,
 		       Elf32_Addr l_addr, const Elf32_Rela *reloc)
 {
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index 20e60de393..eb45709be1 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -556,6 +556,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
 	    }
 	  else
 	    return -EAI_ADDRFAMILY;
+
+	dupname:
+	  if (req->ai_flags & AI_CANONNAME)
+	    {
+	      canon = strdup (name);
+	      if (canon == NULL)
+		return -EAI_MEMORY;
+	    }
 	}
 
       if (at->family == AF_UNSPEC)
@@ -603,6 +611,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
 			return GAIH_OKIFUNSPEC | -EAI_NONAME;
 		    }
 		}
+
+	      goto dupname;
 	    }
 	}
 
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