Your message dated Wed, 01 Apr 2015 20:13:00 +0100
with message-id <1427915580.622.5.ca...@adam-barratt.org.uk>
and subject line Re: Bug#780465: jessie-pu: package glibc/2.19-17
has caused the Debian Bug report #780465,
regarding unblock: glibc/2.19-17
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
780465: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=780465
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- 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 ---
--- Begin Message ---
On Wed, 2015-04-01 at 19:15 +0200, Cyril Brulebois wrote:
> Control: tag -1 confirmed
> 
> Niels Thykier <ni...@thykier.net> (2015-03-14):
> > Thanks for fixing one of the remaining Jessie blockers. :)  I have
> > unblocked it from the RT side and am CC'ing KiBi for a d-i ack.
> 
> No objections, thanks.

-udeb added.

Regards,

Adam

--- End Message ---

Reply via email to