[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r6369 - in glibc-package/trunk/debian: . patches patches/hurd-i386



Author: sthibault
Date: 2015-03-08 11:01:33 +0000 (Sun, 08 Mar 2015)
New Revision: 6369

Added:
   glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
   glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
Removed:
   glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-functions.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
hurd: hide pthread-specific libc bits in libpthread/


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2015-03-02 00:09:49 UTC (rev 6368)
+++ glibc-package/trunk/debian/changelog	2015-03-08 11:01:33 UTC (rev 6369)
@@ -3,8 +3,8 @@
   [ 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-functions.diff: New patch to dynamically
-    call pthread functions from libc.
+  * patches/hurd-i386/cvs-libpthread-libc-lockP{,2}.diff: New patch to
+    dynamically call pthread functions from libc.
 
  -- Aurelien Jarno <aurel32@debian.org>  Sun, 08 Feb 2015 17:21:50 +0100
 

Deleted: glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-functions.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-functions.diff	2015-03-02 00:09:49 UTC (rev 6368)
+++ glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-functions.diff	2015-03-08 11:01:33 UTC (rev 6369)
@@ -1,182 +0,0 @@
-From: Samuel Thibault <samuel.thibault@ens-lyon.org>
-Subject: [PATCH] hurd: Make libc able to call pthread stubs
-
-* sysdeps/mach/hurd/bits/libc-lock.h: Include
-<pthread/pthread-functions.h>
-(__libc_maybe_call, PTFAVAIL, __libc_ptf_call, __libc_ptf_call_always):
-New macros.
-(__pthread_mutex_init, __pthread_mutex_destroy, __pthread_mutex_trylock,
-__pthread_mutex_lock, __pthread_mutex_unlock, __pthread_mutexattr_init,
-__pthread_mutexattr_destroy, __pthread_mutexattr_settype,
-__pthread_rwlock_init, __pthread_rwlock_destroy,
-__pthread_rwlock_rdlock, __pthread_rwlock_tryrdlock,
-__pthread_rwlock_wrlock, __pthread_rwlock_trywrlock,
-__pthread_rwlock_unlock, __pthread_key_create, __pthread_setspecific,
-__pthread_getspecific, __pthread_once, __pthread_atfork): New
-declarations and weak references.
-
-Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
-
----
- sysdeps/mach/hurd/bits/libc-lock.h | 134 +++++++++++++++++++++++++++++++++++++
- 1 file changed, 134 insertions(+)
-
-diff --git a/sysdeps/mach/hurd/bits/libc-lock.h b/sysdeps/mach/hurd/bits/libc-lock.h
-index c53fe87..38befc9 100644
---- a/sysdeps/mach/hurd/bits/libc-lock.h
-+++ b/sysdeps/mach/hurd/bits/libc-lock.h
-@@ -24,6 +24,7 @@
- #include <tls.h>
- #endif
- #include <cthreads.h>
-+#include <pthread/pthread-functions.h>
- 
- typedef struct mutex __libc_lock_t;
- typedef struct
-@@ -46,6 +47,35 @@ typedef struct __libc_lock_opaque__ __libc_lock_t;
- typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
- #endif
- 
-+/* 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
-+
- /* Define a lock variable NAME with storage class CLASS.  The lock must be
-    initialized with __libc_lock_init before it can be used (or define it
-    with __libc_lock_define_initialized, below).  Use `extern' for CLASS to
-@@ -210,4 +240,108 @@ void *__libc_getspecific (__libc_key_t key);
- 
- #endif /* _CTHREADS_ */
- 
-+/* 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-lock.h */
--- 
-tg: (d7e5ff9..) t/pthread_functions (depends on: t/tls-threadvar)

Added: glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP.diff	2015-03-08 11:01:33 UTC (rev 6369)
@@ -0,0 +1,24 @@
+commit 9f95dc5d227c5a155d39208dfd15aacaa509b59b
+Author: Samuel Thibault <samuel.thibault@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 */

Added: glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/cvs-libpthread-libc-lockP2.diff	2015-03-08 11:01:33 UTC (rev 6369)
@@ -0,0 +1,468 @@
+commit 988f0e4cbda1673dfaa47051b8a64d90a89ea2ce
+Author: Samuel Thibault <samuel.thibault@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 <drepper@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 <drepper@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 */

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series	2015-03-02 00:09:49 UTC (rev 6368)
+++ glibc-package/trunk/debian/patches/series	2015-03-08 11:01:33 UTC (rev 6369)
@@ -156,7 +156,8 @@
 hurd-i386/cvs-static-dlopen.diff
 hurd-i386/tg-reboot-startup.diff
 hurd-i386/cvs-libpthread-dlopen.diff
-hurd-i386/cvs-libpthread-functions.diff
+hurd-i386/cvs-libpthread-libc-lockP.diff
+hurd-i386/cvs-libpthread-libc-lockP2.diff
 
 i386/local-biarch.diff
 i386/local-cmov.diff


Reply to: