--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian....@packages.debian.org
Usertags: pu
Dear Release Team,
I believe that glibc version 2.19-17 should migrate to testing despite
the freeze as it contains bug fixes important for Jessie:
- It fixes a segmentation fault in ldconfig when the aux cache is
corrupted, causing postinst scripts to fail (RC bug #779442).
- It adds a versioned depency to libc-bin on locales, so that
apt/aptitude can't decide to configure locales before libc-bin, as it
causes some locales to fail to be generated (bug #779442).
You will find the debdiff below. Please note that the following patches
touches hurd specific files, which are not even compiled on other
architectures:
- hurd-i386/cvs-libpthread-dlopen.diff
- hurd-i386/cvs-libpthread-libc-lockP.diff
- hurd-i386/cvs-libpthread-libc-lockP2.diff
Thanks,
Aurelien
diff -Nru glibc-2.19/debian/changelog glibc-2.19/debian/changelog
--- glibc-2.19/debian/changelog 2015-02-08 15:54:41.000000000 +0100
+++ glibc-2.19/debian/changelog 2015-03-14 10:17:57.000000000 +0100
@@ -1,3 +1,34 @@
+glibc (2.19-17) unstable; urgency=medium
+
+ [ Adam Conrad ]
+ * debian/rules.d/debhelper.mk: Unconditionally create tmp.substvars.
+ Closes: #780431.
+
+ -- Aurelien Jarno <aure...@debian.org> Sat, 14 Mar 2015 10:17:56 +0100
+
+glibc (2.19-16) unstable; urgency=medium
+
+ [ Samuel Thibault ]
+ * patches/hurd-i386/cvs-libpthread-dlopen.diff: New patch to allow
+ libpthread.so to be dynamically loaded from a dlopened library.
+ * patches/hurd-i386/cvs-libpthread-libc-lockP{,2}.diff: New patch to
+ dynamically call pthread functions from libc.
+
+ [ Aurelien Jarno ]
+ * We have a transition mechanism for the locales, as the Debian archive
+ used to expose arch:all packages on all architectures even when the
+ corresponding arch:any package is not available yet. This has been
+ fixed long time ago, the transition mechanism has not been used
+ correctly for a lot of time and has been broken by the split out of
+ libc-bin. The breakage has been partially fixed by the "Breaks: locales
+ (<< 2.19)" added to libc6. It's now time to add the missing "Depends:
+ libc-bin (>> 2.19)" to locales and remove the transition mechanism.
+ Closes: #583088, #779442
+ * patches/any/cvs-ldconfig-aux-cache.diff: new patch from upstream to
+ ignore corrupted aux-cache instead of segfaulting. Closes: #759530.
+
+ -- Aurelien Jarno <aure...@debian.org> Thu, 12 Mar 2015 22:00:40 +0100
+
glibc (2.19-15) unstable; urgency=medium
[ Aurelien Jarno ]
diff -Nru glibc-2.19/debian/control glibc-2.19/debian/control
--- glibc-2.19/debian/control 2015-01-20 00:53:06.000000000 +0100
+++ glibc-2.19/debian/control 2015-03-08 22:29:32.000000000 +0100
@@ -83,7 +83,7 @@
Architecture: all
Section: localization
Priority: standard
-Depends: ${locale:Depends}, ${misc:Depends}, debconf | debconf-2.0
+Depends: libc-bin (>> 2.19), ${misc:Depends}, debconf | debconf-2.0
Conflicts: base-config, belocs-locales-bin, belocs-locales-data
Replaces: base-config, lliurex-belocs-locales-data, manpages-fr-extra (<<
20141022)
Build-Profiles: <!stage1>
diff -Nru glibc-2.19/debian/control.in/main glibc-2.19/debian/control.in/main
--- glibc-2.19/debian/control.in/main 2014-12-11 12:56:06.000000000 +0100
+++ glibc-2.19/debian/control.in/main 2015-03-08 22:29:32.000000000 +0100
@@ -83,7 +83,7 @@
Architecture: all
Section: localization
Priority: standard
-Depends: ${locale:Depends}, ${misc:Depends}, debconf | debconf-2.0
+Depends: libc-bin (>> 2.19), ${misc:Depends}, debconf | debconf-2.0
Conflicts: base-config, belocs-locales-bin, belocs-locales-data
Replaces: base-config, lliurex-belocs-locales-data, manpages-fr-extra (<<
20141022)
Build-Profiles: <!stage1>
diff -Nru glibc-2.19/debian/locales-depver glibc-2.19/debian/locales-depver
--- glibc-2.19/debian/locales-depver 2014-02-16 04:14:12.000000000 +0100
+++ glibc-2.19/debian/locales-depver 1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-# When glibc is uploaded into unstable, the locales package is immediately
-# available because it is arch:all. But libc binary packages are processed
-# by autobuilders and become available later.
-#
-# If compiling locales depend on a given version of localedef (for instance
-# when ISO codes are updated), the idea is to first bump LOCALES_COMPAT_VER
and
-# make an upload without changing locales. When this version is available on
-# all architectures in unstable, locales can be modified and LOCALES_DEP_VER
-# is bumped too.
-#
-# LOCALES_COMPAT_VER must always contain two values during the transition
phase
-# so that dependencies in unstable can always be satisfied, and
-# LOCALES_DEP_VER point to the highest value of LOCALES_COMPAT_VER when
-# packages are available for all architectures in unstable.
-
-LOCALES_DEP_VER = 2.19-1
-LOCALES_COMPAT_VER = 2.19-1
-
-# Previous versions:
-# 2.7-1: glibc 2.7
-# 2.8-1: glibc 2.8
-# 2.9-1: eglibc 2.9
-# 2.10-1: eglibc 2.10
-# 2.11-1: eglibc 2.11
-# 2.13-1: eglibc 2.13
-# 2.15-1: eglibc 2.15
-# 2.16-1: eglibc 2.16
-# 2.17-1: eglibc 2.17
-# 2.18-1: eglibc 2.18
-# 2.19-1: eglibc 2.19
diff -Nru glibc-2.19/debian/patches/any/cvs-ldconfig-aux-cache.diff
glibc-2.19/debian/patches/any/cvs-ldconfig-aux-cache.diff
--- glibc-2.19/debian/patches/any/cvs-ldconfig-aux-cache.diff 1970-01-01
01:00:00.000000000 +0100
+++ glibc-2.19/debian/patches/any/cvs-ldconfig-aux-cache.diff 2015-03-12
20:09:12.000000000 +0100
@@ -0,0 +1,20 @@
+2015-03-11 Aurelien Jarno <aurel...@aurel32.net>
+
+ [BZ #18093]
+ * elf/cache.c (load_aux_cache): Regenerate the cache if it has
+ the wrong size.
+
+diff --git a/elf/cache.c b/elf/cache.c
+--- a/elf/cache.c
++++ b/elf/cache.c
+@@ -698,7 +698,9 @@ load_aux_cache (const char *aux_cache_name)
+ if (aux_cache == MAP_FAILED
+ || aux_cache_size < sizeof (struct aux_cache_file)
+ || memcmp (aux_cache->magic, AUX_CACHEMAGIC, sizeof AUX_CACHEMAGIC - 1)
+- || aux_cache->nlibs >= aux_cache_size)
++ || aux_cache_size != (sizeof(struct aux_cache_file) +
++ aux_cache->nlibs * sizeof(struct
aux_cache_file_entry) +
++ aux_cache->len_strings))
+ {
+ close (fd);
+ init_aux_cache ();
diff -Nru glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-dlopen.diff
glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-dlopen.diff
--- glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-dlopen.diff
1970-01-01 01:00:00.000000000 +0100
+++ glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-dlopen.diff
2015-03-08 17:58:05.000000000 +0100
@@ -0,0 +1,497 @@
+commit 3410beff94994edf971dd634c56156d70c7cf215
+Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
+Date: Sat Feb 28 21:41:47 2015 +0100
+
+ Allow libpthread.so to dynamically loaded from a dlopened library
+
+ * pthread/pt-internal.h: Include <ldsodefs.h>
+ (_dl_allocate_tls, _dl_deallocate_tls): Remove declarations.
+ * sysdeps/mach/hurd/pt-sysdep.c (init_routine): Rename into _init_routine,
+ add `stack' parameter, return if __pthread_threads is already initialized,
+ pass stack address to __pthread_create_internal if any.
+ (init_routine): New function, calls init_routine with 0
+ (dynamic_init_routine): New constructor function, calls init_routine with
+ __libc_stack_end.
+
+Index: glibc-2.19/libpthread/pthread/pt-internal.h
+===================================================================
+--- glibc-2.19.orig/libpthread/pthread/pt-internal.h
++++ glibc-2.19/libpthread/pthread/pt-internal.h
+@@ -35,6 +35,10 @@
+ #include <pt-sysdep.h>
+ #include <pt-machdep.h>
+
++#ifdef IS_IN_libpthread
++# include <ldsodefs.h>
++#endif
++
+ /* Thread state. */
+ enum pthread_state
+ {
+@@ -323,17 +327,4 @@ const struct __pthread_rwlockattr __pthr
+ /* Default condition attributes. */
+ const struct __pthread_condattr __pthread_default_condattr;
+
+-
+-#ifdef ENABLE_TLS
+-
+-/* From glibc. */
+-
+-/* Dynamic linker TLS allocation. */
+-extern void *_dl_allocate_tls(void *);
+-
+-/* Dynamic linker TLS deallocation. */
+-extern void _dl_deallocate_tls(void *, int);
+-
+-#endif /* ENABLE_TLS */
+-
+ #endif /* pt-internal.h */
+Index: glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.c
+===================================================================
+--- glibc-2.19.orig/libpthread/sysdeps/mach/hurd/pt-sysdep.c
++++ glibc-2.19/libpthread/sysdeps/mach/hurd/pt-sysdep.c
+@@ -39,16 +39,31 @@ void *(*_cthread_init_routine)(void) = &
+ should return a new stack pointer for the main thread. The caller
+ will switch to this new stack before doing anything serious. */
+ static void *
+-init_routine (void)
++_init_routine (void *stack)
+ {
+ struct __pthread *thread;
+ int err;
++ pthread_attr_t attr, *attrp = 0;
++
++ if (__pthread_threads)
++ /* Already initialized */
++ return 0;
+
+ /* Initialize the library. */
+ __pthread_init ();
+
++ if (stack)
++ {
++ /* We are getting initialized due to dlopening a library using
libpthread
++ while the main program was not linked against libpthread. */
++ /* Avoid allocating another stack */
++ attrp = &attr;
++ pthread_attr_init(attrp);
++ pthread_attr_setstack(attrp, __libc_stack_end, __vm_page_size);
++ }
++
+ /* Create the pthread structure for the main thread (i.e. us). */
+- err = __pthread_create_internal (&thread, 0, 0, 0);
++ err = __pthread_create_internal (&thread, attrp, 0, 0);
+ assert_perror (err);
+
+ /* XXX The caller copies the command line arguments and the environment
+@@ -68,3 +83,16 @@ init_routine (void)
+
+ return thread->mcontext.sp;
+ }
++
++static void *
++init_routine (void)
++{
++ return _init_routine (0);
++}
++
++#ifdef SHARED
++__attribute__ ((constructor)) static void dynamic_init_routine(void)
++{
++ _init_routine (__libc_stack_end);
++}
++#endif
+
+commit 8dc97a5e7ca62b98aba02883724fd58a91f9a32e
+Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
+Date: Sun Mar 1 20:23:52 2015 +0100
+
+ Forward lockfile calls from libc to dynamically loaded libpthread
+
+ * forward.c: (__libc_pthread_functions_init): Add variable
+ (FORWARD2): Use __libc_pthread_functions_init instead of testing
+ __libc_pthread_functions.ptr_##name value.
+ (FORWARD_NORETURN): Add macro.
+ (pthread_exit): Use FORWARD_NORETURN instead of FORWARD2.
+ * libc_pthread_init.c (__libc_pthread_init): Set
+ __libc_pthread_functions_init to 1.
+ * pthread/pthread-functions.h (__pthread_once, __pthread_rwlock_rdlock,
+ __pthread_rwlock_wrlock, __pthread_rwlock_unlock, __pthread_key_create,
+ __pthread_getspecific, __pthread_setspecific, _cthreads_flockfile,
+ _cthreads_funlockfile, _cthreads_ftrylockfile): Add prototypes.
+ (pthread_functions): Add ptr_pthread_once, ptr_pthread_rwlock_rdlock,
+ ptr_pthread_rwlock_wrlock, ptr_pthread_rwlock_unlock,
+ ptr_pthread_key_create, ptr_pthread_getspecific, ptr_pthread_setspecific,
+ ptr__IO_flockfile, ptr__IO_funlockfile, ptr__IO_ftrylockfile.
+ (__libc_pthread_functions_init): Add variable declaration.
+ (PTHFCT_CALL): Add macro.
+ * pthread/pt-initialize.c (pthread_functions): Initialize ptr_pthread_once,
+ ptr_pthread_rwlock_rdlock, ptr_pthread_rwlock_wrlock,
pthread_rwlock_unlock,
+ ptr_ptr_pthread_key_create, pthread_getspecific, ptr_pthread_setspecific,
+ ptr_ptr__IO_flockfile, _IO_funlockfile, ptr__IO_ftrylockfile.
+ * sysdeps/generic/pt-once.c (pthread_once): Rename to __pthread_once
+ (pthread_once): Add strong alias.
+ * sysdeps/generic/pt-rwlock-rdlock.c (pthread_rwlock_rdlock): Rename to
+ __pthread_rwlock_rdlock
+ (pthread_rwlock_rdlock): Add strong alias.
+ * sysdeps/generic/pt-rwlock-wrlock.c (pthread_rwlock_wrlock): Rename to
+ __pthread_rwlock_wrlock
+ (pthread_rwlock_wrlock): Add strong alias.
+ * sysdeps/generic/pt-rwlock-unlock.c (pthread_rwlock_unlock): Rename to
+ __pthread_rwlock_unlock
+ (pthread_rwlock_unlock): Add strong alias.
+ * sysdeps/generic/pt-getspecific.c (pthread_getspecific): Rename to
+ __pthread_getspecific
+ (pthread_getspecific): Add strong alias.
+ * sysdeps/generic/pt-setspecific.c (pthread_setspecific): Rename to
+ __pthread_setspecific
+ (pthread_setspecific): Add strong alias.
+ * sysdeps/pthread/flockfile.c: Add file.
+ * sysdeps/pthread/ftrylockfile.c: Add file.
+ * sysdeps/pthread/funlockfile.c: Add file.
+
+diff --git a/libpthread/forward.c b/libpthread/forward.c
+index 9e940fb..994106e 100644
+--- a/libpthread/forward.c
++++ b/libpthread/forward.c
+@@ -25,16 +25,28 @@
+
+ /* Pointers to the libc functions. */
+ struct pthread_functions __libc_pthread_functions attribute_hidden;
++int __libc_pthread_functions_init attribute_hidden;
+
+
+ # define FORWARD2(name, rettype, decl, params, defaction) \
+ rettype
\
+ name decl \
+ { \
+- if (__libc_pthread_functions.ptr_##name == NULL) \
++ if (!__libc_pthread_functions_init) \
+ defaction;
\
+ \
+- return __libc_pthread_functions.ptr_##name params; \
++ return PTHFCT_CALL (ptr_##name, params); \
++}
++
++/* Same as FORWARD2, only without return. */
++# define FORWARD_NORETURN(name, rettype, decl, params, defaction) \
++rettype
\
++name decl \
++{ \
++ if (!__libc_pthread_functions_init) \
++ defaction;
\
++ \
++ PTHFCT_CALL (ptr_##name, params); \
+ }
+
+ # define FORWARD(name, decl, params, defretval) \
+@@ -94,7 +106,7 @@ FORWARD (pthread_equal, (pthread_t thread1, pthread_t
thread2),
+
+
+ /* Use an alias to avoid warning, as pthread_exit is declared noreturn. */
+-FORWARD2 (pthread_exit, void, (void *retval), (retval), exit (EXIT_SUCCESS))
++FORWARD_NORETURN (pthread_exit, void, (void *retval), (retval), exit
(EXIT_SUCCESS))
+
+
+ FORWARD (pthread_getschedparam,
+diff --git a/libpthread/libc_pthread_init.c b/libpthread/libc_pthread_init.c
+index e6c8b9f..bc808cb 100644
+--- a/libpthread/libc_pthread_init.c
++++ b/libpthread/libc_pthread_init.c
+@@ -30,5 +30,6 @@ __libc_pthread_init (functions)
+ can be done with one memory access instead of two. */
+ memcpy (&__libc_pthread_functions, functions,
+ sizeof (__libc_pthread_functions));
++ __libc_pthread_functions_init = 1;
+ #endif
+ }
+diff --git a/libpthread/pthread/pt-initialize.c
b/libpthread/pthread/pt-initialize.c
+index a99cc59..aa3cf82 100644
+--- a/libpthread/pthread/pt-initialize.c
++++ b/libpthread/pthread/pt-initialize.c
+@@ -64,6 +64,16 @@ static const struct pthread_functions pthread_functions =
+ .ptr_pthread_setcancelstate = __pthread_setcancelstate,
+ .ptr_pthread_setcanceltype = __pthread_setcanceltype,
+ .ptr___pthread_get_cleanup_stack = __pthread_get_cleanup_stack,
++ .ptr_pthread_once = __pthread_once,
++ .ptr_pthread_rwlock_rdlock = __pthread_rwlock_rdlock,
++ .ptr_pthread_rwlock_wrlock = __pthread_rwlock_wrlock,
++ .ptr_pthread_rwlock_unlock = __pthread_rwlock_unlock,
++ .ptr_pthread_key_create = __pthread_key_create,
++ .ptr_pthread_getspecific = __pthread_getspecific,
++ .ptr_pthread_setspecific = __pthread_setspecific,
++ .ptr__IO_flockfile = _cthreads_flockfile,
++ .ptr__IO_funlockfile = _cthreads_funlockfile,
++ .ptr__IO_ftrylockfile = _cthreads_ftrylockfile,
+ };
+ #endif /* IS_IN_libpthread */
+
+diff --git a/libpthread/pthread/pthread-functions.h
b/libpthread/pthread/pthread-functions.h
+index c0ba858..d236822 100644
+--- a/libpthread/pthread/pthread-functions.h
++++ b/libpthread/pthread/pthread-functions.h
+@@ -61,6 +61,17 @@ pthread_t __pthread_self (void);
+ int __pthread_setcancelstate (int, int *);
+ int __pthread_setcanceltype (int, int *);
+ struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void);
++int __pthread_once (pthread_once_t *, void (*) (void));
++int __pthread_rwlock_rdlock (pthread_rwlock_t *);
++int __pthread_rwlock_wrlock (pthread_rwlock_t *);
++int __pthread_rwlock_unlock (pthread_rwlock_t *);
++int __pthread_key_create (pthread_key_t *, void (*) (void *));
++void *__pthread_getspecific (pthread_key_t);
++int __pthread_setspecific (pthread_key_t, const void *);
++
++void _cthreads_flockfile (FILE *);
++void _cthreads_funlockfile (FILE *);
++int _cthreads_ftrylockfile (FILE *);
+
+ /* Data type shared with libc. The libc uses it to pass on calls to
+ the thread functions. Wine pokes directly into this structure,
+@@ -106,11 +117,25 @@ struct pthread_functions
+ int (*ptr_pthread_setcancelstate) (int, int *);
+ int (*ptr_pthread_setcanceltype) (int, int *);
+ struct __pthread_cancelation_handler **(*ptr___pthread_get_cleanup_stack)
(void);
++ int (*ptr_pthread_once) (pthread_once_t *, void (*) (void));
++ int (*ptr_pthread_rwlock_rdlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_rwlock_wrlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_rwlock_unlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_key_create) (pthread_key_t *, void (*) (void *));
++ void *(*ptr_pthread_getspecific) (pthread_key_t);
++ int (*ptr_pthread_setspecific) (pthread_key_t, const void *);
++ void (*ptr__IO_flockfile) (FILE *);
++ void (*ptr__IO_funlockfile) (FILE *);
++ int (*ptr__IO_ftrylockfile) (FILE *);
+ };
+
+ /* Variable in libc.so. */
+ extern struct pthread_functions __libc_pthread_functions attribute_hidden;
++extern int __libc_pthread_functions_init attribute_hidden;
+
+ void __libc_pthread_init (const struct pthread_functions *functions);
+
++# define PTHFCT_CALL(fct, params) \
++ __libc_pthread_functions.fct params
++
+ #endif /* pthread-functions.h */
+diff --git a/libpthread/sysdeps/generic/pt-once.c
b/libpthread/sysdeps/generic/pt-once.c
+index 5be5e48..d9f4733 100644
+--- a/libpthread/sysdeps/generic/pt-once.c
++++ b/libpthread/sysdeps/generic/pt-once.c
+@@ -23,7 +23,7 @@
+ #include <pt-internal.h>
+
+ int
+-pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
++__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+ {
+ if (once_control->run == 0)
+ {
+@@ -41,3 +41,4 @@ pthread_once (pthread_once_t *once_control, void
(*init_routine) (void))
+
+ return 0;
+ }
++strong_alias (__pthread_once, pthread_once);
+diff --git a/libpthread/sysdeps/generic/pt-rwlock-rdlock.c
b/libpthread/sysdeps/generic/pt-rwlock-rdlock.c
+index 480cf48..6eca601 100644
+--- a/libpthread/sysdeps/generic/pt-rwlock-rdlock.c
++++ b/libpthread/sysdeps/generic/pt-rwlock-rdlock.c
+@@ -26,7 +26,8 @@ extern int __pthread_rwlock_timedrdlock_internal (struct
__pthread_rwlock *rwloc
+
+ /* Acquire RWLOCK for reading, block if we can't get it. */
+ int
+-pthread_rwlock_rdlock (struct __pthread_rwlock *rwlock)
++__pthread_rwlock_rdlock (struct __pthread_rwlock *rwlock)
+ {
+ return __pthread_rwlock_timedrdlock_internal (rwlock, 0);
+ }
++strong_alias (__pthread_rwlock_rdlock, pthread_rwlock_rdlock);
+diff --git a/libpthread/sysdeps/generic/pt-rwlock-unlock.c
b/libpthread/sysdeps/generic/pt-rwlock-unlock.c
+index dcf1d3e..b45ad23 100644
+--- a/libpthread/sysdeps/generic/pt-rwlock-unlock.c
++++ b/libpthread/sysdeps/generic/pt-rwlock-unlock.c
+@@ -25,7 +25,7 @@
+ are no threads waiting for a write lock, rescheduling the reader
+ threads. */
+ int
+-pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
++__pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
+ {
+ struct __pthread *wakeup;
+
+@@ -96,3 +96,4 @@ pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
+ __pthread_spin_unlock (&rwlock->__lock);
+ return 0;
+ }
++strong_alias (__pthread_rwlock_unlock, pthread_rwlock_unlock);
+diff --git a/libpthread/sysdeps/generic/pt-rwlock-wrlock.c
b/libpthread/sysdeps/generic/pt-rwlock-wrlock.c
+index be85b90..68254d1 100644
+--- a/libpthread/sysdeps/generic/pt-rwlock-wrlock.c
++++ b/libpthread/sysdeps/generic/pt-rwlock-wrlock.c
+@@ -28,7 +28,8 @@ extern int __pthread_rwlock_timedwrlock_internal (struct
__pthread_rwlock *rwloc
+
+ /* Acquire RWLOCK for writing. */
+ int
+-pthread_rwlock_wrlock (struct __pthread_rwlock *rwlock)
++__pthread_rwlock_wrlock (struct __pthread_rwlock *rwlock)
+ {
+ return __pthread_rwlock_timedwrlock_internal (rwlock, 0);
+ }
++strong_alias (__pthread_rwlock_wrlock, pthread_rwlock_wrlock);
+diff --git a/libpthread/sysdeps/hurd/pt-getspecific.c
b/libpthread/sysdeps/hurd/pt-getspecific.c
+index 71ec63c..8a01470 100644
+--- a/libpthread/sysdeps/hurd/pt-getspecific.c
++++ b/libpthread/sysdeps/hurd/pt-getspecific.c
+@@ -23,7 +23,7 @@
+ #include <pt-internal.h>
+
+ void *
+-pthread_getspecific (pthread_key_t key)
++__pthread_getspecific (pthread_key_t key)
+ {
+ struct __pthread *self;
+
+@@ -37,3 +37,4 @@ pthread_getspecific (pthread_key_t key)
+
+ return hurd_ihash_find (self->thread_specifics, key);
+ }
++strong_alias (__pthread_getspecific, pthread_getspecific);
+diff --git a/libpthread/sysdeps/hurd/pt-setspecific.c
b/libpthread/sysdeps/hurd/pt-setspecific.c
+index d0b7302..b3976cc 100644
+--- a/libpthread/sysdeps/hurd/pt-setspecific.c
++++ b/libpthread/sysdeps/hurd/pt-setspecific.c
+@@ -23,7 +23,7 @@
+ #include <pt-internal.h>
+
+ int
+-pthread_setspecific (pthread_key_t key, const void *value)
++__pthread_setspecific (pthread_key_t key, const void *value)
+ {
+ error_t err;
+ struct __pthread *self = _pthread_self ();
+@@ -45,3 +45,4 @@ pthread_setspecific (pthread_key_t key, const void *value)
+
+ return 0;
+ }
++strong_alias (__pthread_setspecific, pthread_setspecific);
+diff --git a/libpthread/sysdeps/pthread/flockfile.c
b/libpthread/sysdeps/pthread/flockfile.c
+new file mode 100644
+index 0000000..bddd46c
+--- /dev/null
++++ b/libpthread/sysdeps/pthread/flockfile.c
+@@ -0,0 +1,33 @@
++/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drep...@redhat.com>, 2002.
++
++ 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, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <stdio.h>
++#include <libio.h>
++#include <bits/libc-lock.h>
++
++
++void
++__flockfile (stream)
++ FILE *stream;
++{
++#ifdef SHARED
++ __libc_ptf_call (_IO_flockfile, (stream), 0);
++#endif
++}
++weak_alias (__flockfile, _IO_flockfile)
++weak_alias (__flockfile, flockfile)
+diff --git a/libpthread/sysdeps/pthread/ftrylockfile.c
b/libpthread/sysdeps/pthread/ftrylockfile.c
+new file mode 100644
+index 0000000..7aafbe9
+--- /dev/null
++++ b/libpthread/sysdeps/pthread/ftrylockfile.c
+@@ -0,0 +1,36 @@
++/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drep...@redhat.com>, 2002.
++
++ 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, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <errno.h>
++#include <pthread.h>
++#include <stdio.h>
++#include <bits/stdio-lock.h>
++
++
++int
++__ftrylockfile (stream)
++ FILE *stream;
++{
++#ifdef SHARED
++ return __libc_ptf_call (_IO_ftrylockfile, (stream), 0);
++#else
++ return 0;
++#endif
++}
++weak_alias (__ftrylockfile, _IO_ftrylockfile)
++weak_alias (__ftrylockfile, ftrylockfile)
+diff --git a/libpthread/sysdeps/pthread/funlockfile.c
b/libpthread/sysdeps/pthread/funlockfile.c
+new file mode 100644
+index 0000000..59fa40e
+--- /dev/null
++++ b/libpthread/sysdeps/pthread/funlockfile.c
+@@ -0,0 +1,34 @@
++/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drep...@redhat.com>, 2002.
++
++ 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, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <pthread.h>
++#include <stdio.h>
++#include <libio.h>
++#include <bits/stdio-lock.h>
++
++
++void
++__funlockfile (stream)
++ FILE *stream;
++{
++#ifdef SHARED
++ __libc_ptf_call (_IO_funlockfile, (stream), 0);
++#endif
++}
++weak_alias (__funlockfile, _IO_funlockfile)
++weak_alias (__funlockfile, funlockfile)
diff -Nru glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
--- glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
1970-01-01 01:00:00.000000000 +0100
+++ glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
2015-03-08 12:01:33.000000000 +0100
@@ -0,0 +1,468 @@
+commit 988f0e4cbda1673dfaa47051b8a64d90a89ea2ce
+Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
+Date: Sun Mar 8 11:22:19 2015 +0100
+
+ Move pthread-specific lock definitions and declarations to libpthread
+
+ * sysdeps/pthread/bits/libc-lockP.h: New file
+ * pthread/pthread-functions.h: Move to...
+ * sysdeps/pthread/pthread-functions.h: ... here.
+
+diff --git a/libpthread/pthread/pthread-functions.h
b/libpthread/pthread/pthread-functions.h
+deleted file mode 100644
+index d236822..0000000
+--- a/libpthread/pthread/pthread-functions.h
++++ /dev/null
+@@ -1,141 +0,0 @@
+-/* Copyright (C) 2003, 2012 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Ulrich Drepper <drep...@redhat.com>, 2003.
+-
+- 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. */
+-
+-#ifndef _PTHREAD_FUNCTIONS_H
+-#define _PTHREAD_FUNCTIONS_H 1
+-
+-#include <pthread.h>
+-
+-int __pthread_attr_destroy (pthread_attr_t *);
+-int __pthread_attr_init (pthread_attr_t *);
+-int __pthread_attr_getdetachstate (const pthread_attr_t *, int *);
+-int __pthread_attr_setdetachstate (pthread_attr_t *, int);
+-int __pthread_attr_getinheritsched (const pthread_attr_t *, int *);
+-int __pthread_attr_setinheritsched (pthread_attr_t *, int);
+-int __pthread_attr_getschedparam (const pthread_attr_t *,
+- struct sched_param *);
+-int __pthread_attr_setschedparam (pthread_attr_t *,
+- const struct sched_param *);
+-int __pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
+-int __pthread_attr_setschedpolicy (pthread_attr_t *, int);
+-int __pthread_attr_getscope (const pthread_attr_t *, int *);
+-int __pthread_attr_setscope (pthread_attr_t *, int);
+-int __pthread_condattr_destroy (pthread_condattr_t *);
+-int __pthread_condattr_init (pthread_condattr_t *);
+-int __pthread_cond_broadcast (pthread_cond_t *);
+-int __pthread_cond_destroy (pthread_cond_t *);
+-int __pthread_cond_init (pthread_cond_t *,
+- const pthread_condattr_t *);
+-int __pthread_cond_signal (pthread_cond_t *);
+-int __pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
+-int __pthread_cond_timedwait (pthread_cond_t *, pthread_mutex_t *,
+- const struct timespec *);
+-int __pthread_equal (pthread_t, pthread_t);
+-void __pthread_exit (void *);
+-int __pthread_getschedparam (pthread_t, int *, struct sched_param *);
+-int __pthread_setschedparam (pthread_t, int,
+- const struct sched_param *);
+-int _pthread_mutex_destroy (pthread_mutex_t *);
+-int _pthread_mutex_init (pthread_mutex_t *,
+- const pthread_mutexattr_t *);
+-int __pthread_mutex_lock (pthread_mutex_t *);
+-int __pthread_mutex_trylock (pthread_mutex_t *);
+-int __pthread_mutex_unlock (pthread_mutex_t *);
+-pthread_t __pthread_self (void);
+-int __pthread_setcancelstate (int, int *);
+-int __pthread_setcanceltype (int, int *);
+-struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void);
+-int __pthread_once (pthread_once_t *, void (*) (void));
+-int __pthread_rwlock_rdlock (pthread_rwlock_t *);
+-int __pthread_rwlock_wrlock (pthread_rwlock_t *);
+-int __pthread_rwlock_unlock (pthread_rwlock_t *);
+-int __pthread_key_create (pthread_key_t *, void (*) (void *));
+-void *__pthread_getspecific (pthread_key_t);
+-int __pthread_setspecific (pthread_key_t, const void *);
+-
+-void _cthreads_flockfile (FILE *);
+-void _cthreads_funlockfile (FILE *);
+-int _cthreads_ftrylockfile (FILE *);
+-
+-/* Data type shared with libc. The libc uses it to pass on calls to
+- the thread functions. Wine pokes directly into this structure,
+- so if possible avoid breaking it and append new hooks to the end. */
+-struct pthread_functions
+-{
+- int (*ptr_pthread_attr_destroy) (pthread_attr_t *);
+- int (*ptr_pthread_attr_init) (pthread_attr_t *);
+- int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *);
+- int (*ptr_pthread_attr_setdetachstate) (pthread_attr_t *, int);
+- int (*ptr_pthread_attr_getinheritsched) (const pthread_attr_t *, int *);
+- int (*ptr_pthread_attr_setinheritsched) (pthread_attr_t *, int);
+- int (*ptr_pthread_attr_getschedparam) (const pthread_attr_t *,
+- struct sched_param *);
+- int (*ptr_pthread_attr_setschedparam) (pthread_attr_t *,
+- const struct sched_param *);
+- int (*ptr_pthread_attr_getschedpolicy) (const pthread_attr_t *, int *);
+- int (*ptr_pthread_attr_setschedpolicy) (pthread_attr_t *, int);
+- int (*ptr_pthread_attr_getscope) (const pthread_attr_t *, int *);
+- int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int);
+- int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
+- int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
+- int (*ptr_pthread_cond_broadcast) (pthread_cond_t *);
+- int (*ptr_pthread_cond_destroy) (pthread_cond_t *);
+- int (*ptr_pthread_cond_init) (pthread_cond_t *,
+- const pthread_condattr_t *);
+- int (*ptr_pthread_cond_signal) (pthread_cond_t *);
+- int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
+- int (*ptr_pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
+- const struct timespec *);
+- int (*ptr_pthread_equal) (pthread_t, pthread_t);
+- void (*ptr_pthread_exit) (void *);
+- int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *);
+- int (*ptr_pthread_setschedparam) (pthread_t, int,
+- const struct sched_param *);
+- int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
+- int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
+- const pthread_mutexattr_t *);
+- int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
+- int (*ptr_pthread_mutex_trylock) (pthread_mutex_t *);
+- int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
+- pthread_t (*ptr_pthread_self) (void);
+- int (*ptr_pthread_setcancelstate) (int, int *);
+- int (*ptr_pthread_setcanceltype) (int, int *);
+- struct __pthread_cancelation_handler **(*ptr___pthread_get_cleanup_stack)
(void);
+- int (*ptr_pthread_once) (pthread_once_t *, void (*) (void));
+- int (*ptr_pthread_rwlock_rdlock) (pthread_rwlock_t *);
+- int (*ptr_pthread_rwlock_wrlock) (pthread_rwlock_t *);
+- int (*ptr_pthread_rwlock_unlock) (pthread_rwlock_t *);
+- int (*ptr_pthread_key_create) (pthread_key_t *, void (*) (void *));
+- void *(*ptr_pthread_getspecific) (pthread_key_t);
+- int (*ptr_pthread_setspecific) (pthread_key_t, const void *);
+- void (*ptr__IO_flockfile) (FILE *);
+- void (*ptr__IO_funlockfile) (FILE *);
+- int (*ptr__IO_ftrylockfile) (FILE *);
+-};
+-
+-/* Variable in libc.so. */
+-extern struct pthread_functions __libc_pthread_functions attribute_hidden;
+-extern int __libc_pthread_functions_init attribute_hidden;
+-
+-void __libc_pthread_init (const struct pthread_functions *functions);
+-
+-# define PTHFCT_CALL(fct, params) \
+- __libc_pthread_functions.fct params
+-
+-#endif /* pthread-functions.h */
+diff --git a/libpthread/sysdeps/pthread/bits/libc-lockP.h
b/libpthread/sysdeps/pthread/bits/libc-lockP.h
+new file mode 100644
+index 0000000..65878f2
+--- /dev/null
++++ b/libpthread/sysdeps/pthread/bits/libc-lockP.h
+@@ -0,0 +1,158 @@
++/* Private libc-internal interface for mutex locks.
++ Copyright (C) 2015 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU 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; see the file COPYING.LIB. If
++ not, see <http://www.gnu.org/licenses/>. */
++
++#ifndef _BITS_LIBC_LOCKP_H
++#define _BITS_LIBC_LOCKP_H 1
++
++#include <pthread.h>
++#include <pthread-functions.h>
++
++/* If we check for a weakly referenced symbol and then perform a
++ normal jump to it te code generated for some platforms in case of
++ PIC is unnecessarily slow. What would happen is that the function
++ is first referenced as data and then it is called indirectly
++ through the PLT. We can make this a direct jump. */
++#ifdef __PIC__
++# define __libc_maybe_call(FUNC, ARGS, ELSE) \
++ (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \
++ _fn != NULL ? (*_fn) ARGS : ELSE; }))
++#else
++# define __libc_maybe_call(FUNC, ARGS, ELSE) \
++ (FUNC != NULL ? FUNC ARGS : ELSE)
++#endif
++
++/* Call thread functions through the function pointer table. */
++#if defined SHARED && !defined NOT_IN_libc
++# define PTFAVAIL(NAME) __libc_pthread_functions_init
++# define __libc_ptf_call(FUNC, ARGS, ELSE) \
++ (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)
++# define __libc_ptf_call_always(FUNC, ARGS) \
++ PTHFCT_CALL (ptr_##FUNC, ARGS)
++#else
++# define PTFAVAIL(NAME) (NAME != NULL)
++# define __libc_ptf_call(FUNC, ARGS, ELSE) \
++ __libc_maybe_call (FUNC, ARGS, ELSE)
++# define __libc_ptf_call_always(FUNC, ARGS) \
++ FUNC ARGS
++#endif
++
++/* Functions that are used by this file and are internal to the GNU C
++ library. */
++
++extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
++ const pthread_mutexattr_t *__mutex_attr);
++
++extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
++
++extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex);
++
++extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
++
++extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
++
++extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr);
++
++extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);
++
++extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr,
++ int __kind);
++
++extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock,
++ const pthread_rwlockattr_t *__attr);
++
++extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock);
++
++extern int __pthread_key_create (pthread_key_t *__key,
++ void (*__destr_function) (void *));
++
++extern int __pthread_setspecific (pthread_key_t __key,
++ const void *__pointer);
++
++extern void *__pthread_getspecific (pthread_key_t __key);
++
++extern int __pthread_once (pthread_once_t *__once_control,
++ void (*__init_routine) (void));
++
++extern int __pthread_atfork (void (*__prepare) (void),
++ void (*__parent) (void),
++ void (*__child) (void));
++
++
++
++/* Make the pthread functions weak so that we can elide them from
++ single-threaded processes. */
++#ifndef __NO_WEAK_PTHREAD_ALIASES
++# ifdef weak_extern
++weak_extern (__pthread_mutex_init)
++weak_extern (__pthread_mutex_destroy)
++weak_extern (__pthread_mutex_lock)
++weak_extern (__pthread_mutex_trylock)
++weak_extern (__pthread_mutex_unlock)
++weak_extern (__pthread_mutexattr_init)
++weak_extern (__pthread_mutexattr_destroy)
++weak_extern (__pthread_mutexattr_settype)
++weak_extern (__pthread_rwlock_init)
++weak_extern (__pthread_rwlock_destroy)
++weak_extern (__pthread_rwlock_rdlock)
++weak_extern (__pthread_rwlock_tryrdlock)
++weak_extern (__pthread_rwlock_wrlock)
++weak_extern (__pthread_rwlock_trywrlock)
++weak_extern (__pthread_rwlock_unlock)
++weak_extern (__pthread_key_create)
++weak_extern (__pthread_setspecific)
++weak_extern (__pthread_getspecific)
++weak_extern (__pthread_once)
++weak_extern (__pthread_initialize)
++weak_extern (__pthread_atfork)
++weak_extern (pthread_setcancelstate)
++# else
++# pragma weak __pthread_mutex_init
++# pragma weak __pthread_mutex_destroy
++# pragma weak __pthread_mutex_lock
++# pragma weak __pthread_mutex_trylock
++# pragma weak __pthread_mutex_unlock
++# pragma weak __pthread_mutexattr_init
++# pragma weak __pthread_mutexattr_destroy
++# pragma weak __pthread_mutexattr_settype
++# pragma weak __pthread_rwlock_destroy
++# pragma weak __pthread_rwlock_rdlock
++# pragma weak __pthread_rwlock_tryrdlock
++# pragma weak __pthread_rwlock_wrlock
++# pragma weak __pthread_rwlock_trywrlock
++# pragma weak __pthread_rwlock_unlock
++# pragma weak __pthread_key_create
++# pragma weak __pthread_setspecific
++# pragma weak __pthread_getspecific
++# pragma weak __pthread_once
++# pragma weak __pthread_initialize
++# pragma weak __pthread_atfork
++# pragma weak pthread_setcancelstate
++# endif
++#endif
++
++#endif /* bits/libc-lockP.h */
+diff --git a/libpthread/sysdeps/pthread/pthread-functions.h
b/libpthread/sysdeps/pthread/pthread-functions.h
+new file mode 100644
+index 0000000..d236822
+--- /dev/null
++++ b/libpthread/sysdeps/pthread/pthread-functions.h
+@@ -0,0 +1,141 @@
++/* Copyright (C) 2003, 2012 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drep...@redhat.com>, 2003.
++
++ 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. */
++
++#ifndef _PTHREAD_FUNCTIONS_H
++#define _PTHREAD_FUNCTIONS_H 1
++
++#include <pthread.h>
++
++int __pthread_attr_destroy (pthread_attr_t *);
++int __pthread_attr_init (pthread_attr_t *);
++int __pthread_attr_getdetachstate (const pthread_attr_t *, int *);
++int __pthread_attr_setdetachstate (pthread_attr_t *, int);
++int __pthread_attr_getinheritsched (const pthread_attr_t *, int *);
++int __pthread_attr_setinheritsched (pthread_attr_t *, int);
++int __pthread_attr_getschedparam (const pthread_attr_t *,
++ struct sched_param *);
++int __pthread_attr_setschedparam (pthread_attr_t *,
++ const struct sched_param *);
++int __pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
++int __pthread_attr_setschedpolicy (pthread_attr_t *, int);
++int __pthread_attr_getscope (const pthread_attr_t *, int *);
++int __pthread_attr_setscope (pthread_attr_t *, int);
++int __pthread_condattr_destroy (pthread_condattr_t *);
++int __pthread_condattr_init (pthread_condattr_t *);
++int __pthread_cond_broadcast (pthread_cond_t *);
++int __pthread_cond_destroy (pthread_cond_t *);
++int __pthread_cond_init (pthread_cond_t *,
++ const pthread_condattr_t *);
++int __pthread_cond_signal (pthread_cond_t *);
++int __pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
++int __pthread_cond_timedwait (pthread_cond_t *, pthread_mutex_t *,
++ const struct timespec *);
++int __pthread_equal (pthread_t, pthread_t);
++void __pthread_exit (void *);
++int __pthread_getschedparam (pthread_t, int *, struct sched_param *);
++int __pthread_setschedparam (pthread_t, int,
++ const struct sched_param *);
++int _pthread_mutex_destroy (pthread_mutex_t *);
++int _pthread_mutex_init (pthread_mutex_t *,
++ const pthread_mutexattr_t *);
++int __pthread_mutex_lock (pthread_mutex_t *);
++int __pthread_mutex_trylock (pthread_mutex_t *);
++int __pthread_mutex_unlock (pthread_mutex_t *);
++pthread_t __pthread_self (void);
++int __pthread_setcancelstate (int, int *);
++int __pthread_setcanceltype (int, int *);
++struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void);
++int __pthread_once (pthread_once_t *, void (*) (void));
++int __pthread_rwlock_rdlock (pthread_rwlock_t *);
++int __pthread_rwlock_wrlock (pthread_rwlock_t *);
++int __pthread_rwlock_unlock (pthread_rwlock_t *);
++int __pthread_key_create (pthread_key_t *, void (*) (void *));
++void *__pthread_getspecific (pthread_key_t);
++int __pthread_setspecific (pthread_key_t, const void *);
++
++void _cthreads_flockfile (FILE *);
++void _cthreads_funlockfile (FILE *);
++int _cthreads_ftrylockfile (FILE *);
++
++/* Data type shared with libc. The libc uses it to pass on calls to
++ the thread functions. Wine pokes directly into this structure,
++ so if possible avoid breaking it and append new hooks to the end. */
++struct pthread_functions
++{
++ int (*ptr_pthread_attr_destroy) (pthread_attr_t *);
++ int (*ptr_pthread_attr_init) (pthread_attr_t *);
++ int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *);
++ int (*ptr_pthread_attr_setdetachstate) (pthread_attr_t *, int);
++ int (*ptr_pthread_attr_getinheritsched) (const pthread_attr_t *, int *);
++ int (*ptr_pthread_attr_setinheritsched) (pthread_attr_t *, int);
++ int (*ptr_pthread_attr_getschedparam) (const pthread_attr_t *,
++ struct sched_param *);
++ int (*ptr_pthread_attr_setschedparam) (pthread_attr_t *,
++ const struct sched_param *);
++ int (*ptr_pthread_attr_getschedpolicy) (const pthread_attr_t *, int *);
++ int (*ptr_pthread_attr_setschedpolicy) (pthread_attr_t *, int);
++ int (*ptr_pthread_attr_getscope) (const pthread_attr_t *, int *);
++ int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int);
++ int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
++ int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
++ int (*ptr_pthread_cond_broadcast) (pthread_cond_t *);
++ int (*ptr_pthread_cond_destroy) (pthread_cond_t *);
++ int (*ptr_pthread_cond_init) (pthread_cond_t *,
++ const pthread_condattr_t *);
++ int (*ptr_pthread_cond_signal) (pthread_cond_t *);
++ int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
++ int (*ptr_pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *,
++ const struct timespec *);
++ int (*ptr_pthread_equal) (pthread_t, pthread_t);
++ void (*ptr_pthread_exit) (void *);
++ int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *);
++ int (*ptr_pthread_setschedparam) (pthread_t, int,
++ const struct sched_param *);
++ int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *);
++ int (*ptr_pthread_mutex_init) (pthread_mutex_t *,
++ const pthread_mutexattr_t *);
++ int (*ptr_pthread_mutex_lock) (pthread_mutex_t *);
++ int (*ptr_pthread_mutex_trylock) (pthread_mutex_t *);
++ int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *);
++ pthread_t (*ptr_pthread_self) (void);
++ int (*ptr_pthread_setcancelstate) (int, int *);
++ int (*ptr_pthread_setcanceltype) (int, int *);
++ struct __pthread_cancelation_handler **(*ptr___pthread_get_cleanup_stack)
(void);
++ int (*ptr_pthread_once) (pthread_once_t *, void (*) (void));
++ int (*ptr_pthread_rwlock_rdlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_rwlock_wrlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_rwlock_unlock) (pthread_rwlock_t *);
++ int (*ptr_pthread_key_create) (pthread_key_t *, void (*) (void *));
++ void *(*ptr_pthread_getspecific) (pthread_key_t);
++ int (*ptr_pthread_setspecific) (pthread_key_t, const void *);
++ void (*ptr__IO_flockfile) (FILE *);
++ void (*ptr__IO_funlockfile) (FILE *);
++ int (*ptr__IO_ftrylockfile) (FILE *);
++};
++
++/* Variable in libc.so. */
++extern struct pthread_functions __libc_pthread_functions attribute_hidden;
++extern int __libc_pthread_functions_init attribute_hidden;
++
++void __libc_pthread_init (const struct pthread_functions *functions);
++
++# define PTHFCT_CALL(fct, params) \
++ __libc_pthread_functions.fct params
++
++#endif /* pthread-functions.h */
diff -Nru glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
--- glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
1970-01-01 01:00:00.000000000 +0100
+++ glibc-2.19/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
2015-03-08 12:01:33.000000000 +0100
@@ -0,0 +1,24 @@
+commit 9f95dc5d227c5a155d39208dfd15aacaa509b59b
+Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
+Date: Sun Mar 8 11:26:57 2015 +0100
+
+ hurd: Make libc able to call pthread stubs
+
+ * sysdeps/mach/hurd/bits/libc-lock.h [_LIBC]: Include
+ <bits/libc-lockP.h>
+
+diff --git a/sysdeps/mach/hurd/bits/libc-lock.h
b/sysdeps/mach/hurd/bits/libc-lock.h
+index 24c3aa8..63d3e81 100644
+--- a/sysdeps/mach/hurd/bits/libc-lock.h
++++ b/sysdeps/mach/hurd/bits/libc-lock.h
+@@ -203,4 +203,10 @@ void *__libc_getspecific (__libc_key_t key);
+
+ #endif /* _CTHREADS_ */
+
++/* Hide the definitions which are only supposed to be used inside libc in
++ a separate file. This file is not present in the installation! */
++#ifdef _LIBC
++# include <bits/libc-lockP.h>
++#endif
++
+ #endif /* bits/libc-lock.h */
diff -Nru glibc-2.19/debian/patches/series glibc-2.19/debian/patches/series
--- glibc-2.19/debian/patches/series 2015-02-08 15:54:30.000000000 +0100
+++ glibc-2.19/debian/patches/series 2015-03-12 20:09:12.000000000 +0100
@@ -155,6 +155,9 @@
hurd-i386/tg-WRLCK-upgrade.diff
hurd-i386/cvs-static-dlopen.diff
hurd-i386/tg-reboot-startup.diff
+hurd-i386/cvs-libpthread-dlopen.diff
+hurd-i386/cvs-libpthread-libc-lockP.diff
+hurd-i386/cvs-libpthread-libc-lockP2.diff
i386/local-biarch.diff
i386/local-cmov.diff
@@ -268,3 +271,4 @@
any/cvs-getnetbyname.diff
any/cvs-vfprintf.diff
any/cvs-wscanf.diff
+any/cvs-ldconfig-aux-cache.diff
diff -Nru glibc-2.19/debian/rules glibc-2.19/debian/rules
--- glibc-2.19/debian/rules 2014-10-17 09:43:19.000000000 +0200
+++ glibc-2.19/debian/rules 2015-03-08 22:29:32.000000000 +0100
@@ -36,9 +36,6 @@
include debian/shlibver
shlib_dep = $(libc) (>= $(shlib_dep_ver))
-# The version of the C library that locales needs for its format.
-include debian/locales-depver
-
# Beyond here you shouldn't need to customise anything:
export SHELL = /bin/bash -e
diff -Nru glibc-2.19/debian/rules.d/debhelper.mk
glibc-2.19/debian/rules.d/debhelper.mk
--- glibc-2.19/debian/rules.d/debhelper.mk 2014-10-17 09:43:19.000000000
+0200
+++ glibc-2.19/debian/rules.d/debhelper.mk 2015-03-13 21:14:08.000000000
+0100
@@ -178,8 +178,7 @@
perl -i -pe 'BEGIN {undef $$/; open(IN,
"debian/tmp-libc/usr/share/i18n/SUPPORTED"); $$j=<IN>;}
s/__PROVIDED_LOCALES__/$$j/g;' debian/locales.config debian/locales.postinst
# Generate common substvars files.
- echo "locale:Depends=$(shell perl debian/debver2localesdep.pl
$(LOCALES_DEP_VER))" > tmp.substvars
- echo "locale-compat:Depends=$(shell perl debian/debver2localesdep.pl
$(LOCALES_COMPAT_VER))" >> tmp.substvars
+ : > tmp.substvars
ifeq ($(filter stage2,$(DEB_BUILD_PROFILES)),)
echo 'libgcc:Depends=libgcc1 [!hppa !m68k], libgcc2 [m68k], libgcc4
[hppa]' >> tmp.substvars
endif
-- System Information:
Debian Release: 8.0
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.16.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
--- End Message ---