summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog72
-rw-r--r--NEWS5
-rw-r--r--bits/libc-tsd.h29
-rwxr-xr-xconfigure6
-rw-r--r--configure.in3
-rw-r--r--ctype/ctype-info.c9
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in7
-rw-r--r--include/ctype.h45
-rw-r--r--include/rpc/rpc.h2
-rw-r--r--include/stdio.h11
-rw-r--r--locale/global-locale.c6
-rw-r--r--locale/lc-ctype.c9
-rw-r--r--locale/localeinfo.h7
-rw-r--r--locale/uselocale.c12
-rw-r--r--malloc/malloc.c2
-rw-r--r--math/tgmath.h9
-rw-r--r--misc/hsearch_r.c17
-rw-r--r--nptl/ChangeLog32
-rw-r--r--nptl/Makefile2
-rw-r--r--nptl/pthread_cond_init.c8
-rw-r--r--nptl/pthread_condattr_setclock.c4
-rw-r--r--nptl/pthread_mutex_lock.c13
-rw-r--r--nptl/pthread_mutex_timedlock.c13
-rw-r--r--nptl/pthread_mutex_trylock.c12
-rw-r--r--nptl/pthread_mutex_unlock.c8
-rw-r--r--nptl/sysdeps/pthread/gai_misc.h4
-rw-r--r--nptl/sysdeps/pthread/malloc-machine.h8
-rw-r--r--nptl/tst-cond23.c184
-rw-r--r--resolv/nss_dns/dns-host.c7
-rw-r--r--sunrpc/rpc_main.c6
-rw-r--r--sunrpc/rpc_thread.c20
-rw-r--r--sysdeps/mach/hurd/bits/libc-tsd.h15
-rw-r--r--sysdeps/mach/hurd/malloc-machine.h8
-rw-r--r--sysdeps/s390/bits/atomic.h4
-rw-r--r--sysdeps/s390/s390-64/dl-trampoline.S2
-rw-r--r--sysdeps/x86_64/configure3
37 files changed, 468 insertions, 140 deletions
diff --git a/ChangeLog b/ChangeLog
index 1b93c676be..f9577c9140 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,75 @@
+2008-11-11 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #7009]
+ * resolv/nss_dns/dns-host.c (gaih_getanswer_slice): Don't abort for
+ unknown request types for now.
+
+2008-11-11 Roland McGrath <roland@redhat.com>
+
+ * sysdeps/x86_64/configure: New file.
+
+ * configure.in: Add AC_SUBST(libc_cv_cpp_asm_debuginfo).
+ * configure: Regenerated.
+
+2008-11-03 Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ * sysdeps/s390/s390-64/dl-trampoline.S (_dl_runtime_profile): Use the
+ correct instruction to remove the stack frame.
+
+2008-11-03 Michael Matz <matz@suse.de>
+
+ * sysdeps/s390/bits/atomic.h (__arch_compare_and_exchange_val_32_acq,
+ __arch_compare_and_exchange_val_64_acq): Add "memory" clobber.
+
+2008-11-07 Jakub Jelinek <jakub@redhat.com>
+
+ * include/stdio.h (__builtin_fwrite, __builtin_fwrite_unlocked):
+ Remove.
+
+ * bits/libc-tsd.h (__libc_tsd_define, __libc_tsd_address,
+ __libc_tsd_get, __libc_tsd_set): Add TYPE argument, use it as the type
+ of the thread variable instead of void *.
+ * sysdeps/mach/hurd/bits/libc-tsd.h (__libc_tsd_define,
+ __libc_tsd_address, __libc_tsd_get, __libc_tsd_set): Likewise.
+ * include/ctype.h (CTYPE_B, CTYPE_TOUPPER, CTYPE_TOLOWER): Adjust
+ __libc_tsd_define arguments.
+ (__ctype_b_loc, __ctype_toupper_loc, __ctype_tolower_loc): Adjust
+ __libc_tsd_address arguments. Remove union hack.
+ * include/rpc/rpc.h (RPC_VARS): Adjust __libc_tsd_define arguments.
+ * sunrpc/rpc_thread.c (RPC_VARS): Likewise.
+ (__rpc_thread_destroy, rpc_thread_multi, __rpc_thread_variables):
+ Adjust __libc_tsd_{set,get} arguments.
+ * ctype/ctype-info.c (CTYPE_B, CTYPE_TOUPPER, CTYPE_TOLOWER): Adjust
+ __libc_tsd_define arguments.
+ * locale/uselocale.c (__uselocale): Adjust __libc_tsd_{set,get}
+ arguments.
+ * locale/lc-ctype.c (_nl_postload_ctype): Likewise.
+ * locale/global-locale.c (__libc_tsd_LOCALE): Adjust type.
+ (LOCALE): Adjust __libc_tsd_define arguments.
+ * locale/localeinfo.h (_NL_CURRENT_LOCALE): Adjust __libc_tsd_get
+ arguments.
+ (LOCALE): Adjust __libc_tsd_define arguments.
+ * sysdeps/mach/hurd/malloc-machine.h (MALLOC): Adjust __libc_tsd_define
+ arguments.
+ (tsd_setspecific, tsd_getspecific): Adjust __libc_tsd_{set,get}
+ arguments.
+
+2008-11-02 Ulrich Drepper <drepper@redhat.com>
+
+ * malloc/malloc.c (public_rEALLOc): When new arena is used, copy
+ really all bytes. Patch by Denys Vlasenko <dvlasenk@redhat.com>.
+
+2008-11-01 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #6966]
+ * misc/hsearch_r.c (hsearch_r): Fix secondary hash function.
+
+2008-10-24 Joseph Myers <joseph@codesourcery.com>
+ Ulrich Drepper <drepper@redhat.com>
+
+ * math/tgmath.h (__floating_type): Use __builtin_classify_type in
+ definition for GCC 3.1 and later.
+
2008-10-31 Jakub Jelinek <jakub@redhat.com>
* elf/dl-tls.c (__tls_get_addr): After calling _dl_update_slotinfo
diff --git a/NEWS b/NEWS
index b17f053c00..08c9e211e2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes. 2008-9-29
+GNU C Library NEWS -- history of user-visible changes. 2008-10-31
Copyright (C) 1992-2007, 2008 Free Software Foundation, Inc.
See the end for copying conditions.
@@ -36,7 +36,8 @@ Version 2.9
* Many functions, exported and internal, now atomically set the close-on-exec
flag when run on a sufficiently new kernel. Implemented by Ulrich Drepper.
-* Sorting rules for some Indian languages (Kannada, Gurumukhi, Telugu)
+* Sorting rules for some Indian languages (Kannada, Gurumukhi, Telugu,
+ Sinhala)
Implemented by Pravin Satpute.
* New locales: sd_IN, sd_IN@devanagari, ks_IN@devanagari, ht_HT, en_AG, nl_AW.
diff --git a/bits/libc-tsd.h b/bits/libc-tsd.h
index d39382952a..1a24b701b9 100644
--- a/bits/libc-tsd.h
+++ b/bits/libc-tsd.h
@@ -1,5 +1,5 @@
/* libc-internal interface for thread-specific data. Stub or TLS version.
- Copyright (C) 1998,2001,02 Free Software Foundation, Inc.
+ Copyright (C) 1998,2001,2002,2008 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
@@ -23,15 +23,15 @@
/* This file defines the following macros for accessing a small fixed
set of thread-specific `void *' data used only internally by libc.
- __libc_tsd_define(CLASS, KEY) -- Define or declare a `void *' datum
+ __libc_tsd_define(CLASS, TYPE, KEY) -- Define or declare a datum with TYPE
for KEY. CLASS can be `static' for
keys used in only one source file,
empty for global definitions, or
`extern' for global declarations.
- __libc_tsd_address(KEY) -- Return the `void **' pointing to
+ __libc_tsd_address(TYPE, KEY) -- Return the `TYPE *' pointing to
the current thread's datum for KEY.
- __libc_tsd_get(KEY) -- Return the `void *' datum for KEY.
- __libc_tsd_set(KEY, VALUE) -- Set the datum for KEY to VALUE.
+ __libc_tsd_get(TYPE, KEY) -- Return the `TYPE' datum for KEY.
+ __libc_tsd_set(TYPE, KEY, VALUE) -- Set the datum for KEY to VALUE.
The set of available KEY's will usually be provided as an enum,
and contains (at least):
@@ -52,18 +52,19 @@
translate directly into variables by macro magic. */
#if USE___THREAD
-# define __libc_tsd_define(CLASS, KEY) \
- CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie;
+# define __libc_tsd_define(CLASS, TYPE, KEY) \
+ CLASS __thread TYPE __libc_tsd_##KEY attribute_tls_model_ie;
-# define __libc_tsd_address(KEY) (&__libc_tsd_##KEY)
-# define __libc_tsd_get(KEY) (__libc_tsd_##KEY)
-# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
+# define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY)
+# define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY)
+# define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
#else
-# define __libc_tsd_define(CLASS, KEY) CLASS void *__libc_tsd_##KEY##_data;
+# define __libc_tsd_define(CLASS, TYPE, KEY) \
+ CLASS TYPE __libc_tsd_##KEY##_data;
-# define __libc_tsd_address(KEY) (&__libc_tsd_##KEY##_data)
-# define __libc_tsd_get(KEY) (__libc_tsd_##KEY##_data)
-# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY##_data = (VALUE))
+# define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY##_data)
+# define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY##_data)
+# define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY##_data = (VALUE))
#endif
#endif /* bits/libc-tsd.h */
diff --git a/configure b/configure
index 73f199689e..a2a792c93f 100755
--- a/configure
+++ b/configure
@@ -748,6 +748,7 @@ libc_cv_localedir
libc_cv_sysconfdir
libc_cv_rootsbindir
libc_cv_forced_unwind
+libc_cv_cpp_asm_debuginfo
use_ldconfig
ldd_rewrite_script
elf
@@ -8445,6 +8446,8 @@ fi
+
+
if test $elf = yes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_ELF 1
@@ -9311,6 +9314,7 @@ libc_cv_localedir!$libc_cv_localedir$ac_delim
libc_cv_sysconfdir!$libc_cv_sysconfdir$ac_delim
libc_cv_rootsbindir!$libc_cv_rootsbindir$ac_delim
libc_cv_forced_unwind!$libc_cv_forced_unwind$ac_delim
+libc_cv_cpp_asm_debuginfo!$libc_cv_cpp_asm_debuginfo$ac_delim
use_ldconfig!$use_ldconfig$ac_delim
ldd_rewrite_script!$ldd_rewrite_script$ac_delim
elf!$elf$ac_delim
@@ -9331,7 +9335,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 53; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 54; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.in b/configure.in
index 1651d38c10..4a2b54605e 100644
--- a/configure.in
+++ b/configure.in
@@ -2181,6 +2181,9 @@ AC_SUBST(libc_cv_sysconfdir)
AC_SUBST(libc_cv_rootsbindir)
AC_SUBST(libc_cv_forced_unwind)
+dnl sysdeps/CPU/configure.in checks set this via arch-specific asm tests
+AC_SUBST(libc_cv_cpp_asm_debuginfo)
+
AC_SUBST(use_ldconfig)
AC_SUBST(ldd_rewrite_script)
diff --git a/ctype/ctype-info.c b/ctype/ctype-info.c
index 35f2fb540f..03b67d179f 100644
--- a/ctype/ctype-info.c
+++ b/ctype/ctype-info.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991,92,95,96,97,99,2000,02 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,95,96,97,99,2000, 2002, 2008
+ 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
@@ -20,9 +21,9 @@
#include <ctype.h>
#include <locale/localeinfo.h>
-__libc_tsd_define (, CTYPE_B)
-__libc_tsd_define (, CTYPE_TOLOWER)
-__libc_tsd_define (, CTYPE_TOUPPER)
+__libc_tsd_define (, const uint16_t *, CTYPE_B)
+__libc_tsd_define (, const int32_t *, CTYPE_TOLOWER)
+__libc_tsd_define (, const int32_t *, CTYPE_TOUPPER)
#include <shlib-compat.h>
diff --git a/fedora/branch.mk b/fedora/branch.mk
index b4292956c9..a7dac68fcf 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-f8
-fedora-sync-date := 2008-10-31 21:02 UTC
-fedora-sync-tag := fedora-glibc-20081031T2102
+fedora-sync-date := 2008-11-12 20:08 UTC
+fedora-sync-tag := fedora-glibc-20081112T2008
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index acf2578217..08e3f9e597 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -19,7 +19,7 @@
Summary: The GNU libc libraries
Name: glibc
Version: @glibcversion@
-Release: 16
+Release: 17
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
# Things that are linked directly into dynamically linked programs
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@@ -984,6 +984,11 @@ rm -f *.filelist*
%endif
%changelog
+* Wed Nov 12 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-17
+- update from trunk
+ - don't abort on broken DNS replies (#469299, BZ#7009)
+ - misc fixes (BZ#6966, BZ#7008, BZ#6955, BZ#6843)
+
* Fri Oct 31 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-16
- update from trunk
- further resolver fixes
diff --git a/include/ctype.h b/include/ctype.h
index ae38b1bf23..f4b782e136 100644
--- a/include/ctype.h
+++ b/include/ctype.h
@@ -18,50 +18,35 @@ extern int __isctype (int __c, int __mask);
# define CTYPE_EXTERN_INLINE extern inline
# endif
-__libc_tsd_define (extern, CTYPE_B)
-__libc_tsd_define (extern, CTYPE_TOUPPER)
-__libc_tsd_define (extern, CTYPE_TOLOWER)
+__libc_tsd_define (extern, const uint16_t *, CTYPE_B)
+__libc_tsd_define (extern, const int32_t *, CTYPE_TOUPPER)
+__libc_tsd_define (extern, const int32_t *, CTYPE_TOLOWER)
CTYPE_EXTERN_INLINE const uint16_t ** __attribute__ ((const))
__ctype_b_loc (void)
{
- union
- {
- void **ptr;
- const uint16_t **tablep;
- } u;
- u.ptr = __libc_tsd_address (CTYPE_B);
- if (__builtin_expect (*u.tablep == NULL, 0))
- *u.tablep = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128;
- return u.tablep;
+ const uint16_t **tablep = __libc_tsd_address (const uint16_t *, CTYPE_B);
+ if (__builtin_expect (*tablep == NULL, 0))
+ *tablep = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128;
+ return tablep;
}
CTYPE_EXTERN_INLINE const int32_t ** __attribute__ ((const))
__ctype_toupper_loc (void)
{
- union
- {
- void **ptr;
- const int32_t **tablep;
- } u;
- u.ptr = __libc_tsd_address (CTYPE_TOUPPER);
- if (__builtin_expect (*u.tablep == NULL, 0))
- *u.tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128);
- return u.tablep;
+ const int32_t **tablep = __libc_tsd_address (const int32_t *, CTYPE_TOUPPER);
+ if (__builtin_expect (*tablep == NULL, 0))
+ *tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128);
+ return tablep;
}
CTYPE_EXTERN_INLINE const int32_t ** __attribute__ ((const))
__ctype_tolower_loc (void)
{
- union
- {
- void **ptr;
- const int32_t **tablep;
- } u;
- u.ptr = __libc_tsd_address (CTYPE_TOLOWER);
- if (__builtin_expect (*u.tablep == NULL, 0))
- *u.tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128);
- return u.tablep;
+ const int32_t **tablep = __libc_tsd_address (const int32_t *, CTYPE_TOLOWER);
+ if (__builtin_expect (*tablep == NULL, 0))
+ *tablep = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128);
+ return tablep;
}
# endif /* Not NOT_IN_libc. */
diff --git a/include/rpc/rpc.h b/include/rpc/rpc.h
index e5b1685f54..d2f3013114 100644
--- a/include/rpc/rpc.h
+++ b/include/rpc/rpc.h
@@ -45,7 +45,7 @@ extern void __rpc_thread_key_cleanup (void);
extern void __rpc_thread_destroy (void);
-__libc_tsd_define (extern, RPC_VARS)
+__libc_tsd_define (extern, struct rpc_thread_variables *, RPC_VARS)
#define RPC_THREAD_VARIABLE(x) (__rpc_thread_variables()->x)
diff --git a/include/stdio.h b/include/stdio.h
index 54f2507261..d82728a845 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -160,17 +160,6 @@ libc_hidden_proto (__vfprintf_chk)
libc_hidden_proto (__vasprintf_chk)
libc_hidden_proto (__vdprintf_chk)
libc_hidden_proto (__obstack_vprintf_chk)
-
-# if !defined NOT_IN_libc && defined SHARED && defined DO_VERSIONING \
- && !defined NO_HIDDEN
-/* Special gcc builtins. */
-extern size_t __builtin_fwrite (const void *, size_t, size_t, void *)
- __asm ("__GI_fwrite");
-extern size_t __builtin_fwrite_unlocked (const void *, size_t, size_t, void *)
- __asm ("__GI_fwrite_unlocked");
-
-# endif
-
# endif
#endif
diff --git a/locale/global-locale.c b/locale/global-locale.c
index 2280f68df4..771742e1be 100644
--- a/locale/global-locale.c
+++ b/locale/global-locale.c
@@ -1,5 +1,5 @@
/* Locale object representing the global locale controlled by setlocale.
- Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2006, 2008 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
@@ -62,9 +62,9 @@ struct __locale_struct _nl_global_locale attribute_hidden =
#include <tls.h>
#if HAVE___THREAD
/* The tsd macros don't permit an initializer. */
-__thread void *__libc_tsd_LOCALE = &_nl_global_locale;
+__thread __locale_t __libc_tsd_LOCALE = &_nl_global_locale;
#else
-__libc_tsd_define (, LOCALE)
+__libc_tsd_define (, __locale_t, LOCALE)
/* This is a bad kludge presuming the variable name used by the macros.
Using typeof makes sure to barf if we do not match the macro definition.
This ifndef is a further bad kludge for Hurd, where there is an explicit
diff --git a/locale/lc-ctype.c b/locale/lc-ctype.c
index a0a54fbd8d..f2530afe5c 100644
--- a/locale/lc-ctype.c
+++ b/locale/lc-ctype.c
@@ -1,5 +1,5 @@
/* Define current locale data for LC_CTYPE category.
- Copyright (C) 1995,1996,1997,1998,1999,2000,2002,2003,2005
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2002,2003,2005,2008
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -66,10 +66,11 @@ _nl_postload_ctype (void)
in fact using the global locale. */
if (_NL_CURRENT_LOCALE == &_nl_global_locale)
{
- __libc_tsd_set (CTYPE_B, (void *) _nl_global_locale.__ctype_b);
- __libc_tsd_set (CTYPE_TOUPPER,
+ __libc_tsd_set (const uint16_t *, CTYPE_B,
+ (void *) _nl_global_locale.__ctype_b);
+ __libc_tsd_set (const int32_t *, CTYPE_TOUPPER,
(void *) _nl_global_locale.__ctype_toupper);
- __libc_tsd_set (CTYPE_TOLOWER,
+ __libc_tsd_set (const int32_t *, CTYPE_TOLOWER,
(void *) _nl_global_locale.__ctype_tolower);
}
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index 5e3e99ca68..3661080bb2 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -1,5 +1,6 @@
/* Declarations for internal libc locale interfaces
- Copyright (C) 1995-2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1995-2003, 2005, 2006, 2007, 2008
+ 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
@@ -203,9 +204,9 @@ extern struct __locale_struct _nl_global_locale attribute_hidden;
/* This fetches the thread-local locale_t pointer, either one set with
uselocale or &_nl_global_locale. */
-#define _NL_CURRENT_LOCALE ((__locale_t) __libc_tsd_get (LOCALE))
+#define _NL_CURRENT_LOCALE (__libc_tsd_get (__locale_t, LOCALE))
#include <bits/libc-tsd.h>
-__libc_tsd_define (extern, LOCALE)
+__libc_tsd_define (extern, __locale_t, LOCALE)
/* For static linking it is desireable to avoid always linking in the code
diff --git a/locale/uselocale.c b/locale/uselocale.c
index 6a54b58a27..ec5dc8f356 100644
--- a/locale/uselocale.c
+++ b/locale/uselocale.c
@@ -1,5 +1,5 @@
/* uselocale -- fetch and set the current per-thread locale
- Copyright (C) 2002, 2004, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2007, 2008 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
@@ -35,7 +35,7 @@ __uselocale (locale_t newloc)
{
const locale_t locobj
= newloc == LC_GLOBAL_LOCALE ? &_nl_global_locale : newloc;
- __libc_tsd_set (LOCALE, locobj);
+ __libc_tsd_set (__locale_t, LOCALE, locobj);
#ifdef NL_CURRENT_INDIRECT
/* Now we must update all the per-category thread-local variables to
@@ -63,9 +63,11 @@ __uselocale (locale_t newloc)
#endif
/* Update the special tsd cache of some locale data. */
- __libc_tsd_set (CTYPE_B, (void *) locobj->__ctype_b);
- __libc_tsd_set (CTYPE_TOLOWER, (void *) locobj->__ctype_tolower);
- __libc_tsd_set (CTYPE_TOUPPER, (void *) locobj->__ctype_toupper);
+ __libc_tsd_set (const uint16_t *, CTYPE_B, (void *) locobj->__ctype_b);
+ __libc_tsd_set (const int32_t *, CTYPE_TOLOWER,
+ (void *) locobj->__ctype_tolower);
+ __libc_tsd_set (const int32_t *, CTYPE_TOUPPER,
+ (void *) locobj->__ctype_toupper);
}
return oldloc == &_nl_global_locale ? LC_GLOBAL_LOCALE : oldloc;
diff --git a/malloc/malloc.c b/malloc/malloc.c
index feca2cbea9..d6102a4528 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -3717,7 +3717,7 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
newp = public_mALLOc(bytes);
if (newp != NULL)
{
- MALLOC_COPY (newp, oldmem, oldsize - 2 * SIZE_SZ);
+ MALLOC_COPY (newp, oldmem, oldsize - SIZE_SZ);
#if THREAD_STATS
if(!mutex_trylock(&ar_ptr->mutex))
++(ar_ptr->stat_lock_direct);
diff --git a/math/tgmath.h b/math/tgmath.h
index 4f45aaa0f2..eefdd26c9c 100644
--- a/math/tgmath.h
+++ b/math/tgmath.h
@@ -48,7 +48,14 @@
/* 1 if 'type' is a floating type, 0 if 'type' is an integer type.
Allows for _Bool. Expands to an integer constant expression. */
-# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
+# if __GNUC_PREREQ (3, 1)
+# define __floating_type(type) \
+ (__builtin_classify_type ((type) 0) == 8 \
+ || (__builtin_classify_type ((type) 0) == 9 \
+ && __builtin_classify_type (__real__ ((type) 0)) == 8))
+# else
+# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))
+# endif
/* The tgmath real type for T, where E is 0 if T is an integer type and
1 for a floating type. */
diff --git a/misc/hsearch_r.c b/misc/hsearch_r.c
index cb4d67466b..c855a41846 100644
--- a/misc/hsearch_r.c
+++ b/misc/hsearch_r.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993,1995-1997,2002,2005,2007 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1995-1997,2002,2005,2007,2008
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1993.
@@ -154,18 +155,11 @@ hsearch_r (item, action, retval, htab)
}
/* First hash function: simply take the modul but prevent zero. */
- hval %= htab->size;
- if (hval == 0)
- ++hval;
-
- /* The first index tried. */
- idx = hval;
+ idx = hval % htab->size + 1;
if (htab->table[idx].used)
{
/* Further action might be required according to the action value. */
- unsigned hval2;
-
if (htab->table[idx].used == hval
&& strcmp (item.key, htab->table[idx].entry.key) == 0)
{
@@ -174,7 +168,8 @@ hsearch_r (item, action, retval, htab)
}
/* Second hash function, as suggested in [Knuth] */
- hval2 = 1 + hval % (htab->size - 2);
+ unsigned int hval2 = 1 + hval % (htab->size - 2);
+ unsigned int first_idx = idx;
do
{
@@ -186,7 +181,7 @@ hsearch_r (item, action, retval, htab)
idx -= hval2;
/* If we visited all entries leave the loop unsuccessfully. */
- if (idx == hval)
+ if (idx == first_idx)
break;
/* If entry is found use it. */
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index acc8302c75..3d1136f463 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,35 @@
+2008-11-12 Jakub Jelinek <jakub@redhat.com>
+
+ [BZ #7008]
+ * pthread_condattr_setclock.c (pthread_condattr_setclock): Fix masking
+ of old value.
+ * pthread_cond_init.c (__pthread_cond_init): Fix
+ cond->__data.__nwaiters initialization.
+ * Makefile (tests): Add tst-cond23.
+ * tst-cond23.c: New test.
+
+2008-11-07 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/pthread/malloc-machine.h (MALLOC): Adjust __libc_tsd_define
+ arguments.
+ (tsd_setspecific, tsd_getspecific): Adjust __libc_tsd_{set,get}
+ arguments.
+
+2008-11-01 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #6955]
+ * pthread_mutex_lock.c: Add support for private PI mutexes.
+ * pthread_mutex_timedlock.c: Likewise.
+ * pthread_mutex_trylock.c: Likewise.
+ * pthread_mutex_unlock.c: Likewise.
+ Patch mostly by Ben Jackson <ben@ben.com>.
+
+2008-10-31 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #6843]
+ * sysdeps/pthread/gai_misc.h (__gai_create_helper_thread):
+ Increase stack size for helper thread.
+
2008-10-06 Martin Schwidefsky <schwidefsky@de.ibm.com>
* sysdeps/s390/tls.h (THREAD_SET_STACK_GUARD): Add empty inline
diff --git a/nptl/Makefile b/nptl/Makefile
index 76d9e383e0..7406949376 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -205,7 +205,7 @@ tests = tst-typesizes \
tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
- tst-cond20 tst-cond21 tst-cond22 \
+ tst-cond20 tst-cond21 tst-cond22 tst-cond23 \
tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \
diff --git a/nptl/pthread_cond_init.c b/nptl/pthread_cond_init.c
index a75b82b9cf..65c01b103c 100644
--- a/nptl/pthread_cond_init.c
+++ b/nptl/pthread_cond_init.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -31,8 +32,9 @@ __pthread_cond_init (cond, cond_attr)
cond->__data.__lock = LLL_LOCK_INITIALIZER;
cond->__data.__futex = 0;
cond->__data.__nwaiters = (icond_attr != NULL
- && ((icond_attr->value
- & (COND_NWAITERS_SHIFT << 1)) >> 1));
+ ? ((icond_attr->value >> 1)
+ & ((1 << COND_NWAITERS_SHIFT) - 1))
+ : CLOCK_REALTIME);
cond->__data.__total_seq = 0;
cond->__data.__wakeup_seq = 0;
cond->__data.__woken_seq = 0;
diff --git a/nptl/pthread_condattr_setclock.c b/nptl/pthread_condattr_setclock.c
index 9c03bce9fc..5c54f764e6 100644
--- a/nptl/pthread_condattr_setclock.c
+++ b/nptl/pthread_condattr_setclock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -66,7 +66,7 @@ pthread_condattr_setclock (attr, clock_id)
int *valuep = &((struct pthread_condattr *) attr)->value;
- *valuep = ((*valuep & ~(1 << (COND_NWAITERS_SHIFT + 1)) & ~1)
+ *valuep = ((*valuep & ~(((1 << COND_NWAITERS_SHIFT) - 1) << 1))
| (clock_id << 1));
return 0;
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index ed98dfc6c3..3eb5636955 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -269,9 +269,13 @@ __pthread_mutex_lock (mutex)
{
/* The mutex is locked. The kernel will now take care of
everything. */
+ int private = (robust
+ ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+ : PTHREAD_MUTEX_PSHARED (mutex));
INTERNAL_SYSCALL_DECL (__err);
int e = INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_LOCK_PI, 1, 0);
+ __lll_private_flag (FUTEX_LOCK_PI,
+ private), 1, 0);
if (INTERNAL_SYSCALL_ERROR_P (e, __err)
&& (INTERNAL_SYSCALL_ERRNO (e, __err) == ESRCH
@@ -327,7 +331,10 @@ __pthread_mutex_lock (mutex)
INTERNAL_SYSCALL_DECL (__err);
INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_UNLOCK_PI, 0, 0);
+ __lll_private_flag (FUTEX_UNLOCK_PI,
+ PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+),
+ 0, 0);
THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
return ENOTRECOVERABLE;
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
index 4bf0efea34..8d0db79d58 100644
--- a/nptl/pthread_mutex_timedlock.c
+++ b/nptl/pthread_mutex_timedlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -254,10 +254,15 @@ pthread_mutex_timedlock (mutex, abstime)
/* The mutex is locked. The kernel will now take care of
everything. The timeout value must be a relative value.
Convert it. */
+ int private = (robust
+ ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+ : PTHREAD_MUTEX_PSHARED (mutex));
INTERNAL_SYSCALL_DECL (__err);
int e = INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_LOCK_PI, 1, abstime);
+ __lll_private_flag (FUTEX_LOCK_PI,
+ private), 1,
+ abstime);
if (INTERNAL_SYSCALL_ERROR_P (e, __err))
{
if (INTERNAL_SYSCALL_ERRNO (e, __err) == ETIMEDOUT)
@@ -331,7 +336,9 @@ pthread_mutex_timedlock (mutex, abstime)
INTERNAL_SYSCALL_DECL (__err);
INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_UNLOCK_PI, 0, 0);
+ __lll_private_flag (FUTEX_UNLOCK_PI,
+ PTHREAD_ROBUST_MUTEX_PSHARED (mutex)),
+ 0, 0);
THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
return ENOTRECOVERABLE;
diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c
index f6e24d4138..25029bedce 100644
--- a/nptl/pthread_mutex_trylock.c
+++ b/nptl/pthread_mutex_trylock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2005-2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -231,9 +231,13 @@ __pthread_mutex_trylock (mutex)
/* The mutex owner died. The kernel will now take care of
everything. */
+ int private = (robust
+ ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+ : PTHREAD_MUTEX_PSHARED (mutex));
INTERNAL_SYSCALL_DECL (__err);
int e = INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_TRYLOCK_PI, 0, 0);
+ __lll_private_flag (FUTEX_TRYLOCK_PI,
+ private), 0, 0);
if (INTERNAL_SYSCALL_ERROR_P (e, __err)
&& INTERNAL_SYSCALL_ERRNO (e, __err) == EWOULDBLOCK)
@@ -274,7 +278,9 @@ __pthread_mutex_trylock (mutex)
INTERNAL_SYSCALL_DECL (__err);
INTERNAL_SYSCALL (futex, __err, 4, &mutex->__data.__lock,
- FUTEX_UNLOCK_PI, 0, 0);
+ __lll_private_flag (FUTEX_UNLOCK_PI,
+ PTHREAD_ROBUST_MUTEX_PSHARED (mutex)),
+ 0, 0);
THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
return ENOTRECOVERABLE;
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index d33d0593d8..a14c43ece7 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2005-2007, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -196,9 +196,13 @@ __pthread_mutex_unlock_usercnt (mutex, decr)
THREAD_GETMEM (THREAD_SELF,
tid)))
{
+ int robust = mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
+ int private = (robust
+ ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+ : PTHREAD_MUTEX_PSHARED (mutex));
INTERNAL_SYSCALL_DECL (__err);
INTERNAL_SYSCALL (futex, __err, 2, &mutex->__data.__lock,
- FUTEX_UNLOCK_PI);
+ __lll_private_flag (FUTEX_UNLOCK_PI, private));
}
THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL);
diff --git a/nptl/sysdeps/pthread/gai_misc.h b/nptl/sysdeps/pthread/gai_misc.h
index 0a2686cb27..9094c1e37b 100644
--- a/nptl/sysdeps/pthread/gai_misc.h
+++ b/nptl/sysdeps/pthread/gai_misc.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2006, 2007, 2008 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
@@ -97,7 +97,7 @@ __gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
/* The helper thread needs only very little resources. */
- (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
+ (void) pthread_attr_setstacksize (&attr, 4 * PTHREAD_STACK_MIN);
/* Block all signals in the helper thread. To do this thoroughly we
temporarily have to block all signals here. */
diff --git a/nptl/sysdeps/pthread/malloc-machine.h b/nptl/sysdeps/pthread/malloc-machine.h
index 33a3d20531..e99aaa781f 100644
--- a/nptl/sysdeps/pthread/malloc-machine.h
+++ b/nptl/sysdeps/pthread/malloc-machine.h
@@ -1,6 +1,6 @@
/* Basic platform-independent macro definitions for mutexes,
thread-specific data and parameters for malloc.
- Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2007, 2008 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
@@ -63,10 +63,10 @@ extern void *__dso_handle __attribute__ ((__weak__));
#include <bits/libc-tsd.h>
typedef int tsd_key_t[1]; /* no key data structure, libc magic does it */
-__libc_tsd_define (static, MALLOC) /* declaration/common definition */
+__libc_tsd_define (static, void *, MALLOC) /* declaration/common definition */
#define tsd_key_create(key, destr) ((void) (key))
-#define tsd_setspecific(key, data) __libc_tsd_set (MALLOC, (data))
-#define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (MALLOC))
+#define tsd_setspecific(key, data) __libc_tsd_set (void *, MALLOC, (data))
+#define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (void *, MALLOC))
#include <sysdeps/generic/malloc-machine.h>
diff --git a/nptl/tst-cond23.c b/nptl/tst-cond23.c
new file mode 100644
index 0000000000..254d821cc9
--- /dev/null
+++ b/nptl/tst-cond23.c
@@ -0,0 +1,184 @@
+/* Copyright (C) 2008 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2008.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+
+
+#if defined _POSIX_CLOCK_SELECTION && _POSIX_CLOCK_SELECTION >= 0
+static int
+check (pthread_condattr_t *condattr, int pshared, clockid_t cl)
+{
+ clockid_t cl2;
+ if (pthread_condattr_getclock (condattr, &cl2) != 0)
+ {
+ puts ("condattr_getclock failed");
+ return 1;
+ }
+ if (cl != cl2)
+ {
+ printf ("condattr_getclock returned wrong value: %d, expected %d\n",
+ (int) cl2, (int) cl);
+ return 1;
+ }
+
+ int p;
+ if (pthread_condattr_getpshared (condattr, &p) != 0)
+ {
+ puts ("condattr_getpshared failed");
+ return 1;
+ }
+ else if (p != pshared)
+ {
+ printf ("condattr_getpshared returned wrong value: %d, expected %d\n",
+ p, pshared);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+run_test (clockid_t cl)
+{
+ pthread_condattr_t condattr;
+
+ printf ("clock = %d\n", (int) cl);
+
+ if (pthread_condattr_init (&condattr) != 0)
+ {
+ puts ("condattr_init failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_PRIVATE, CLOCK_REALTIME))
+ return 1;
+
+ if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_SHARED) != 0)
+ {
+ puts ("1st condattr_setpshared failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_SHARED, CLOCK_REALTIME))
+ return 1;
+
+ if (pthread_condattr_setclock (&condattr, cl) != 0)
+ {
+ puts ("1st condattr_setclock failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_SHARED, cl))
+ return 1;
+
+ if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_PRIVATE) != 0)
+ {
+ puts ("2nd condattr_setpshared failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_PRIVATE, cl))
+ return 1;
+
+ if (pthread_condattr_setclock (&condattr, CLOCK_REALTIME) != 0)
+ {
+ puts ("2nd condattr_setclock failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_PRIVATE, CLOCK_REALTIME))
+ return 1;
+
+ if (pthread_condattr_setclock (&condattr, cl) != 0)
+ {
+ puts ("3rd condattr_setclock failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_PRIVATE, cl))
+ return 1;
+
+ if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_SHARED) != 0)
+ {
+ puts ("3rd condattr_setpshared failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_SHARED, cl))
+ return 1;
+
+ if (pthread_condattr_setclock (&condattr, CLOCK_REALTIME) != 0)
+ {
+ puts ("4th condattr_setclock failed");
+ return 1;
+ }
+
+ if (check (&condattr, PTHREAD_PROCESS_SHARED, CLOCK_REALTIME))
+ return 1;
+
+ if (pthread_condattr_destroy (&condattr) != 0)
+ {
+ puts ("condattr_destroy failed");
+ return 1;
+ }
+
+ return 0;
+}
+#endif
+
+
+static int
+do_test (void)
+{
+#if !defined _POSIX_CLOCK_SELECTION || _POSIX_CLOCK_SELECTION == -1
+
+ puts ("_POSIX_CLOCK_SELECTION not supported, test skipped");
+ return 0;
+
+#else
+
+ int res = run_test (CLOCK_REALTIME);
+
+# if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
+# if _POSIX_MONOTONIC_CLOCK == 0
+ int e = sysconf (_SC_MONOTONIC_CLOCK);
+ if (e < 0)
+ puts ("CLOCK_MONOTONIC not supported");
+ else if (e == 0)
+ {
+ puts ("sysconf (_SC_MONOTONIC_CLOCK) must not return 0");
+ res = 1;
+ }
+ else
+# endif
+ res |= run_test (CLOCK_MONOTONIC);
+# else
+ puts ("_POSIX_MONOTONIC_CLOCK not defined");
+# endif
+
+ return res;
+#endif
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index 4d43dec946..6cbfcb63ce 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1083,11 +1083,18 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
}
continue;
}
+#if 1
+ // We should not see any types other than those explicitly listed
+ // below. Some types sent by server seem missing, though. Just
+ // collect the data for now.
+ if (__builtin_expect (type != T_A && type != T_AAAA, 0))
+#else
if (__builtin_expect (type == T_SIG, 0)
|| __builtin_expect (type == T_KEY, 0)
|| __builtin_expect (type == T_NXT, 0)
|| __builtin_expect (type == T_PTR, 0)
|| __builtin_expect (type == T_DNAME, 0))
+#endif
{
/* We don't support DNSSEC yet. For now, ignore the record
and send a low priority message to syslog.
diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c
index bda432d3cd..a3d227e524 100644
--- a/sunrpc/rpc_main.c
+++ b/sunrpc/rpc_main.c
@@ -995,7 +995,11 @@ mkfile_output (struct commandline *cmd)
abort ();
temp = rindex (cmd->infile, '.');
cp = stpcpy (mkfilename, "Makefile.");
- strncpy (cp, cmd->infile, (temp - cmd->infile));
+ if (temp != NULL)
+ *((char *) stpncpy (cp, cmd->infile, temp - cmd->infile)) = '\0';
+ else
+ stpcpy (cp, cmd->infile);
+
}
else
mkfilename = (char *) cmd->outfile;
diff --git a/sunrpc/rpc_thread.c b/sunrpc/rpc_thread.c
index 7a9cc9d62f..796bf086fc 100644
--- a/sunrpc/rpc_thread.c
+++ b/sunrpc/rpc_thread.c
@@ -10,7 +10,7 @@
/* Variable used in non-threaded applications or for the first thread. */
static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem;
-__libc_tsd_define (, RPC_VARS)
+__libc_tsd_define (, struct rpc_thread_variables *, RPC_VARS)
/*
* Task-variable destructor
@@ -18,7 +18,8 @@ __libc_tsd_define (, RPC_VARS)
void __attribute__ ((section ("__libc_thread_freeres_fn")))
__rpc_thread_destroy (void)
{
- struct rpc_thread_variables *tvp = __libc_tsd_get (RPC_VARS);
+ struct rpc_thread_variables *tvp
+ = __libc_tsd_get (struct rpc_thread_variables *, RPC_VARS);
if (tvp != NULL) {
__rpc_thread_svc_cleanup ();
@@ -33,7 +34,7 @@ __rpc_thread_destroy (void)
free (tvp->svc_pollfd_s);
if (tvp != &__libc_tsd_RPC_VARS_mem)
free (tvp);
- __libc_tsd_set (RPC_VARS, NULL);
+ __libc_tsd_set (struct rpc_thread_variables *, RPC_VARS, NULL);
}
}
#ifdef _LIBC_REENTRANT
@@ -48,7 +49,8 @@ text_set_element (__libc_subfreeres, __rpc_thread_destroy);
static void
rpc_thread_multi (void)
{
- __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem);
+ __libc_tsd_set (struct rpc_thread_variables *, RPC_VARS,
+ &__libc_tsd_RPC_VARS_mem);
}
@@ -58,16 +60,18 @@ __rpc_thread_variables (void)
__libc_once_define (static, once);
struct rpc_thread_variables *tvp;
- tvp = __libc_tsd_get (RPC_VARS);
+ tvp = __libc_tsd_get (struct rpc_thread_variables *, RPC_VARS);
if (tvp == NULL) {
__libc_once (once, rpc_thread_multi);
- tvp = __libc_tsd_get (RPC_VARS);
+ tvp = __libc_tsd_get (struct rpc_thread_variables *, RPC_VARS);
if (tvp == NULL) {
tvp = calloc (1, sizeof *tvp);
if (tvp != NULL)
- __libc_tsd_set (RPC_VARS, tvp);
+ __libc_tsd_set (struct rpc_thread_variables *,
+ RPC_VARS, tvp);
else
- tvp = __libc_tsd_get (RPC_VARS);
+ tvp = __libc_tsd_get (struct rpc_thread_variables *,
+ RPC_VARS);
}
}
return tvp;
diff --git a/sysdeps/mach/hurd/bits/libc-tsd.h b/sysdeps/mach/hurd/bits/libc-tsd.h
index 56393e930d..926dd1fcc1 100644
--- a/sysdeps/mach/hurd/bits/libc-tsd.h
+++ b/sysdeps/mach/hurd/bits/libc-tsd.h
@@ -1,5 +1,5 @@
/* libc-internal interface for thread-specific data. Hurd version.
- Copyright (C) 1998,2002 Free Software Foundation, Inc.
+ Copyright (C) 1998,2002,2008 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
@@ -22,13 +22,14 @@
#include <hurd/threadvar.h>
-#define __libc_tsd_define(CLASS, KEY) /* nothing, always have threadvars */
+#define __libc_tsd_define(CLASS, TYPE, KEY) /* nothing, always have threadvars */
-#define __libc_tsd_address(KEY) \
- ((void **) __hurd_threadvar_location (_HURD_THREADVAR_##KEY))
-
-#define __libc_tsd_get(KEY) (*__libc_tsd_address (KEY))
-#define __libc_tsd_set(KEY, VALUE) (*__libc_tsd_address (KEY) = (VALUE))
+#define __libc_tsd_address(TYPE, KEY) \
+ ((TYPE *) __hurd_threadvar_location (_HURD_THREADVAR_##KEY))
+#define __libc_tsd_get(TYPE, KEY) \
+ (*__libc_tsd_address (TYPE, KEY))
+#define __libc_tsd_set(TYPE, KEY, VALUE) \
+ (*__libc_tsd_address (TYPE, KEY) = (VALUE))
#endif /* bits/libc-tsd.h */
diff --git a/sysdeps/mach/hurd/malloc-machine.h b/sysdeps/mach/hurd/malloc-machine.h
index 70aaf11b87..e6078f60dc 100644
--- a/sysdeps/mach/hurd/malloc-machine.h
+++ b/sysdeps/mach/hurd/malloc-machine.h
@@ -1,6 +1,6 @@
/* Basic platform-independent macro definitions for mutexes,
thread-specific data and parameters for malloc.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2008 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
@@ -58,10 +58,10 @@
#include <bits/libc-tsd.h>
typedef int tsd_key_t[1]; /* no key data structure, libc magic does it */
-__libc_tsd_define (static, MALLOC) /* declaration/common definition */
+__libc_tsd_define (static, void *, MALLOC) /* declaration/common definition */
#define tsd_key_create(key, destr) ((void) (key))
-#define tsd_setspecific(key, data) __libc_tsd_set (MALLOC, (data))
-#define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (MALLOC))
+#define tsd_setspecific(key, data) __libc_tsd_set (void *, MALLOC, (data))
+#define tsd_getspecific(key, vptr) ((vptr) = __libc_tsd_get (void *, MALLOC))
#include <sysdeps/generic/malloc-machine.h>
diff --git a/sysdeps/s390/bits/atomic.h b/sysdeps/s390/bits/atomic.h
index aa00473413..95d0390d09 100644
--- a/sysdeps/s390/bits/atomic.h
+++ b/sysdeps/s390/bits/atomic.h
@@ -56,7 +56,7 @@ typedef uintmax_t uatomic_max_t;
__typeof (*mem) __archold = (oldval); \
__asm __volatile ("cs %0,%2,%1" \
: "+d" (__archold), "=Q" (*__archmem) \
- : "d" (newval), "m" (*__archmem) : "cc" ); \
+ : "d" (newval), "m" (*__archmem) : "cc", "memory" ); \
__archold; })
#ifdef __s390x__
@@ -65,7 +65,7 @@ typedef uintmax_t uatomic_max_t;
__typeof (*mem) __archold = (oldval); \
__asm __volatile ("csg %0,%2,%1" \
: "+d" (__archold), "=Q" (*__archmem) \
- : "d" ((long) (newval)), "m" (*__archmem) : "cc" ); \
+ : "d" ((long) (newval)), "m" (*__archmem) : "cc", "memory" ); \
__archold; })
#else
/* For 31 bit we do not really need 64-bit compare-and-exchange. We can
diff --git a/sysdeps/s390/s390-64/dl-trampoline.S b/sysdeps/s390/s390-64/dl-trampoline.S
index 8093582163..72043c9779 100644
--- a/sysdeps/s390/s390-64/dl-trampoline.S
+++ b/sysdeps/s390/s390-64/dl-trampoline.S
@@ -91,7 +91,7 @@ _dl_runtime_profile:
ld %f4,120(%r12)
ld %f6,128(%r12)
basr %r14,%r1 # call resolved function
-0: lr %r15,%r12 # remove stack frame
+0: lgr %r15,%r12 # remove stack frame
cfi_def_cfa_register (15)
lg %r14,32(%r15) # restore registers
lg %r12,24(%r15)
diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure
new file mode 100644
index 0000000000..bd699bbccb
--- /dev/null
+++ b/sysdeps/x86_64/configure
@@ -0,0 +1,3 @@
+# The i386 fragment also works for x86_64.
+
+. $srcdir/sysdeps/i386/configure