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: