r3820 - in glibc-package/branches/eglibc-2.10/debian: . patches patches/hppa
Author: aurel32
Date: 2009-09-08 20:39:12 +0000 (Tue, 08 Sep 2009)
New Revision: 3820
Removed:
glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-hppa-nptl.diff
glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-ports-hppa-nptl.diff
Modified:
glibc-package/branches/eglibc-2.10/debian/changelog
glibc-package/branches/eglibc-2.10/debian/patches/series
Log:
Remove previous attempts to switch HPPA to NPTL
Modified: glibc-package/branches/eglibc-2.10/debian/changelog
===================================================================
--- glibc-package/branches/eglibc-2.10/debian/changelog 2009-09-08 20:21:56 UTC (rev 3819)
+++ glibc-package/branches/eglibc-2.10/debian/changelog 2009-09-08 20:39:12 UTC (rev 3820)
@@ -96,9 +96,6 @@
* Add debian/patches/alpha/submitted-rtld-fPIC.diff to fix build on alpha.
* Add debian/patches/any/submitted-getent-gshadow.diff to add gshadow
support to getent.
- * Add hppa/local-hppa-nptl.diff and hppa/local-ports-hppa-nptl.diff from
- Carlos O'Donell to keep ABI compatibility between linuxthreads and NPTL
- on HPPA.
* debian/rules.d/tarball.mk: store the checkout revision in the tarball
(file .svn-revision).
* debian/rules.d/tarball.mk: add an "update-from-upstream-svn" rule to
Deleted: glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-hppa-nptl.diff
===================================================================
--- glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-hppa-nptl.diff 2009-09-08 20:21:56 UTC (rev 3819)
+++ glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-hppa-nptl.diff 2009-09-08 20:39:12 UTC (rev 3820)
@@ -1,18 +0,0 @@
-2009-06-20 Carlos O'Donell <carlos@codesourcery.com>
-
- * Versions.def: Add GLIBC_2.10 for libpthread.
-
----
- Versions.def | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/Versions.def
-+++ b/Versions.def
-@@ -88,6 +88,7 @@
- GLIBC_2.3.4
- GLIBC_2.4
- GLIBC_2.6
-+ GLIBC_2.10
- GLIBC_PRIVATE
- }
- libresolv {
Deleted: glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-ports-hppa-nptl.diff
===================================================================
--- glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-ports-hppa-nptl.diff 2009-09-08 20:21:56 UTC (rev 3819)
+++ glibc-package/branches/eglibc-2.10/debian/patches/hppa/local-ports-hppa-nptl.diff 2009-09-08 20:39:12 UTC (rev 3820)
@@ -1,3573 +0,0 @@
-2009-04-01 Carlos O'Donell <carlos@codesourcery.com>
-
- * sysdeps/hppa/nptl/Makefile: Add compat routines
- when building nptl.
-
- sysdeps/unix/sysv/linux/hppa/nptl/
- * Versions: New file.
- * forward.c: New file.
- * init.c: New file.
- * old_hppa_pthread_cond_broadcast.c: New file.
- * old_hppa_pthread_cond_destroy.c: New file.
- * old_hppa_pthread_cond_init.c: New file.
- * old_hppa_pthread_cond_signal.c: New file.
- * old_hppa_pthread_cond_timedwait.c: New file.
- * old_hppa_pthread_cond_wait.c: New file.
- * old_hppa_pthread_mutex_destroy.c: New file.
- * old_hppa_pthread_mutex_init.c: New file.
- * old_hppa_pthread_mutex_lock.c: New file.
- * old_hppa_pthread_mutex_timedlock.c: New file.
- * old_hppa_pthread_mutex_trylock.c: New file.
- * old_hppa_pthread_mutex_unlock.c: New file.
- * old_hppa_pthread_rwlock_destroy.c: New file.
- * old_hppa_pthread_rwlock_init.c: New file.
- * old_hppa_pthread_rwlock_rdlock.c: New file.
- * old_hppa_pthread_rwlock_timedrdlock.c: New file.
- * old_hppa_pthread_rwlock_timedwrlock.c: New file.
- * old_hppa_pthread_rwlock_tryrdlock.c: New file.
- * old_hppa_pthread_rwlock_trywrlock.c: New file.
- * old_hppa_pthread_rwlock_unlock.c: New file.
- * old_hppa_pthread_rwlock_wrlock.c: New file.
- * pthread-functions.h: New file.
- * pthreadP.h: New file.
- * pthread_cond_broadcast.c: New file.
- * pthread_cond_destroy.c: New file.
- * pthread_cond_init.c: New file.
- * pthread_cond_signal.c: New file.
- * pthread_cond_timedwait.c: New file.
- * pthread_cond_wait.c: New file.
- * pthread_mutex_cond_lock.c: New file.
- * pthread_mutex_destroy.c: New file.
- * pthread_mutex_init.c: New file.
- * pthread_mutex_lock.c: New file.
- * pthread_mutex_timedlock.c: New file.
- * pthread_mutex_trylock.c: New file.
- * pthread_mutex_unlock.c: New file.
- * pthread_rwlock_destroy.c: New file.
- * pthread_rwlock_init.c: New file.
- * pthread_rwlock_rdlock.c: New file.
- * pthread_rwlock_timedrdlock.c: New file.
- * pthread_rwlock_timedwrlock.c: New file.
- * pthread_rwlock_tryrdlock.c: New file.
- * pthread_rwlock_trywrlock.c: New file.
- * pthread_rwlock_unlock.c: New file.
- * pthread_rwlock_wrlock.c: New file.
-
----
- ports/sysdeps/hppa/nptl/Makefile | 25
- ports/sysdeps/unix/sysv/linux/hppa/internaltypes.h | 184 ++
- ports/sysdeps/unix/sysv/linux/hppa/nptl/Versions | 65 +
- ports/sysdeps/unix/sysv/linux/hppa/nptl/forward.c | 275 ++++
- ports/sysdeps/unix/sysv/linux/hppa/nptl/nptl-init.c | 460 +++++++
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_broadcast.c | 36
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_destroy.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_init.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_signal.c | 36
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_timedwait.c | 44
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_wait.c | 41
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_destroy.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_init.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_lock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_timedlock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_trylock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_unlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_destroy.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_init.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_rdlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_timedrdlock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_timedwrlock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_tryrdlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_trywrlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_unlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_wrlock.c | 37
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread-functions.h | 133 ++
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthreadP.h | 621 ++++++++++
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_broadcast.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_destroy.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_init.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_signal.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_timedwait.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_wait.c | 29
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_cond_lock.c | 14
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_destroy.c | 36
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_init.c | 36
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_lock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_timedlock.c | 38
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_trylock.c | 35
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_unlock.c | 36
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_destroy.c | 35
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_init.c | 35
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_rdlock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_timedrdlock.c | 38
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_timedwrlock.c | 38
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_tryrdlock.c | 35
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_trywrlock.c | 35
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_unlock.c | 40
- ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_wrlock.c | 40
- 50 files changed, 3312 insertions(+)
-
---- a/ports/sysdeps/hppa/nptl/Makefile
-+++ b/ports/sysdeps/hppa/nptl/Makefile
-@@ -25,3 +25,28 @@
- # this because the default is too small to run with.
- tst-oddstacklimit-ENV = ; ulimit -s 8193;
-
-+ifeq ($(subdir),nptl)
-+# Add compat routines for all versioned functions.
-+libpthread-routines += \
-+ old_hppa_pthread_cond_broadcast \
-+ old_hppa_pthread_cond_destroy \
-+ old_hppa_pthread_cond_init \
-+ old_hppa_pthread_cond_signal \
-+ old_hppa_pthread_cond_timedwait \
-+ old_hppa_pthread_cond_wait \
-+ old_hppa_pthread_mutex_destroy \
-+ old_hppa_pthread_mutex_init \
-+ old_hppa_pthread_mutex_lock \
-+ old_hppa_pthread_mutex_timedlock \
-+ old_hppa_pthread_mutex_trylock \
-+ old_hppa_pthread_mutex_unlock \
-+ old_hppa_pthread_rwlock_destroy \
-+ old_hppa_pthread_rwlock_init \
-+ old_hppa_pthread_rwlock_rdlock \
-+ old_hppa_pthread_rwlock_timedrdlock \
-+ old_hppa_pthread_rwlock_timedwrlock \
-+ old_hppa_pthread_rwlock_tryrdlock \
-+ old_hppa_pthread_rwlock_trywrlock \
-+ old_hppa_pthread_rwlock_unlock \
-+ old_hppa_pthread_rwlock_wrlock
-+endif
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/internaltypes.h
-@@ -0,0 +1,184 @@
-+#include_next <internaltypes.h>
-+#ifndef _INTERNAL_TYPES_H_HPPA_
-+#define _INTERNAL_TYPES_H_HPPA_ 1
-+
-+/* Compatibility __atomic_lock_t
-+ and _pthread_fastlock. */
-+typedef volatile struct {
-+ int lock[4];
-+} __attribute__ ((aligned(16))) compat_atomic_lock_t;
-+
-+struct compat_pthread_fastlock
-+{
-+ compat_atomic_lock_t compat_spinlock;
-+ long int compat_status;
-+};
-+
-+/* The hppa only has one atomic read and modify memory operation,
-+ load and clear, so hppa spinlocks must use zero to signify that
-+ someone is holding the lock. The address used for the ldcw
-+ semaphore must be 16-byte aligned. */
-+#define __ldcw(a) \
-+({ \
-+ unsigned int __ret; \
-+ __asm__ __volatile__("ldcw 0(%1),%0" \
-+ : "=r" (__ret) : "r" (a) : "memory"); \
-+ __ret; \
-+})
-+
-+/* Strongly ordered lock reset */
-+#define __lock_reset(lock_addr, tmp) \
-+({ \
-+ __asm__ __volatile__ ("stw,ma %1,0(%0)" \
-+ : : "r" (lock_addr), "r" (tmp) : "memory"); \
-+})
-+
-+/* Because malloc only guarantees 8-byte alignment for malloc'd data,
-+ and GCC only guarantees 8-byte alignment for stack locals, we can't
-+ be assured of 16-byte alignment for atomic lock data even if we
-+ specify "__attribute ((aligned(16)))" in the type declaration. So,
-+ we use a struct containing an array of four ints for the atomic lock
-+ type and dynamically select the 16-byte aligned int from the array
-+ for the semaphore. */
-+#define __PA_LDCW_ALIGNMENT 16
-+#define __ldcw_align(a) ({ \
-+ volatile unsigned int __ret = (unsigned int) a; \
-+ if ((__ret & ~(__PA_LDCW_ALIGNMENT - 1)) < (unsigned int) a) \
-+ __ret = (__ret & ~(__PA_LDCW_ALIGNMENT - 1)) + __PA_LDCW_ALIGNMENT; \
-+ (unsigned int *) __ret; \
-+})
-+
-+/* If the compat funciton might be called by two or more threads
-+ then the compat lock must be taken before modifying the
-+ compat structure. This avoids a race condition in the allocation
-+ of the new structure. */
-+#define compat_lock(var) \
-+({ \
-+ volatile unsigned int *a = __ldcw_align (&var->compat_lock); \
-+ volatile unsigned int tmp; \
-+ /* Atomically lock the initialized lock. */ \
-+ /* printf ("%s:%d\n", __FILE__, __LINE__); */ \
-+ while ((tmp = __ldcw(a)) == 0) \
-+ sched_yield();
-+
-+/* Allocate the new structure.
-+ Notes: Must be called with lock held. */
-+#define compat_malloc(var) \
-+ /* Allocate the new compat variable. */ \
-+ if (var->compat == NULL) \
-+ { \
-+ var->compat = (__typeof(var->compat)) \
-+ calloc(1, sizeof(__typeof(*var->compat))); \
-+ if (var->compat == NULL) \
-+ { \
-+ __lock_reset(a, tmp = 1); \
-+ return ENOMEM; \
-+ } \
-+ } \
-+
-+/* Allocate the new structure.
-+ Notes: Does not unlock any lock on error. */
-+#define compat_malloc_nolock(var) \
-+ /* Allocate the new compat variable. */ \
-+ if (var->compat == NULL) \
-+ { \
-+ var->compat = (__typeof(var->compat)) \
-+ calloc(1, sizeof(__typeof(*var->compat))); \
-+ if (var->compat == NULL) \
-+ { \
-+ return ENOMEM; \
-+ } \
-+ } \
-+
-+/* Copy initialization data from the compat mutex.
-+ Notes: Must be called with lock held. */
-+#define compat_mutex_copy(var) \
-+ /* Copy the mutex kind initializer. */ \
-+ var->compat->__data.__kind = var->__kind;
-+
-+/* Copy initialization data from the compat rwlock.
-+ Notes: Must be called with lock held. */
-+#define compat_rwlock_copy(var) \
-+ /* Copy the rwlock flags initializers. */ \
-+ var->compat->__data.__flags = var->__flags;
-+
-+/* Release the lock. */
-+#define compat_unlock(var) \
-+ __lock_reset(a, tmp = 1); \
-+})
-+
-+
-+/* Was the compat variable initialized? A read or write of a
-+ pointer sized quantity is atomic, therefore we should see
-+ either an initalized or uninitialized compat pointer and
-+ act accordingly. This is currently used by the destroy
-+ functions to check if any work needs to be done. If a user
-+ is in the middle of initialization, and calls destroy,
-+ the destroy function should see a consistent
-+ view of var->compat and do nothing if initialization
-+ is not complete. */
-+#define compat_present(var) \
-+ (var->compat != NULL)
-+
-+/* Free the compat variable. Must only be called from
-+ pthread_mutex_destory, pthread_cond_destroy, and
-+ pthread_rwlock_destroy. Assumes only one thread is calling the
-+ destroy function. POSIX says that calling destroy twice is
-+ undefined, therefore we can safely assume only one thread calls
-+ this function. If two threads call this function then malloc
-+ double-free checking should allow users to correct their code. */
-+#define compat_free(var) \
-+({ \
-+ free (var->compat); \
-+ var->compat = NULL; \
-+})
-+
-+/* Inintialize the compat lock for use with ldcw. This function
-+ must only be called from pthread_mutex_init, pthread_cond_init
-+ or pthread_rwlock_init. POSIX says that "Attempting to initialise
-+ an already initialised mutex results in undefined behaviour."
-+ therefore we assume only one thread is calling the initialization
-+ function at any given point, and therefore initialization need
-+ not be guarded by locking the compat lock. */
-+#define compat_init(var) \
-+({ \
-+ var->compat_lock = ((struct compat_pthread_fastlock) { { {1, 1, 1, 1 } }, 0xDEADBEEF }); \
-+})
-+
-+/* The following are the compat interpretations of the
-+ the old pthread structures. */
-+
-+typedef struct {
-+ struct compat_pthread_fastlock compat_lock;
-+ /* Overwrites _pthread_descr __c_waiting. */
-+ pthread_cond_t *compat;
-+} pthread_cond_hppa_2_3_2_t;
-+
-+typedef struct {
-+ int pad1;
-+ int pad2;
-+ /* Overwrites _pthread_descr __m_owner. */
-+ pthread_mutex_t *compat;
-+ /* KIND must stay at this position to maintain binary
-+ compatibility with Linuxthreads. */
-+ int __kind;
-+ struct compat_pthread_fastlock compat_lock;
-+} pthread_mutex_hppa_2_0_t;
-+
-+typedef struct {
-+ struct compat_pthread_fastlock compat_lock;
-+ /* Overwrites int __rw_readers. */
-+ pthread_rwlock_t *compat;
-+ int pad1;
-+ int pad2;
-+ int pad3;
-+ /* FLAGS and PSHARED stay at this position to
-+ maintain binary compatibility with Linuxthreads. */
-+ unsigned char __flags;
-+ unsigned char __shared;
-+ unsigned char __pad1;
-+ unsigned char __pad2;
-+} pthread_rwlock_hppa_2_0_t;
-+
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/Versions
-@@ -0,0 +1,65 @@
-+libc {
-+ GLIBC_2.10 {
-+ # Changed lock implemenation, breaking the ABI for
-+ # all structures that can contain statically initialized
-+ # locks. Added compat functions and structures for the
-+ # following functions:
-+ pthread_cond_broadcast;
-+ pthread_cond_destroy;
-+ pthread_cond_init;
-+ pthread_cond_signal;
-+ pthread_cond_timedwait;
-+ pthread_cond_wait;
-+ pthread_mutex_destroy;
-+ pthread_mutex_init;
-+ pthread_mutex_lock;
-+ pthread_mutex_timedlock;
-+ pthread_mutex_trylock;
-+ pthread_mutex_unlock;
-+ pthread_rwlock_destroy;
-+ pthread_rwlock_init;
-+ pthread_rwlock_rdlock;
-+ pthread_rwlock_timedrdlock;
-+ pthread_rwlock_timedwrlock;
-+ pthread_rwlock_tryrdlock;
-+ pthread_rwlock_trywrlock;
-+ pthread_rwlock_unlock;
-+ pthread_rwlock_wrlock;
-+ }
-+}
-+
-+libpthread {
-+ GLIBC_2.10 {
-+ # Changed lock implemenation, breaking the ABI for
-+ # all structures that can contain statically initialized
-+ # locks. Added compat functions and structures for the
-+ # following functions:
-+ pthread_cond_broadcast;
-+ pthread_cond_destroy;
-+ pthread_cond_init;
-+ pthread_cond_signal;
-+ pthread_cond_timedwait;
-+ pthread_cond_wait;
-+ pthread_mutex_destroy;
-+ pthread_mutex_init;
-+ pthread_mutex_lock;
-+ pthread_mutex_timedlock;
-+ pthread_mutex_trylock;
-+ pthread_mutex_unlock;
-+ pthread_rwlock_destroy;
-+ pthread_rwlock_init;
-+ pthread_rwlock_rdlock;
-+ pthread_rwlock_timedrdlock;
-+ pthread_rwlock_timedwrlock;
-+ pthread_rwlock_tryrdlock;
-+ pthread_rwlock_trywrlock;
-+ pthread_rwlock_unlock;
-+ pthread_rwlock_wrlock;
-+ # Protected names for functions used in other shared objects.
-+ __pthread_mutex_init;
-+ __pthread_mutex_destroy;
-+ __pthread_mutex_lock;
-+ __pthread_mutex_trylock;
-+ __pthread_mutex_unlock;
-+ }
-+}
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/forward.c
-@@ -0,0 +1,275 @@
-+/* Copyright (C) 2002, 2003, 2004, 2007, 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Ulrich Drepper <drepper@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, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <dlfcn.h>
-+#include <pthreadP.h>
-+#include <signal.h>
-+#include <stdlib.h>
-+
-+#include <shlib-compat.h>
-+#include <atomic.h>
-+#include <sysdep.h>
-+
-+
-+/* 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_init) \
-+ defaction; \
-+ \
-+ return PTHFCT_CALL (ptr_##name, params); \
-+}
-+
-+#define FORWARD(name, decl, params, defretval) \
-+ FORWARD2 (name, int, decl, params, return defretval)
-+
-+
-+FORWARD (pthread_attr_destroy, (pthread_attr_t *attr), (attr), 0)
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_1)
-+FORWARD (__pthread_attr_init_2_0, (pthread_attr_t *attr), (attr), 0)
-+compat_symbol (libc, __pthread_attr_init_2_0, pthread_attr_init, GLIBC_2_0);
-+#endif
-+
-+FORWARD (__pthread_attr_init_2_1, (pthread_attr_t *attr), (attr), 0)
-+versioned_symbol (libc, __pthread_attr_init_2_1, pthread_attr_init, GLIBC_2_1);
-+
-+FORWARD (pthread_attr_getdetachstate,
-+ (const pthread_attr_t *attr, int *detachstate), (attr, detachstate),
-+ 0)
-+FORWARD (pthread_attr_setdetachstate, (pthread_attr_t *attr, int detachstate),
-+ (attr, detachstate), 0)
-+
-+FORWARD (pthread_attr_getinheritsched,
-+ (const pthread_attr_t *attr, int *inherit), (attr, inherit), 0)
-+FORWARD (pthread_attr_setinheritsched, (pthread_attr_t *attr, int inherit),
-+ (attr, inherit), 0)
-+
-+FORWARD (pthread_attr_getschedparam,
-+ (const pthread_attr_t *attr, struct sched_param *param),
-+ (attr, param), 0)
-+FORWARD (pthread_attr_setschedparam,
-+ (pthread_attr_t *attr, const struct sched_param *param),
-+ (attr, param), 0)
-+
-+FORWARD (pthread_attr_getschedpolicy,
-+ (const pthread_attr_t *attr, int *policy), (attr, policy), 0)
-+FORWARD (pthread_attr_setschedpolicy, (pthread_attr_t *attr, int policy),
-+ (attr, policy), 0)
-+
-+FORWARD (pthread_attr_getscope,
-+ (const pthread_attr_t *attr, int *scope), (attr, scope), 0)
-+FORWARD (pthread_attr_setscope, (pthread_attr_t *attr, int scope),
-+ (attr, scope), 0)
-+
-+
-+FORWARD (pthread_condattr_destroy, (pthread_condattr_t *attr), (attr), 0)
-+FORWARD (pthread_condattr_init, (pthread_condattr_t *attr), (attr), 0)
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_broadcast_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_broadcast_2_0, pthread_cond_broadcast,
-+ GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_broadcast_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_broadcast_hppa_2_3_2, pthread_cond_broadcast,
-+ GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
-+versioned_symbol (libc, __pthread_cond_broadcast, pthread_cond_broadcast,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_destroy_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_destroy_2_0, pthread_cond_destroy,
-+ GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_destroy_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_destroy_hppa_2_3_2, pthread_cond_destroy,
-+ GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_destroy, (pthread_cond_t *cond), (cond), 0)
-+versioned_symbol (libc, __pthread_cond_destroy, pthread_cond_destroy,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_init_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond, const pthread_condattr_t *cond_attr),
-+ (cond, cond_attr), return 0)
-+compat_symbol (libc, __pthread_cond_init_2_0, pthread_cond_init, GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_init_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond, const pthread_condattr_t *cond_attr),
-+ (cond, cond_attr), return 0)
-+compat_symbol (libc, __pthread_cond_init_hppa_2_3_2, pthread_cond_init, GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_init,
-+ (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
-+ (cond, cond_attr), 0)
-+versioned_symbol (libc, __pthread_cond_init, pthread_cond_init, GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_signal_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
-+ GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_signal_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond), (cond), return 0)
-+compat_symbol (libc, __pthread_cond_signal_hppa_2_3_2, pthread_cond_signal,
-+ GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
-+versioned_symbol (libc, __pthread_cond_signal, pthread_cond_signal,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_wait_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex), (cond, mutex),
-+ return 0)
-+compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
-+ GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_wait_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond, pthread_mutex_hppa_2_0_t *mutex), (cond, mutex),
-+ return 0)
-+compat_symbol (libc, __pthread_cond_wait_hppa_2_3_2, pthread_cond_wait,
-+ GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
-+ (cond, mutex), 0)
-+versioned_symbol (libc, __pthread_cond_wait, pthread_cond_wait,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
-+FORWARD2 (__pthread_cond_timedwait_2_0, int attribute_compat_text_section,
-+ (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
-+ const struct timespec *abstime), (cond, mutex, abstime),
-+ return 0)
-+compat_symbol (libc, __pthread_cond_timedwait_2_0, pthread_cond_timedwait,
-+ GLIBC_2_0);
-+#endif
-+#if SHLIB_COMPAT(libc, GLIBC_2_3_2, GLIBC_2_10)
-+FORWARD2 (__pthread_cond_timedwait_hppa_2_3_2, int attribute_compat_text_section,
-+ (pthread_cond_hppa_2_3_2_t *cond, pthread_mutex_hppa_2_0_t *mutex,
-+ const struct timespec *abstime), (cond, mutex, abstime),
-+ return 0)
-+compat_symbol (libc, __pthread_cond_timedwait_hppa_2_3_2, pthread_cond_timedwait,
-+ GLIBC_2_3_2);
-+#endif
-+FORWARD (__pthread_cond_timedwait,
-+ (pthread_cond_t *cond, pthread_mutex_t *mutex,
-+ const struct timespec *abstime), (cond, mutex, abstime), 0)
-+versioned_symbol (libc, __pthread_cond_timedwait, pthread_cond_timedwait,
-+ GLIBC_2_10);
-+
-+
-+FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),
-+ (thread1, thread2), 1)
-+
-+
-+/* Use an alias to avoid warning, as pthread_exit is declared noreturn. */
-+FORWARD2 (__pthread_exit, void, (void *retval), (retval), exit (EXIT_SUCCESS))
-+strong_alias (__pthread_exit, pthread_exit);
-+
-+
-+FORWARD (pthread_getschedparam,
-+ (pthread_t target_thread, int *policy, struct sched_param *param),
-+ (target_thread, policy, param), 0)
-+FORWARD (pthread_setschedparam,
-+ (pthread_t target_thread, int policy,
-+ const struct sched_param *param), (target_thread, policy, param), 0)
-+
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_10)
-+FORWARD2 (__pthread_mutex_destroy_hppa_2_0, int attribute_compat_text_section,
-+ (pthread_mutex_hppa_2_0_t *mutex), (mutex), return 0)
-+compat_symbol (libc, __pthread_mutex_destroy_hppa_2_0, pthread_mutex_destroy,
-+ GLIBC_2_0);
-+#endif
-+FORWARD (pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), 0)
-+versioned_symbol (libc, __pthread_mutex_destroy, pthread_mutex_destroy,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_10)
-+FORWARD2 (__pthread_mutex_init_hppa_2_0, int attribute_compat_text_section,
-+ (pthread_mutex_hppa_2_0_t *mutex, const pthread_mutexattr_t *mutexattr),
-+ (mutex, mutexattr), return 0)
-+compat_symbol (libc, __pthread_mutex_init_hppa_2_0, pthread_mutex_init,
-+ GLIBC_2_0);
-+#endif
-+FORWARD (pthread_mutex_init,
-+ (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr),
-+ (mutex, mutexattr), 0)
-+versioned_symbol (libc, __pthread_mutex_init, pthread_mutex_init,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_10)
-+FORWARD2 (__pthread_mutex_lock_hppa_2_0, int attribute_compat_text_section,
-+ (pthread_mutex_hppa_2_0_t *mutex), (mutex), return 0)
-+compat_symbol (libc, __pthread_mutex_lock_hppa_2_0, pthread_mutex_lock,
-+ GLIBC_2_0);
-+#endif
-+FORWARD (pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), 0)
-+versioned_symbol (libc, __pthread_mutex_lock, pthread_mutex_lock,
-+ GLIBC_2_10);
-+
-+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_10)
-+FORWARD2 (__pthread_mutex_unlock_hppa_2_0, int attribute_compat_text_section,
-+ (pthread_mutex_hppa_2_0_t *mutex), (mutex), return 0)
-+compat_symbol (libc, __pthread_mutex_unlock_hppa_2_0, pthread_mutex_unlock,
-+ GLIBC_2_0);
-+#endif
-+FORWARD (pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), 0)
-+versioned_symbol (libc, __pthread_mutex_init, pthread_mutex_init,
-+ GLIBC_2_10);
-+
-+FORWARD2 (pthread_self, pthread_t, (void), (), return 0)
-+
-+
-+FORWARD (pthread_setcancelstate, (int state, int *oldstate), (state, oldstate),
-+ 0)
-+
-+FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
-+
-+#define return /* value is void */
-+FORWARD2(__pthread_unwind,
-+ void attribute_hidden __attribute ((noreturn)) __cleanup_fct_attribute
-+ attribute_compat_text_section,
-+ (__pthread_unwind_buf_t *buf), (buf), {
-+ /* We cannot call abort() here. */
-+ INTERNAL_SYSCALL_DECL (err);
-+ INTERNAL_SYSCALL (kill, err, 1, SIGKILL);
-+ })
-+#undef return
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/nptl-init.c
-@@ -0,0 +1,460 @@
-+/* Copyright (C) 2002-2007, 2008, 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Ulrich Drepper <drepper@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, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <assert.h>
-+#include <errno.h>
-+#include <limits.h>
-+#include <signal.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <sys/param.h>
-+#include <sys/resource.h>
-+#include <pthreadP.h>
-+#include <atomic.h>
-+#include <ldsodefs.h>
-+#include <tls.h>
-+#include <fork.h>
-+#include <version.h>
-+#include <shlib-compat.h>
-+#include <smp.h>
-+#include <lowlevellock.h>
-+#include <kernel-features.h>
-+
-+
-+/* Size and alignment of static TLS block. */
-+size_t __static_tls_size;
-+size_t __static_tls_align_m1;
-+
-+#ifndef __ASSUME_SET_ROBUST_LIST
-+/* Negative if we do not have the system call and we can use it. */
-+int __set_robust_list_avail;
-+# define set_robust_list_not_avail() \
-+ __set_robust_list_avail = -1
-+#else
-+# define set_robust_list_not_avail() do { } while (0)
-+#endif
-+
-+#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
-+/* Nonzero if we do not have FUTEX_CLOCK_REALTIME. */
-+int __have_futex_clock_realtime;
-+# define __set_futex_clock_realtime() \
-+ __have_futex_clock_realtime = 1
-+#else
-+#define __set_futex_clock_realtime() do { } while (0)
-+#endif
-+
-+/* Version of the library, used in libthread_db to detect mismatches. */
-+static const char nptl_version[] __attribute_used__ = VERSION;
-+
-+
-+#ifndef SHARED
-+extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
-+#endif
-+
-+static void nptl_freeres (void);
-+
-+
-+#ifdef SHARED
-+static const struct pthread_functions pthread_functions =
-+ {
-+ .ptr_pthread_attr_destroy = __pthread_attr_destroy,
-+# if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
-+ .ptr___pthread_attr_init_2_0 = __pthread_attr_init_2_0,
-+# endif
-+ .ptr___pthread_attr_init_2_1 = __pthread_attr_init_2_1,
-+ .ptr_pthread_attr_getdetachstate = __pthread_attr_getdetachstate,
-+ .ptr_pthread_attr_setdetachstate = __pthread_attr_setdetachstate,
-+ .ptr_pthread_attr_getinheritsched = __pthread_attr_getinheritsched,
-+ .ptr_pthread_attr_setinheritsched = __pthread_attr_setinheritsched,
-+ .ptr_pthread_attr_getschedparam = __pthread_attr_getschedparam,
-+ .ptr_pthread_attr_setschedparam = __pthread_attr_setschedparam,
-+ .ptr_pthread_attr_getschedpolicy = __pthread_attr_getschedpolicy,
-+ .ptr_pthread_attr_setschedpolicy = __pthread_attr_setschedpolicy,
-+ .ptr_pthread_attr_getscope = __pthread_attr_getscope,
-+ .ptr_pthread_attr_setscope = __pthread_attr_setscope,
-+ .ptr_pthread_condattr_destroy = __pthread_condattr_destroy,
-+ .ptr_pthread_condattr_init = __pthread_condattr_init,
-+ .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
-+ .ptr___pthread_cond_destroy = __pthread_cond_destroy,
-+ .ptr___pthread_cond_init = __pthread_cond_init,
-+ .ptr___pthread_cond_signal = __pthread_cond_signal,
-+ .ptr___pthread_cond_wait = __pthread_cond_wait,
-+ .ptr___pthread_cond_timedwait = __pthread_cond_timedwait,
-+# if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
-+ .ptr___pthread_cond_broadcast_2_0 = __pthread_cond_broadcast_2_0,
-+ .ptr___pthread_cond_destroy_2_0 = __pthread_cond_destroy_2_0,
-+ .ptr___pthread_cond_init_2_0 = __pthread_cond_init_2_0,
-+ .ptr___pthread_cond_signal_2_0 = __pthread_cond_signal_2_0,
-+ .ptr___pthread_cond_wait_2_0 = __pthread_cond_wait_2_0,
-+ .ptr___pthread_cond_timedwait_2_0 = __pthread_cond_timedwait_2_0,
-+# endif
-+# if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+ .ptr___pthread_cond_broadcast_hppa_2_3_2 = __pthread_cond_broadcast_hppa_2_3_2,
-+ .ptr___pthread_cond_destroy_hppa_2_3_2 = __pthread_cond_destroy_hppa_2_3_2,
-+ .ptr___pthread_cond_init_hppa_2_3_2 = __pthread_cond_init_hppa_2_3_2,
-+ .ptr___pthread_cond_signal_hppa_2_3_2 = __pthread_cond_signal_hppa_2_3_2,
-+ .ptr___pthread_cond_wait_hppa_2_3_2 = __pthread_cond_wait_hppa_2_3_2,
-+ .ptr___pthread_cond_timedwait_hppa_2_3_2 = __pthread_cond_timedwait_hppa_2_3_2,
-+# endif
-+ .ptr_pthread_equal = __pthread_equal,
-+ .ptr___pthread_exit = __pthread_exit,
-+ .ptr_pthread_getschedparam = __pthread_getschedparam,
-+ .ptr_pthread_setschedparam = __pthread_setschedparam,
-+ .ptr_pthread_mutex_destroy = INTUSE(__pthread_mutex_destroy),
-+ .ptr_pthread_mutex_init = INTUSE(__pthread_mutex_init),
-+ .ptr_pthread_mutex_lock = INTUSE(__pthread_mutex_lock),
-+ .ptr_pthread_mutex_unlock = INTUSE(__pthread_mutex_unlock),
-+# if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+ .ptr___pthread_mutex_destroy_hppa_2_0 = __pthread_mutex_destroy_hppa_2_0,
-+ .ptr___pthread_mutex_init_hppa_2_0 = __pthread_mutex_init_hppa_2_0,
-+ .ptr___pthread_mutex_lock_hppa_2_0 = __pthread_mutex_lock_hppa_2_0,
-+ .ptr___pthread_mutex_unlock_hppa_2_0 = __pthread_mutex_unlock_hppa_2_0,
-+# endif
-+ .ptr_pthread_self = __pthread_self,
-+ .ptr_pthread_setcancelstate = __pthread_setcancelstate,
-+ .ptr_pthread_setcanceltype = __pthread_setcanceltype,
-+ .ptr___pthread_cleanup_upto = __pthread_cleanup_upto,
-+ .ptr___pthread_once = __pthread_once_internal,
-+ .ptr___pthread_rwlock_rdlock = __pthread_rwlock_rdlock_internal,
-+ .ptr___pthread_rwlock_wrlock = __pthread_rwlock_wrlock_internal,
-+ .ptr___pthread_rwlock_unlock = __pthread_rwlock_unlock_internal,
-+ .ptr___pthread_key_create = __pthread_key_create_internal,
-+ .ptr___pthread_getspecific = __pthread_getspecific_internal,
-+ .ptr___pthread_setspecific = __pthread_setspecific_internal,
-+ .ptr__pthread_cleanup_push_defer = __pthread_cleanup_push_defer,
-+ .ptr__pthread_cleanup_pop_restore = __pthread_cleanup_pop_restore,
-+ .ptr_nthreads = &__nptl_nthreads,
-+ .ptr___pthread_unwind = &__pthread_unwind,
-+ .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
-+ .ptr__nptl_setxid = __nptl_setxid,
-+ /* For now only the stack cache needs to be freed. */
-+ .ptr_freeres = nptl_freeres
-+ };
-+# define ptr_pthread_functions &pthread_functions
-+#else
-+# define ptr_pthread_functions NULL
-+#endif
-+
-+
-+/* This function is called indirectly from the freeres code in libc. */
-+static void
-+__libc_freeres_fn_section
-+nptl_freeres (void)
-+{
-+#ifdef SHARED
-+ __unwind_freeres ();
-+#endif
-+ __free_stacks (0);
-+}
-+
-+
-+/* For asynchronous cancellation we use a signal. This is the handler. */
-+static void
-+sigcancel_handler (int sig, siginfo_t *si, void *ctx)
-+{
-+#ifdef __ASSUME_CORRECT_SI_PID
-+ /* Determine the process ID. It might be negative if the thread is
-+ in the middle of a fork() call. */
-+ pid_t pid = THREAD_GETMEM (THREAD_SELF, pid);
-+ if (__builtin_expect (pid < 0, 0))
-+ pid = -pid;
-+#endif
-+
-+ /* Safety check. It would be possible to call this function for
-+ other signals and send a signal from another process. This is not
-+ correct and might even be a security problem. Try to catch as
-+ many incorrect invocations as possible. */
-+ if (sig != SIGCANCEL
-+#ifdef __ASSUME_CORRECT_SI_PID
-+ /* Kernels before 2.5.75 stored the thread ID and not the process
-+ ID in si_pid so we skip this test. */
-+ || si->si_pid != pid
-+#endif
-+ || si->si_code != SI_TKILL)
-+ return;
-+
-+ struct pthread *self = THREAD_SELF;
-+
-+ int oldval = THREAD_GETMEM (self, cancelhandling);
-+ while (1)
-+ {
-+ /* We are canceled now. When canceled by another thread this flag
-+ is already set but if the signal is directly send (internally or
-+ from another process) is has to be done here. */
-+ int newval = oldval | CANCELING_BITMASK | CANCELED_BITMASK;
-+
-+ if (oldval == newval || (oldval & EXITING_BITMASK) != 0)
-+ /* Already canceled or exiting. */
-+ break;
-+
-+ int curval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling, newval,
-+ oldval);
-+ if (curval == oldval)
-+ {
-+ /* Set the return value. */
-+ THREAD_SETMEM (self, result, PTHREAD_CANCELED);
-+
-+ /* Make sure asynchronous cancellation is still enabled. */
-+ if ((newval & CANCELTYPE_BITMASK) != 0)
-+ /* Run the registered destructors and terminate the thread. */
-+ __do_cancel ();
-+
-+ break;
-+ }
-+
-+ oldval = curval;
-+ }
-+}
-+
-+
-+struct xid_command *__xidcmd attribute_hidden;
-+
-+/* For asynchronous cancellation we use a signal. This is the handler. */
-+static void
-+sighandler_setxid (int sig, siginfo_t *si, void *ctx)
-+{
-+#ifdef __ASSUME_CORRECT_SI_PID
-+ /* Determine the process ID. It might be negative if the thread is
-+ in the middle of a fork() call. */
-+ pid_t pid = THREAD_GETMEM (THREAD_SELF, pid);
-+ if (__builtin_expect (pid < 0, 0))
-+ pid = -pid;
-+#endif
-+
-+ /* Safety check. It would be possible to call this function for
-+ other signals and send a signal from another process. This is not
-+ correct and might even be a security problem. Try to catch as
-+ many incorrect invocations as possible. */
-+ if (sig != SIGSETXID
-+#ifdef __ASSUME_CORRECT_SI_PID
-+ /* Kernels before 2.5.75 stored the thread ID and not the process
-+ ID in si_pid so we skip this test. */
-+ || si->si_pid != pid
-+#endif
-+ || si->si_code != SI_TKILL)
-+ return;
-+
-+ INTERNAL_SYSCALL_DECL (err);
-+ INTERNAL_SYSCALL_NCS (__xidcmd->syscall_no, err, 3, __xidcmd->id[0],
-+ __xidcmd->id[1], __xidcmd->id[2]);
-+
-+ if (atomic_decrement_val (&__xidcmd->cntr) == 0)
-+ lll_futex_wake (&__xidcmd->cntr, 1, LLL_PRIVATE);
-+
-+ /* Reset the SETXID flag. */
-+ struct pthread *self = THREAD_SELF;
-+ int flags = THREAD_GETMEM (self, cancelhandling);
-+ THREAD_SETMEM (self, cancelhandling, flags & ~SETXID_BITMASK);
-+
-+ /* And release the futex. */
-+ self->setxid_futex = 1;
-+ lll_futex_wake (&self->setxid_futex, 1, LLL_PRIVATE);
-+}
-+
-+
-+/* When using __thread for this, we do it in libc so as not
-+ to give libpthread its own TLS segment just for this. */
-+extern void **__libc_dl_error_tsd (void) __attribute__ ((const));
-+
-+
-+/* This can be set by the debugger before initialization is complete. */
-+static bool __nptl_initial_report_events;
-+
-+void
-+__pthread_initialize_minimal_internal (void)
-+{
-+#ifndef SHARED
-+ /* Unlike in the dynamically linked case the dynamic linker has not
-+ taken care of initializing the TLS data structures. */
-+ __libc_setup_tls (TLS_TCB_SIZE, TLS_TCB_ALIGN);
-+
-+ /* We must prevent gcc from being clever and move any of the
-+ following code ahead of the __libc_setup_tls call. This function
-+ will initialize the thread register which is subsequently
-+ used. */
-+ __asm __volatile ("");
-+#endif
-+
-+ /* Minimal initialization of the thread descriptor. */
-+ struct pthread *pd = THREAD_SELF;
-+ INTERNAL_SYSCALL_DECL (err);
-+ pd->pid = pd->tid = INTERNAL_SYSCALL (set_tid_address, err, 1, &pd->tid);
-+ THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
-+ THREAD_SETMEM (pd, user_stack, true);
-+ if (LLL_LOCK_INITIALIZER != 0)
-+ THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER);
-+#if HP_TIMING_AVAIL
-+ THREAD_SETMEM (pd, cpuclock_offset, GL(dl_cpuclock_offset));
-+#endif
-+
-+ /* Initialize the robust mutex data. */
-+#ifdef __PTHREAD_MUTEX_HAVE_PREV
-+ pd->robust_prev = &pd->robust_head;
-+#endif
-+ pd->robust_head.list = &pd->robust_head;
-+#ifdef __NR_set_robust_list
-+ pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
-+ - offsetof (pthread_mutex_t,
-+ __data.__list.__next));
-+ int res = INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head,
-+ sizeof (struct robust_list_head));
-+ if (INTERNAL_SYSCALL_ERROR_P (res, err))
-+#endif
-+ set_robust_list_not_avail ();
-+
-+#ifndef __ASSUME_PRIVATE_FUTEX
-+ /* Private futexes are always used (at least internally) so that
-+ doing the test once this early is beneficial. */
-+ {
-+ int word = 0;
-+ word = INTERNAL_SYSCALL (futex, err, 3, &word,
-+ FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1);
-+ if (!INTERNAL_SYSCALL_ERROR_P (word, err))
-+ THREAD_SETMEM (pd, header.private_futex, FUTEX_PRIVATE_FLAG);
-+ }
-+
-+ /* Private futexes have been introduced earlier than the
-+ FUTEX_CLOCK_REALTIME flag. We don't have to run the test if we
-+ know the former are not supported. This also means we know the
-+ kernel will return ENOSYS for unknown operations. */
-+ if (THREAD_GETMEM (pd, header.private_futex) != 0)
-+#endif
-+#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
-+ {
-+ int word = 0;
-+ /* NB: the syscall actually takes six parameters. The last is the
-+ bit mask. But since we will not actually wait at all the value
-+ is irrelevant. Given that passing six parameters is difficult
-+ on some architectures we just pass whatever random value the
-+ calling convention calls for to the kernel. It causes no harm. */
-+ word = INTERNAL_SYSCALL (futex, err, 5, &word,
-+ FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME
-+ | FUTEX_PRIVATE_FLAG, 1, NULL, 0);
-+ assert (INTERNAL_SYSCALL_ERROR_P (word, err));
-+ if (INTERNAL_SYSCALL_ERRNO (word, err) != ENOSYS)
-+ __set_futex_clock_realtime ();
-+ }
-+#endif
-+
-+ /* Set initial thread's stack block from 0 up to __libc_stack_end.
-+ It will be bigger than it actually is, but for unwind.c/pt-longjmp.c
-+ purposes this is good enough. */
-+ THREAD_SETMEM (pd, stackblock_size, (size_t) __libc_stack_end);
-+
-+ /* Initialize the list of all running threads with the main thread. */
-+ INIT_LIST_HEAD (&__stack_user);
-+ list_add (&pd->list, &__stack_user);
-+
-+ /* Before initializing __stack_user, the debugger could not find us and
-+ had to set __nptl_initial_report_events. Propagate its setting. */
-+ THREAD_SETMEM (pd, report_events, __nptl_initial_report_events);
-+
-+ /* Install the cancellation signal handler. If for some reason we
-+ cannot install the handler we do not abort. Maybe we should, but
-+ it is only asynchronous cancellation which is affected. */
-+ struct sigaction sa;
-+ sa.sa_sigaction = sigcancel_handler;
-+ sa.sa_flags = SA_SIGINFO;
-+ __sigemptyset (&sa.sa_mask);
-+
-+ (void) __libc_sigaction (SIGCANCEL, &sa, NULL);
-+
-+ /* Install the handle to change the threads' uid/gid. */
-+ sa.sa_sigaction = sighandler_setxid;
-+ sa.sa_flags = SA_SIGINFO | SA_RESTART;
-+
-+ (void) __libc_sigaction (SIGSETXID, &sa, NULL);
-+
-+ /* The parent process might have left the signals blocked. Just in
-+ case, unblock it. We reuse the signal mask in the sigaction
-+ structure. It is already cleared. */
-+ __sigaddset (&sa.sa_mask, SIGCANCEL);
-+ __sigaddset (&sa.sa_mask, SIGSETXID);
-+ (void) INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_UNBLOCK, &sa.sa_mask,
-+ NULL, _NSIG / 8);
-+
-+ /* Get the size of the static and alignment requirements for the TLS
-+ block. */
-+ size_t static_tls_align;
-+ _dl_get_tls_static_info (&__static_tls_size, &static_tls_align);
-+
-+ /* Make sure the size takes all the alignments into account. */
-+ if (STACK_ALIGN > static_tls_align)
-+ static_tls_align = STACK_ALIGN;
-+ __static_tls_align_m1 = static_tls_align - 1;
-+
-+ __static_tls_size = roundup (__static_tls_size, static_tls_align);
-+
-+ /* Determine the default allowed stack size. This is the size used
-+ in case the user does not specify one. */
-+ struct rlimit limit;
-+ if (getrlimit (RLIMIT_STACK, &limit) != 0
-+ || limit.rlim_cur == RLIM_INFINITY)
-+ /* The system limit is not usable. Use an architecture-specific
-+ default. */
-+ limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE;
-+ else if (limit.rlim_cur < PTHREAD_STACK_MIN)
-+ /* The system limit is unusably small.
-+ Use the minimal size acceptable. */
-+ limit.rlim_cur = PTHREAD_STACK_MIN;
-+
-+ /* Make sure it meets the minimum size that allocate_stack
-+ (allocatestack.c) will demand, which depends on the page size. */
-+ const uintptr_t pagesz = __sysconf (_SC_PAGESIZE);
-+ const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
-+ if (limit.rlim_cur < minstack)
-+ limit.rlim_cur = minstack;
-+
-+ /* Round the resource limit up to page size. */
-+ limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
-+ __default_stacksize = limit.rlim_cur;
-+
-+#ifdef SHARED
-+ /* Transfer the old value from the dynamic linker's internal location. */
-+ *__libc_dl_error_tsd () = *(*GL(dl_error_catch_tsd)) ();
-+ GL(dl_error_catch_tsd) = &__libc_dl_error_tsd;
-+
-+ /* Make __rtld_lock_{,un}lock_recursive use pthread_mutex_{,un}lock,
-+ keep the lock count from the ld.so implementation. */
-+ GL(dl_rtld_lock_recursive) = (void *) INTUSE (__pthread_mutex_lock);
-+ GL(dl_rtld_unlock_recursive) = (void *) INTUSE (__pthread_mutex_unlock);
-+ unsigned int rtld_lock_count = GL(dl_load_lock).mutex.__data.__count;
-+ GL(dl_load_lock).mutex.__data.__count = 0;
-+ while (rtld_lock_count-- > 0)
-+ INTUSE (__pthread_mutex_lock) (&GL(dl_load_lock).mutex);
-+
-+ GL(dl_make_stack_executable_hook) = &__make_stacks_executable;
-+#endif
-+
-+ GL(dl_init_static_tls) = &__pthread_init_static_tls;
-+
-+ GL(dl_wait_lookup_done) = &__wait_lookup_done;
-+
-+ /* Register the fork generation counter with the libc. */
-+#ifndef TLS_MULTIPLE_THREADS_IN_TCB
-+ __libc_multiple_threads_ptr =
-+#endif
-+ __libc_pthread_init (&__fork_generation, __reclaim_stacks,
-+ ptr_pthread_functions);
-+
-+ /* Determine whether the machine is SMP or not. */
-+ __is_smp = is_smp_system ();
-+}
-+strong_alias (__pthread_initialize_minimal_internal,
-+ __pthread_initialize_minimal)
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_broadcast.c
-@@ -0,0 +1,36 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_broadcast_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_unlock (var);
-+ return __pthread_cond_broadcast(var->compat);
-+}
-+compat_symbol (libpthread, __pthread_cond_broadcast_hppa_2_3_2,
-+ pthread_cond_broadcast, GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_destroy.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_destroy_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var)
-+{
-+ int ret;
-+ if (compat_present (var))
-+ {
-+ ret = __pthread_cond_destroy(var->compat);
-+ compat_free (var);
-+ return ret;
-+ }
-+ return 0;
-+}
-+compat_symbol (libpthread, __pthread_cond_destroy_hppa_2_3_2,
-+ pthread_cond_destroy, GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_init.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_init_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var,
-+ const pthread_condattr_t *attr)
-+{
-+ /* All other compat functions expect an initialized lock. */
-+ compat_init (var);
-+ compat_malloc_nolock (var);
-+ return __pthread_cond_init (var->compat, attr);
-+}
-+compat_symbol (libpthread, __pthread_cond_init_hppa_2_3_2, pthread_cond_init,
-+ GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_signal.c
-@@ -0,0 +1,36 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_signal_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_unlock (var);
-+ return __pthread_cond_signal(var->compat);
-+}
-+compat_symbol (libpthread, __pthread_cond_signal_hppa_2_3_2,
-+ pthread_cond_signal, GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_timedwait.c
-@@ -0,0 +1,44 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include <time.h>
-+#include "pthreadP.h"
-+
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_timedwait_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var,
-+ pthread_mutex_hppa_2_0_t *mutex,
-+ const struct timespec *abstime)
-+{
-+ compat_lock (var);
-+ compat_lock (mutex);
-+ compat_malloc (var);
-+ compat_malloc (mutex);
-+ compat_mutex_copy (mutex);
-+ compat_unlock (mutex);
-+ compat_unlock (var);
-+ return __pthread_cond_timedwait (var->compat, mutex->compat, abstime);
-+}
-+compat_symbol (libpthread, __pthread_cond_timedwait_hppa_2_3_2,
-+ pthread_cond_timedwait, GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_cond_wait.c
-@@ -0,0 +1,41 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_3_2, GLIBC_2_10)
-+int
-+__pthread_cond_wait_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *var,
-+ pthread_mutex_hppa_2_0_t *mutex)
-+{
-+ compat_lock (var);
-+ compat_lock (mutex);
-+ compat_malloc (var);
-+ compat_malloc (mutex);
-+ compat_mutex_copy (mutex);
-+ compat_unlock (mutex);
-+ compat_unlock (var);
-+ return __pthread_cond_wait (var->compat, mutex->compat);
-+}
-+compat_symbol (libpthread, __pthread_cond_wait_hppa_2_3_2,
-+ pthread_cond_wait, GLIBC_2_3_2);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_destroy.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_destroy_hppa_2_0 (pthread_mutex_hppa_2_0_t *var)
-+{
-+ int ret;
-+ if (compat_present (var))
-+ {
-+ ret = __pthread_mutex_destroy(var->compat);
-+ compat_free (var);
-+ return ret;
-+ }
-+ return 0;
-+}
-+compat_symbol (libpthread, __pthread_mutex_destroy_hppa_2_0,
-+ pthread_mutex_destroy, GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_init.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_init_hppa_2_0 (pthread_mutex_hppa_2_0_t *var,
-+ const pthread_mutexattr_t *attr)
-+{
-+ /* All other compat functions expect an initialized lock. */
-+ compat_init (var);
-+ compat_malloc_nolock (var);
-+ return __pthread_mutex_init (var->compat, attr);
-+}
-+compat_symbol (libpthread, __pthread_mutex_init_hppa_2_0, pthread_mutex_init,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_lock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_lock_hppa_2_0 (pthread_mutex_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_mutex_copy (var);
-+ compat_unlock (var);
-+ return __pthread_mutex_lock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_mutex_lock_hppa_2_0, pthread_mutex_lock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_timedlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include <time.h>
-+#include "pthreadP.h"
-+
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_timedlock_hppa_2_0 (pthread_mutex_hppa_2_0_t *var,
-+ const struct timespec abs_timeout)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_mutex_copy (var);
-+ compat_unlock (var);
-+ return __pthread_mutex_timedlock (var->compat, abs_timeout);
-+}
-+compat_symbol (libpthread, __pthread_mutex_timedlock_hppa_2_0, pthread_mutex_timedlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_trylock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_trylock_hppa_2_0 (pthread_mutex_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_mutex_copy (var);
-+ compat_unlock (var);
-+ return __pthread_mutex_trylock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_mutex_trylock_hppa_2_0, pthread_mutex_trylock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_mutex_unlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_mutex_unlock_hppa_2_0 (pthread_mutex_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_mutex_copy (var);
-+ compat_unlock (var);
-+ return __pthread_mutex_unlock(var->compat);
-+}
-+compat_symbol (libpthread, __pthread_mutex_unlock_hppa_2_0, pthread_mutex_unlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_destroy.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_destroy_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ int ret;
-+ if (compat_present (var))
-+ {
-+ ret = __pthread_rwlock_destroy(var->compat);
-+ compat_free (var);
-+ return ret;
-+ }
-+ return 0;
-+}
-+compat_symbol (libpthread, __pthread_rwlock_destroy_hppa_2_0,
-+ pthread_rwlock_destroy, GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_init.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_init_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var,
-+ const pthread_rwlockattr_t *attr)
-+{
-+ /* All other compat functions expect an initialized lock. */
-+ compat_init (var);
-+ compat_malloc_nolock (var);
-+ return __pthread_rwlock_init (var->compat, attr);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_init_hppa_2_0, pthread_rwlock_init,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_rdlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_rdlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_rdlock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_rdlock_hppa_2_0, pthread_rwlock_rdlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_timedrdlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include <time.h>
-+#include "pthreadP.h"
-+
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_timedrdlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var,
-+ const struct timespec *abs_timeout)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_timedrdlock (var->compat, abs_timeout);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_timedrdlock_hppa_2_0, pthread_rwlock_timedrdlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_timedwrlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include <time.h>
-+#include "pthreadP.h"
-+
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_timedwrlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var,
-+ const struct timespec *abs_timeout)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_timedwrlock (var->compat, abs_timeout);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_timedwrlock_hppa_2_0, pthread_rwlock_timedwrlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_tryrdlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_tryrdlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_tryrdlock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_tryrdlock_hppa_2_0, pthread_rwlock_tryrdlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_trywrlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_trywrlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_trywrlock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_trywrlock_hppa_2_0, pthread_rwlock_trywrlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_unlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_unlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_unlock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_unlock_hppa_2_0, pthread_rwlock_unlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/old_hppa_pthread_rwlock_wrlock.c
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <errno.h>
-+#include "pthreadP.h"
-+#include <shlib-compat.h>
-+
-+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_10)
-+int
-+__pthread_rwlock_wrlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *var)
-+{
-+ compat_lock (var);
-+ compat_malloc (var);
-+ compat_rwlock_copy (var);
-+ compat_unlock (var);
-+ return __pthread_rwlock_wrlock (var->compat);
-+}
-+compat_symbol (libpthread, __pthread_rwlock_wrlock_hppa_2_0, pthread_rwlock_wrlock,
-+ GLIBC_2_0);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread-functions.h
-@@ -0,0 +1,133 @@
-+/* Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 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>
-+#include <setjmp.h>
-+#include <internaltypes.h>
-+#include <sysdep.h>
-+
-+struct xid_command;
-+
-+/* Data type shared with libc. The libc uses it to pass on calls to
-+ the thread functions. */
-+struct pthread_functions
-+{
-+ int (*ptr_pthread_attr_destroy) (pthread_attr_t *);
-+ int (*ptr___pthread_attr_init_2_0) (pthread_attr_t *);
-+ int (*ptr___pthread_attr_init_2_1) (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_cond_broadcast_2_0) (pthread_cond_2_0_t *);
-+ int (*ptr___pthread_cond_destroy_2_0) (pthread_cond_2_0_t *);
-+ int (*ptr___pthread_cond_init_2_0) (pthread_cond_2_0_t *,
-+ const pthread_condattr_t *);
-+ int (*ptr___pthread_cond_signal_2_0) (pthread_cond_2_0_t *);
-+ int (*ptr___pthread_cond_wait_2_0) (pthread_cond_2_0_t *, pthread_mutex_t *);
-+ int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *,
-+ pthread_mutex_t *,
-+ const struct timespec *);
-+ int (*ptr___pthread_cond_broadcast_hppa_2_3_2) (pthread_cond_hppa_2_3_2_t *);
-+ int (*ptr___pthread_cond_destroy_hppa_2_3_2) (pthread_cond_hppa_2_3_2_t *);
-+ int (*ptr___pthread_cond_init_hppa_2_3_2) (pthread_cond_hppa_2_3_2_t *,
-+ const pthread_condattr_t *);
-+ int (*ptr___pthread_cond_signal_hppa_2_3_2) (pthread_cond_hppa_2_3_2_t *);
-+ int (*ptr___pthread_cond_wait_hppa_2_3_2) (pthread_cond_hppa_2_3_2_t *, pthread_mutex_hppa_2_0_t *);
-+ int (*ptr___pthread_cond_timedwait_hppa_2_3_2) (pthread_cond_hppa_2_3_2_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_unlock) (pthread_mutex_t *);
-+
-+ int (*ptr___pthread_mutex_destroy_hppa_2_0) (pthread_mutex_hppa_2_0_t *);
-+ int (*ptr___pthread_mutex_init_hppa_2_0) (pthread_mutex_hppa_2_0_t *,
-+ const pthread_mutexattr_t *);
-+ int (*ptr___pthread_mutex_lock_hppa_2_0) (pthread_mutex_hppa_2_0_t *);
-+ int (*ptr___pthread_mutex_unlock_hppa_2_0) (pthread_mutex_hppa_2_0_t *);
-+
-+ pthread_t (*ptr_pthread_self) (void);
-+ int (*ptr_pthread_setcancelstate) (int, int *);
-+ int (*ptr_pthread_setcanceltype) (int, int *);
-+ void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *);
-+ 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__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer *,
-+ void (*) (void *), void *);
-+ void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *,
-+ int);
-+#define HAVE_PTR_NTHREADS
-+ unsigned int *ptr_nthreads;
-+ void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *)
-+ __attribute ((noreturn)) __cleanup_fct_attribute;
-+ void (*ptr__nptl_deallocate_tsd) (void);
-+ int (*ptr__nptl_setxid) (struct xid_command *);
-+ void (*ptr_freeres) (void);
-+};
-+
-+/* Variable in libc.so. */
-+extern struct pthread_functions __libc_pthread_functions attribute_hidden;
-+extern int __libc_pthread_functions_init attribute_hidden;
-+
-+#ifdef PTR_DEMANGLE
-+# define PTHFCT_CALL(fct, params) \
-+ ({ __typeof (__libc_pthread_functions.fct) __p; \
-+ __p = __libc_pthread_functions.fct; \
-+ PTR_DEMANGLE (__p); \
-+ __p params; })
-+#else
-+# define PTHFCT_CALL(fct, params) \
-+ __libc_pthread_functions.fct params
-+#endif
-+
-+#endif /* pthread-functions.h */
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthreadP.h
-@@ -0,0 +1,621 @@
-+/* Copyright (C) 2002-2007, 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Ulrich Drepper <drepper@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, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#ifndef _PTHREADP_H
-+#define _PTHREADP_H 1
-+
-+#include <pthread.h>
-+#include <setjmp.h>
-+#include <stdbool.h>
-+#include <sys/syscall.h>
-+#include "descr.h"
-+#include <tls.h>
-+#include <lowlevellock.h>
-+#include <stackinfo.h>
-+#include <internaltypes.h>
-+#include <pthread-functions.h>
-+#include <atomic.h>
-+#include <kernel-features.h>
-+
-+
-+/* Atomic operations on TLS memory. */
-+#ifndef THREAD_ATOMIC_CMPXCHG_VAL
-+# define THREAD_ATOMIC_CMPXCHG_VAL(descr, member, new, old) \
-+ atomic_compare_and_exchange_val_acq (&(descr)->member, new, old)
-+#endif
-+
-+#ifndef THREAD_ATOMIC_BIT_SET
-+# define THREAD_ATOMIC_BIT_SET(descr, member, bit) \
-+ atomic_bit_set (&(descr)->member, bit)
-+#endif
-+
-+
-+/* Adaptive mutex definitions. */
-+#ifndef MAX_ADAPTIVE_COUNT
-+# define MAX_ADAPTIVE_COUNT 100
-+#endif
-+
-+
-+/* Magic cookie representing robust mutex with dead owner. */
-+#define PTHREAD_MUTEX_INCONSISTENT INT_MAX
-+/* Magic cookie representing not recoverable robust mutex. */
-+#define PTHREAD_MUTEX_NOTRECOVERABLE (INT_MAX - 1)
-+
-+
-+/* Internal mutex type value. */
-+enum
-+{
-+ PTHREAD_MUTEX_KIND_MASK_NP = 3,
-+ PTHREAD_MUTEX_ROBUST_NORMAL_NP = 16,
-+ PTHREAD_MUTEX_ROBUST_RECURSIVE_NP
-+ = PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_RECURSIVE_NP,
-+ PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP
-+ = PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
-+ PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP
-+ = PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
-+ PTHREAD_MUTEX_PRIO_INHERIT_NP = 32,
-+ PTHREAD_MUTEX_PI_NORMAL_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_NORMAL,
-+ PTHREAD_MUTEX_PI_RECURSIVE_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
-+ PTHREAD_MUTEX_PI_ERRORCHECK_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
-+ PTHREAD_MUTEX_PI_ADAPTIVE_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
-+ PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NORMAL_NP,
-+ PTHREAD_MUTEX_PI_ROBUST_RECURSIVE_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_RECURSIVE_NP,
-+ PTHREAD_MUTEX_PI_ROBUST_ERRORCHECK_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP,
-+ PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP
-+ = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP,
-+ PTHREAD_MUTEX_PRIO_PROTECT_NP = 64,
-+ PTHREAD_MUTEX_PP_NORMAL_NP
-+ = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_NORMAL,
-+ PTHREAD_MUTEX_PP_RECURSIVE_NP
-+ = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
-+ PTHREAD_MUTEX_PP_ERRORCHECK_NP
-+ = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
-+ PTHREAD_MUTEX_PP_ADAPTIVE_NP
-+ = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP
-+};
-+#define PTHREAD_MUTEX_PSHARED_BIT 128
-+
-+#define PTHREAD_MUTEX_TYPE(m) \
-+ ((m)->__data.__kind & 127)
-+
-+#if LLL_PRIVATE == 0 && LLL_SHARED == 128
-+# define PTHREAD_MUTEX_PSHARED(m) \
-+ ((m)->__data.__kind & 128)
-+#else
-+# define PTHREAD_MUTEX_PSHARED(m) \
-+ (((m)->__data.__kind & 128) ? LLL_SHARED : LLL_PRIVATE)
-+#endif
-+
-+/* The kernel when waking robust mutexes on exit never uses
-+ FUTEX_PRIVATE_FLAG FUTEX_WAKE. */
-+#define PTHREAD_ROBUST_MUTEX_PSHARED(m) LLL_SHARED
-+
-+/* Ceiling in __data.__lock. __data.__lock is signed, so don't
-+ use the MSB bit in there, but in the mask also include that bit,
-+ so that the compiler can optimize & PTHREAD_MUTEX_PRIO_CEILING_MASK
-+ masking if the value is then shifted down by
-+ PTHREAD_MUTEX_PRIO_CEILING_SHIFT. */
-+#define PTHREAD_MUTEX_PRIO_CEILING_SHIFT 19
-+#define PTHREAD_MUTEX_PRIO_CEILING_MASK 0xfff80000
-+
-+
-+/* Flags in mutex attr. */
-+#define PTHREAD_MUTEXATTR_PROTOCOL_SHIFT 28
-+#define PTHREAD_MUTEXATTR_PROTOCOL_MASK 0x30000000
-+#define PTHREAD_MUTEXATTR_PRIO_CEILING_SHIFT 12
-+#define PTHREAD_MUTEXATTR_PRIO_CEILING_MASK 0x00fff000
-+#define PTHREAD_MUTEXATTR_FLAG_ROBUST 0x40000000
-+#define PTHREAD_MUTEXATTR_FLAG_PSHARED 0x80000000
-+#define PTHREAD_MUTEXATTR_FLAG_BITS \
-+ (PTHREAD_MUTEXATTR_FLAG_ROBUST | PTHREAD_MUTEXATTR_FLAG_PSHARED \
-+ | PTHREAD_MUTEXATTR_PROTOCOL_MASK | PTHREAD_MUTEXATTR_PRIO_CEILING_MASK)
-+
-+
-+/* Check whether rwlock prefers readers. */
-+#define PTHREAD_RWLOCK_PREFER_READER_P(rwlock) \
-+ ((rwlock)->__data.__flags == 0)
-+
-+
-+/* Bits used in robust mutex implementation. */
-+#define FUTEX_WAITERS 0x80000000
-+#define FUTEX_OWNER_DIED 0x40000000
-+#define FUTEX_TID_MASK 0x3fffffff
-+
-+
-+/* Internal variables. */
-+
-+
-+/* Default stack size. */
-+extern size_t __default_stacksize attribute_hidden;
-+
-+/* Size and alignment of static TLS block. */
-+extern size_t __static_tls_size attribute_hidden;
-+extern size_t __static_tls_align_m1 attribute_hidden;
-+
-+/* Flag whether the machine is SMP or not. */
-+extern int __is_smp attribute_hidden;
-+
-+/* Thread descriptor handling. */
-+extern list_t __stack_user;
-+hidden_proto (__stack_user)
-+
-+/* Attribute handling. */
-+extern struct pthread_attr *__attr_list attribute_hidden;
-+extern int __attr_list_lock attribute_hidden;
-+
-+/* First available RT signal. */
-+extern int __current_sigrtmin attribute_hidden;
-+/* Last available RT signal. */
-+extern int __current_sigrtmax attribute_hidden;
-+
-+/* Concurrency handling. */
-+extern int __concurrency_level attribute_hidden;
-+
-+/* Thread-local data key handling. */
-+extern struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX];
-+hidden_proto (__pthread_keys)
-+
-+/* Number of threads running. */
-+extern unsigned int __nptl_nthreads attribute_hidden;
-+
-+#ifndef __ASSUME_SET_ROBUST_LIST
-+/* Negative if we do not have the system call and we can use it. */
-+extern int __set_robust_list_avail attribute_hidden;
-+#endif
-+
-+/* Thread Priority Protection. */
-+extern int __sched_fifo_min_prio attribute_hidden;
-+extern int __sched_fifo_max_prio attribute_hidden;
-+extern void __init_sched_fifo_prio (void) attribute_hidden;
-+extern int __pthread_tpp_change_priority (int prev_prio, int new_prio)
-+ attribute_hidden;
-+extern int __pthread_current_priority (void) attribute_hidden;
-+
-+/* The library can run in debugging mode where it performs a lot more
-+ tests. */
-+extern int __pthread_debug attribute_hidden;
-+/** For now disable debugging support. */
-+#if 0
-+# define DEBUGGING_P __builtin_expect (__pthread_debug, 0)
-+# define INVALID_TD_P(pd) (DEBUGGING_P && __find_in_stack_list (pd) == NULL)
-+# define INVALID_NOT_TERMINATED_TD_P(pd) INVALID_TD_P (pd)
-+#else
-+# define DEBUGGING_P 0
-+/* Simplified test. This will not catch all invalid descriptors but
-+ is better than nothing. And if the test triggers the thread
-+ descriptor is guaranteed to be invalid. */
-+# define INVALID_TD_P(pd) __builtin_expect ((pd)->tid <= 0, 0)
-+# define INVALID_NOT_TERMINATED_TD_P(pd) __builtin_expect ((pd)->tid < 0, 0)
-+#endif
-+
-+
-+/* Cancellation test. */
-+#define CANCELLATION_P(self) \
-+ do { \
-+ int cancelhandling = THREAD_GETMEM (self, cancelhandling); \
-+ if (CANCEL_ENABLED_AND_CANCELED (cancelhandling)) \
-+ { \
-+ THREAD_SETMEM (self, result, PTHREAD_CANCELED); \
-+ __do_cancel (); \
-+ } \
-+ } while (0)
-+
-+
-+extern void __pthread_unwind (__pthread_unwind_buf_t *__buf)
-+ __cleanup_fct_attribute __attribute ((__noreturn__))
-+#if !defined SHARED && !defined IS_IN_libpthread
-+ weak_function
-+#endif
-+ ;
-+extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
-+ __cleanup_fct_attribute __attribute ((__noreturn__))
-+#ifndef SHARED
-+ weak_function
-+#endif
-+ ;
-+extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
-+ __cleanup_fct_attribute;
-+extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
-+ __cleanup_fct_attribute;
-+#if defined NOT_IN_libc && defined IS_IN_libpthread
-+hidden_proto (__pthread_unwind)
-+hidden_proto (__pthread_unwind_next)
-+hidden_proto (__pthread_register_cancel)
-+hidden_proto (__pthread_unregister_cancel)
-+# ifdef SHARED
-+extern void attribute_hidden pthread_cancel_init (void);
-+extern void __unwind_freeres (void);
-+# endif
-+#endif
-+
-+
-+/* Called when a thread reacts on a cancellation request. */
-+static inline void
-+__attribute ((noreturn, always_inline))
-+__do_cancel (void)
-+{
-+ struct pthread *self = THREAD_SELF;
-+
-+ /* Make sure we get no more cancellations. */
-+ THREAD_ATOMIC_BIT_SET (self, cancelhandling, EXITING_BIT);
-+
-+ __pthread_unwind ((__pthread_unwind_buf_t *)
-+ THREAD_GETMEM (self, cleanup_jmp_buf));
-+}
-+
-+
-+/* Set cancellation mode to asynchronous. */
-+#define CANCEL_ASYNC() \
-+ __pthread_enable_asynccancel ()
-+/* Reset to previous cancellation mode. */
-+#define CANCEL_RESET(oldtype) \
-+ __pthread_disable_asynccancel (oldtype)
-+
-+#if !defined NOT_IN_libc
-+/* Same as CANCEL_ASYNC, but for use in libc.so. */
-+# define LIBC_CANCEL_ASYNC() \
-+ __libc_enable_asynccancel ()
-+/* Same as CANCEL_RESET, but for use in libc.so. */
-+# define LIBC_CANCEL_RESET(oldtype) \
-+ __libc_disable_asynccancel (oldtype)
-+# define LIBC_CANCEL_HANDLED() \
-+ __asm (".globl " __SYMBOL_PREFIX "__libc_enable_asynccancel"); \
-+ __asm (".globl " __SYMBOL_PREFIX "__libc_disable_asynccancel")
-+#elif defined NOT_IN_libc && defined IS_IN_libpthread
-+# define LIBC_CANCEL_ASYNC() CANCEL_ASYNC ()
-+# define LIBC_CANCEL_RESET(val) CANCEL_RESET (val)
-+# define LIBC_CANCEL_HANDLED() \
-+ __asm (".globl " __SYMBOL_PREFIX "__pthread_enable_asynccancel"); \
-+ __asm (".globl " __SYMBOL_PREFIX "__pthread_disable_asynccancel")
-+#elif defined NOT_IN_libc && defined IS_IN_librt
-+# define LIBC_CANCEL_ASYNC() \
-+ __librt_enable_asynccancel ()
-+# define LIBC_CANCEL_RESET(val) \
-+ __librt_disable_asynccancel (val)
-+# define LIBC_CANCEL_HANDLED() \
-+ __asm (".globl " __SYMBOL_PREFIX "__librt_enable_asynccancel"); \
-+ __asm (".globl " __SYMBOL_PREFIX "__librt_disable_asynccancel")
-+#else
-+# define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */
-+# define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */
-+# define LIBC_CANCEL_HANDLED() /* Nothing. */
-+#endif
-+
-+/* The signal used for asynchronous cancelation. */
-+#define SIGCANCEL __SIGRTMIN
-+
-+
-+/* Signal needed for the kernel-supported POSIX timer implementation.
-+ We can reuse the cancellation signal since we can distinguish
-+ cancellation from timer expirations. */
-+#define SIGTIMER SIGCANCEL
-+
-+
-+/* Signal used to implement the setuid et.al. functions. */
-+#define SIGSETXID (__SIGRTMIN + 1)
-+
-+/* Used to communicate with signal handler. */
-+extern struct xid_command *__xidcmd attribute_hidden;
-+
-+
-+/* Internal prototypes. */
-+
-+/* Thread list handling. */
-+extern struct pthread *__find_in_stack_list (struct pthread *pd)
-+ attribute_hidden internal_function;
-+
-+/* Deallocate a thread's stack after optionally making sure the thread
-+ descriptor is still valid. */
-+extern void __free_tcb (struct pthread *pd) attribute_hidden internal_function;
-+
-+/* Free allocated stack. */
-+extern void __deallocate_stack (struct pthread *pd)
-+ attribute_hidden internal_function;
-+
-+/* Mark all the stacks except for the current one as available. This
-+ function also re-initializes the lock for the stack cache. */
-+extern void __reclaim_stacks (void) attribute_hidden;
-+
-+/* Make all threads's stacks executable. */
-+extern int __make_stacks_executable (void **stack_endp)
-+ internal_function attribute_hidden;
-+
-+/* longjmp handling. */
-+extern void __pthread_cleanup_upto (__jmp_buf target, char *targetframe);
-+#if defined NOT_IN_libc && defined IS_IN_libpthread
-+hidden_proto (__pthread_cleanup_upto)
-+#endif
-+
-+
-+/* Functions with versioned interfaces. */
-+extern int __pthread_create_2_1 (pthread_t *newthread,
-+ const pthread_attr_t *attr,
-+ void *(*start_routine) (void *), void *arg);
-+extern int __pthread_create_2_0 (pthread_t *newthread,
-+ const pthread_attr_t *attr,
-+ void *(*start_routine) (void *), void *arg);
-+extern int __pthread_attr_init_2_1 (pthread_attr_t *attr);
-+extern int __pthread_attr_init_2_0 (pthread_attr_t *attr);
-+
-+
-+/* Event handlers for libthread_db interface. */
-+extern void __nptl_create_event (void);
-+extern void __nptl_death_event (void);
-+hidden_proto (__nptl_create_event)
-+hidden_proto (__nptl_death_event)
-+
-+/* Register the generation counter in the libpthread with the libc. */
-+#ifdef TLS_MULTIPLE_THREADS_IN_TCB
-+extern void __libc_pthread_init (unsigned long int *ptr,
-+ void (*reclaim) (void),
-+ const struct pthread_functions *functions)
-+ internal_function;
-+#else
-+extern int *__libc_pthread_init (unsigned long int *ptr,
-+ void (*reclaim) (void),
-+ const struct pthread_functions *functions)
-+ internal_function;
-+
-+/* Variable set to a nonzero value if more than one thread runs or ran. */
-+extern int __pthread_multiple_threads attribute_hidden;
-+/* Pointer to the corresponding variable in libc. */
-+extern int *__libc_multiple_threads_ptr attribute_hidden;
-+#endif
-+
-+/* Find a thread given its TID. */
-+extern struct pthread *__find_thread_by_id (pid_t tid) attribute_hidden
-+#ifdef SHARED
-+;
-+#else
-+weak_function;
-+#define __find_thread_by_id(tid) \
-+ (__find_thread_by_id ? (__find_thread_by_id) (tid) : (struct pthread *) NULL)
-+#endif
-+
-+extern void __pthread_init_static_tls (struct link_map *) attribute_hidden;
-+
-+
-+/* Namespace save aliases. */
-+extern int __pthread_getschedparam (pthread_t thread_id, int *policy,
-+ struct sched_param *param);
-+extern int __pthread_setschedparam (pthread_t thread_id, int policy,
-+ const struct sched_param *param);
-+extern int __pthread_setcancelstate (int state, int *oldstate);
-+extern int __pthread_mutex_init (pthread_mutex_t *__mutex,
-+ __const pthread_mutexattr_t *__mutexattr);
-+extern int __pthread_mutex_init_internal (pthread_mutex_t *__mutex,
-+ __const pthread_mutexattr_t *__mutexattr)
-+ attribute_hidden;
-+extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex);
-+extern int __pthread_mutex_destroy_internal (pthread_mutex_t *__mutex)
-+ attribute_hidden;
-+extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex);
-+extern int __pthread_mutex_lock (pthread_mutex_t *__mutex);
-+extern int __pthread_mutex_lock_internal (pthread_mutex_t *__mutex)
-+ attribute_hidden;
-+extern int __pthread_mutex_cond_lock (pthread_mutex_t *__mutex)
-+ attribute_hidden internal_function;
-+extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex);
-+extern int __pthread_mutex_unlock_internal (pthread_mutex_t *__mutex)
-+ attribute_hidden;
-+extern int __pthread_mutex_unlock_usercnt (pthread_mutex_t *__mutex,
-+ int __decr)
-+ attribute_hidden internal_function;
-+
-+extern int __pthread_mutex_init_hppa_2_0 (pthread_mutex_hppa_2_0_t *__mutex,
-+ __const pthread_mutexattr_t *__mutexattr);
-+extern int __pthread_mutex_destroy_hppa_2_0 (pthread_mutex_hppa_2_0_t *__mutex);
-+extern int __pthread_mutex_hppa_2_0_trylock_hppa_2_0 (pthread_mutex_hppa_2_0_t *_mutex);
-+extern int __pthread_mutex_lock_hppa_2_0 (pthread_mutex_hppa_2_0_t *__mutex);
-+extern int __pthread_mutex_unlock_hppa_2_0 (pthread_mutex_hppa_2_0_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_attr_destroy (pthread_attr_t *attr);
-+extern int __pthread_attr_getdetachstate (const pthread_attr_t *attr,
-+ int *detachstate);
-+extern int __pthread_attr_setdetachstate (pthread_attr_t *attr,
-+ int detachstate);
-+extern int __pthread_attr_getinheritsched (const pthread_attr_t *attr,
-+ int *inherit);
-+extern int __pthread_attr_setinheritsched (pthread_attr_t *attr, int inherit);
-+extern int __pthread_attr_getschedparam (const pthread_attr_t *attr,
-+ struct sched_param *param);
-+extern int __pthread_attr_setschedparam (pthread_attr_t *attr,
-+ const struct sched_param *param);
-+extern int __pthread_attr_getschedpolicy (const pthread_attr_t *attr,
-+ int *policy);
-+extern int __pthread_attr_setschedpolicy (pthread_attr_t *attr, int policy);
-+extern int __pthread_attr_getscope (const pthread_attr_t *attr, int *scope);
-+extern int __pthread_attr_setscope (pthread_attr_t *attr, int scope);
-+extern int __pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
-+ __attr, void **__restrict __stackaddr);
-+extern int __pthread_attr_setstackaddr (pthread_attr_t *__attr,
-+ void *__stackaddr);
-+extern int __pthread_attr_getstacksize (__const pthread_attr_t *__restrict
-+ __attr,
-+ size_t *__restrict __stacksize);
-+extern int __pthread_attr_setstacksize (pthread_attr_t *__attr,
-+ size_t __stacksize);
-+extern int __pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
-+ void **__restrict __stackaddr,
-+ size_t *__restrict __stacksize);
-+extern int __pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
-+ size_t __stacksize);
-+extern int __pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
-+ __const pthread_rwlockattr_t *__restrict
-+ __attr);
-+extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock);
-+extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock);
-+extern int __pthread_rwlock_rdlock_internal (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_wrlock_internal (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_rwlock_unlock_internal (pthread_rwlock_t *__rwlock);
-+
-+extern int __pthread_rwlock_init_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__restrict __rwlock,
-+ __const pthread_rwlockattr_t *__restrict
-+ __attr);
-+extern int __pthread_rwlock_destroy_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_rdlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_rdlock_internal_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_hppa_2_0_tryrdlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_wrlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_wrlock_internal_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_hppa_2_0_trywrlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+extern int __pthread_rwlock_unlock_hppa_2_0 (pthread_rwlock_hppa_2_0_t *__rwlock);
-+
-+extern int __pthread_cond_broadcast (pthread_cond_t *cond);
-+extern int __pthread_cond_destroy (pthread_cond_t *cond);
-+extern int __pthread_cond_init (pthread_cond_t *cond,
-+ const pthread_condattr_t *cond_attr);
-+extern int __pthread_cond_signal (pthread_cond_t *cond);
-+extern int __pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);
-+extern int __pthread_cond_timedwait (pthread_cond_t *cond,
-+ pthread_mutex_t *mutex,
-+ const struct timespec *abstime);
-+extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
-+extern int __pthread_condattr_init (pthread_condattr_t *attr);
-+extern int __pthread_key_create (pthread_key_t *key, void (*destr) (void *));
-+extern int __pthread_key_create_internal (pthread_key_t *key,
-+ void (*destr) (void *));
-+extern void *__pthread_getspecific (pthread_key_t key);
-+extern void *__pthread_getspecific_internal (pthread_key_t key);
-+extern int __pthread_setspecific (pthread_key_t key, const void *value);
-+extern int __pthread_setspecific_internal (pthread_key_t key,
-+ const void *value);
-+extern int __pthread_once (pthread_once_t *once_control,
-+ void (*init_routine) (void));
-+extern int __pthread_once_internal (pthread_once_t *once_control,
-+ void (*init_routine) (void));
-+extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
-+ void (*child) (void));
-+extern pthread_t __pthread_self (void);
-+extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
-+extern int __pthread_kill (pthread_t threadid, int signo);
-+extern void __pthread_exit (void *value);
-+extern int __pthread_setcanceltype (int type, int *oldtype);
-+extern int __pthread_enable_asynccancel (void) attribute_hidden;
-+extern void __pthread_disable_asynccancel (int oldtype)
-+ internal_function attribute_hidden;
-+
-+extern int __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond);
-+extern int __pthread_cond_destroy_2_0 (pthread_cond_2_0_t *cond);
-+extern int __pthread_cond_init_2_0 (pthread_cond_2_0_t *cond,
-+ const pthread_condattr_t *cond_attr);
-+extern int __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond);
-+extern int __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond,
-+ pthread_mutex_t *mutex,
-+ const struct timespec *abstime);
-+extern int __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond,
-+ pthread_mutex_t *mutex);
-+
-+extern int __pthread_cond_broadcast_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond);
-+extern int __pthread_cond_destroy_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond);
-+extern int __pthread_cond_init_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond,
-+ const pthread_condattr_t *cond_attr);
-+extern int __pthread_cond_signal_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond);
-+extern int __pthread_cond_timedwait_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond,
-+ pthread_mutex_hppa_2_0_t *mutex,
-+ const struct timespec *abstime);
-+extern int __pthread_cond_wait_hppa_2_3_2 (pthread_cond_hppa_2_3_2_t *cond,
-+ pthread_mutex_hppa_2_0_t *mutex);
-+
-+extern int __pthread_getaffinity_np (pthread_t th, size_t cpusetsize,
-+ cpu_set_t *cpuset);
-+
-+/* The two functions are in libc.so and not exported. */
-+extern int __libc_enable_asynccancel (void) attribute_hidden;
-+extern void __libc_disable_asynccancel (int oldtype)
-+ internal_function attribute_hidden;
-+
-+
-+/* The two functions are in librt.so and not exported. */
-+extern int __librt_enable_asynccancel (void) attribute_hidden;
-+extern void __librt_disable_asynccancel (int oldtype)
-+ internal_function attribute_hidden;
-+
-+#ifdef IS_IN_libpthread
-+/* Special versions which use non-exported functions. */
-+extern void __pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
-+ void (*routine) (void *), void *arg)
-+ attribute_hidden;
-+# undef pthread_cleanup_push
-+# define pthread_cleanup_push(routine,arg) \
-+ { struct _pthread_cleanup_buffer _buffer; \
-+ __pthread_cleanup_push (&_buffer, (routine), (arg));
-+
-+extern void __pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
-+ int execute) attribute_hidden;
-+# undef pthread_cleanup_pop
-+# define pthread_cleanup_pop(execute) \
-+ __pthread_cleanup_pop (&_buffer, (execute)); }
-+#endif
-+
-+extern void __pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
-+ void (*routine) (void *), void *arg);
-+extern void __pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
-+ int execute);
-+
-+/* Old cleanup interfaces, still used in libc.so. */
-+extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
-+ void (*routine) (void *), void *arg);
-+extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
-+ int execute);
-+extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
-+ void (*routine) (void *), void *arg);
-+extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
-+ int execute);
-+
-+extern void __nptl_deallocate_tsd (void) attribute_hidden;
-+
-+extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
-+
-+extern void __free_stacks (size_t limit) attribute_hidden;
-+
-+extern void __wait_lookup_done (void) attribute_hidden;
-+
-+#ifdef SHARED
-+# define PTHREAD_STATIC_FN_REQUIRE(name)
-+#else
-+# define PTHREAD_STATIC_FN_REQUIRE(name) __asm (".globl " #name);
-+#endif
-+
-+
-+#ifndef __NR_set_robust_list
-+/* XXX For the time being... Once we can rely on the kernel headers
-+ having the definition remove these lines. */
-+# if defined __i386__
-+# define __NR_set_robust_list 311
-+# elif defined __x86_64__
-+# define __NR_set_robust_list 273
-+# endif
-+#endif
-+
-+#endif /* pthreadP.h */
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_broadcast.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_broadcast.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_broadcast.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_destroy.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_destroy.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_destroy.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_init.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_init.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_init.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_signal.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_signal.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_signal.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_timedwait.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_timedwait.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_timedwait.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_wait.c
-@@ -0,0 +1,29 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_cond_wait.c>
-+#else
-+# include <shlib-compat.h>
-+# undef GLIBC_2_3_2
-+# define GLIBC_2_3_2 GLIBC_2_10
-+# include_next <pthread_cond_wait.c>
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_cond_lock.c
-@@ -0,0 +1,14 @@
-+#include <pthreadP.h>
-+
-+#define LLL_MUTEX_LOCK(mutex) \
-+ lll_cond_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))
-+#define LLL_MUTEX_TRYLOCK(mutex) \
-+ lll_cond_trylock ((mutex)->__data.__lock)
-+#define LLL_ROBUST_MUTEX_LOCK(mutex, id) \
-+ lll_robust_cond_lock ((mutex)->__data.__lock, id, \
-+ PTHREAD_ROBUST_MUTEX_PSHARED (mutex))
-+#define __pthread_mutex_lock __pthread_mutex_cond_lock
-+#define __pthread_mutex_lock_full __pthread_mutex_cond_lock_full
-+#define NO_INCR
-+
-+#include <nptl/pthread_mutex_lock.c>
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_destroy.c
-@@ -0,0 +1,36 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_destroy.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_mutex_destroy.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_mutex_destroy,
-+ pthread_mutex_destroy, GLIBC_2_10);
-+INTDEF(__pthread_mutex_destroy)
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_init.c
-@@ -0,0 +1,36 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_init.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_mutex_init.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_mutex_init,
-+ pthread_mutex_init, GLIBC_2_10);
-+INTDEF(__pthread_mutex_init)
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_lock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_lock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_mutex_lock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+/* The file pthread_mutex_cond_lock.c includes this
-+ file and we do not want to version that interface. */
-+# ifndef __pthread_mutex_lock
-+versioned_symbol (libpthread, __pthread_mutex_lock,
-+ pthread_mutex_lock, GLIBC_2_10);
-+strong_alias (__pthread_mutex_lock, __pthread_mutex_lock_internal)
-+# endif
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_timedlock.c
-@@ -0,0 +1,38 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_timedlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef pthread_mutex_timedlock
-+# define pthread_mutex_timedlock __pthread_mutex_timedlock
-+# include_next <pthread_mutex_timedlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef pthread_mutex_timedlock
-+versioned_symbol (libpthread, __pthread_mutex_timedlock,
-+ pthread_mutex_timedlock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_trylock.c
-@@ -0,0 +1,35 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_trylock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_mutex_trylock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_mutex_trylock,
-+ pthread_mutex_trylock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_mutex_unlock.c
-@@ -0,0 +1,36 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_mutex_unlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_mutex_unlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_mutex_unlock,
-+ pthread_mutex_unlock, GLIBC_2_10);
-+strong_alias (__pthread_mutex_unlock, __pthread_mutex_unlock_internal)
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_destroy.c
-@@ -0,0 +1,35 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_destroy.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_rwlock_destroy.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_destroy,
-+ pthread_rwlock_destroy, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_init.c
-@@ -0,0 +1,35 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_init.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_rwlock_init.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_init,
-+ pthread_rwlock_init, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_rdlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_rdlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname)
-+# include_next <pthread_rwlock_rdlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname) _weak_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_rdlock,
-+ pthread_rwlock_rdlock, GLIBC_2_10);
-+strong_alias (__pthread_rwlock_rdlock, __pthread_rwlock_rdlock_internal)
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_timedrdlock.c
-@@ -0,0 +1,38 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_timedrdlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef pthread_rwlock_timedrdlock
-+# define pthread_rwlock_timedrdlock __pthread_rwlock_timedrdlock
-+# include_next <pthread_rwlock_timedrdlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef pthread_rwlock_timedrdlock
-+versioned_symbol (libpthread, __pthread_rwlock_timedrdlock,
-+ pthread_rwlock_timedrdlock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_timedwrlock.c
-@@ -0,0 +1,38 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_timedwrlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef pthread_rwlock_timedrdlock
-+# define pthread_rwlock_timedwrlock __pthread_rwlock_timedwrlock
-+# include_next <pthread_rwlock_timedwrlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef pthread_rwlock_timedwrlock
-+versioned_symbol (libpthread, __pthread_rwlock_timedwrlock,
-+ pthread_rwlock_timedwrlock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_tryrdlock.c
-@@ -0,0 +1,35 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_tryrdlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_rwlock_tryrdlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_tryrdlock,
-+ pthread_rwlock_tryrdlock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_trywrlock.c
-@@ -0,0 +1,35 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_trywrlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# include_next <pthread_rwlock_trywrlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_trywrlock,
-+ pthread_rwlock_trywrlock, GLIBC_2_10);
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_unlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_unlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname)
-+# include_next <pthread_rwlock_unlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname) _weak_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_unlock,
-+ pthread_rwlock_unlock, GLIBC_2_10);
-+strong_alias (__pthread_rwlock_unlock, __pthread_rwlock_unlock_internal)
-+#endif
-+
---- /dev/null
-+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_rwlock_wrlock.c
-@@ -0,0 +1,40 @@
-+/* Copyright (C) 2009 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009.
-+
-+ 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 INCLUDED_SELF
-+# define INCLUDED_SELF
-+# include <pthread_rwlock_wrlock.c>
-+#else
-+# include <shlib-compat.h>
-+# include <libc-symbols.h>
-+# include "pthreadP.h"
-+# undef strong_alias
-+# define strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname)
-+# include_next <pthread_rwlock_wrlock.c>
-+# undef strong_alias
-+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-+# undef weak_alias
-+# define weak_alias(name, aliasname) _weak_alias(name, aliasname)
-+versioned_symbol (libpthread, __pthread_rwlock_wrlock,
-+ pthread_rwlock_wrlock, GLIBC_2_10);
-+strong_alias (__pthread_rwlock_wrlock, __pthread_rwlock_wrlock_internal)
-+#endif
-+
Modified: glibc-package/branches/eglibc-2.10/debian/patches/series
===================================================================
--- glibc-package/branches/eglibc-2.10/debian/patches/series 2009-09-08 20:21:56 UTC (rev 3819)
+++ glibc-package/branches/eglibc-2.10/debian/patches/series 2009-09-08 20:39:12 UTC (rev 3820)
@@ -72,8 +72,6 @@
hppa/submitted-lt.diff
hppa/submitted-nptl-carlos.diff
hppa/submitted-pie.diff
-hppa/local-hppa-nptl.diff
-hppa/local-ports-hppa-nptl.diff
hurd-i386/local-dl-dynamic-weak.diff
hurd-i386/local-enable-ldconfig.diff
Reply to: