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

[glibc] 01/01: hurd: Fix build



This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch glibc-2.27
in repository glibc.

commit ebb6ce6d6a4fb16aa589b4cddbd048fc1ff0ef7d
Author: Aurelien Jarno <aurelien@aurel32.net>
Date:   Sat Jan 6 18:50:39 2018 +0100

    hurd: Fix build
    
      * debian/sysdeps/hurd.mk: Do not add libpthread add-on since add-ons
        mechanism is no more.
      * debian/patches/hurd-i386/git-jmp_buf-macros.h.diff: New patch to fix
        build.
      * debian/patches/hurd-i386/libpthread_build.diff: Add more Implies to fix
        build.  Drop deprecated internal_function.
      * debian/patches/hurd-i386/libpthread_includes.diff: Move headers for
        sysdeps to find them.
      * debian/patches/hurd-i386/git-glob64.diff: Fix glob symlink compatibility
        for GNU.
      * debian/patches/hurd-i386/git-hidden-def.diff: Fix reference to rtld hidden
        symbol.
      * debian/patches/hurd-i386/git-math-ulps-i386-update.diff: Update ULPs.
      * debian/patches/hurd-i386/git-glob-PATH_MAX.diff: Fix posix glob test hurd build.
---
 debian/changelog                                   |   13 +
 debian/patches/hurd-i386/git-glob-PATH_MAX.diff    |   22 +
 debian/patches/hurd-i386/git-glob64.diff           |  134 ++
 debian/patches/hurd-i386/git-hidden-def.diff       |   42 +
 .../hurd-i386/git-math-ulps-i386-update.diff       |   90 +
 debian/patches/hurd-i386/libpthread_build.diff     |   63 +-
 debian/patches/hurd-i386/libpthread_includes.diff  | 2050 ++++++++++++++++++++
 debian/patches/hurd-i386/tg-gsync-libc.diff        |    3 +-
 debian/patches/series                              |    7 +-
 debian/sysdeps/hurd.mk                             |    1 -
 10 files changed, 2418 insertions(+), 7 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 62e4987..428fd72 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,23 @@
 glibc (2.26.9000+20180105.a6d0afb5-0experimental1) UNRELEASED; urgency=medium
 
   [ Samuel Thibault ]
+  * debian/sysdeps/hurd.mk: Do not add libpthread add-on since add-ons
+    mechanism is no more.
   * debian/patches/hurd-i386/submitted-net.diff: rebased.
   * debian/patches/hurd-i386/unsubmitted-prof-eintr.diff: rebased.
   * debian/patches/hurd-i386/git-jmp_buf-macros.h.diff: New patch to fix
     build.
+  * debian/patches/hurd-i386/libpthread_build.diff: Add more Implies to fix
+    build.  Drop deprecated internal_function.
+  * debian/patches/hurd-i386/libpthread_includes.diff: Move headers for
+    sysdeps to find them.
+  * debian/patches/hurd-i386/git-glob64.diff: Fix glob symlink compatibility
+    for GNU.
+  * debian/patches/hurd-i386/git-hidden-def.diff: Fix reference to rtld hidden
+    symbol.
+  * debian/patches/hurd-i386/tg-gsync-libc.diff: Update.
+  * debian/patches/hurd-i386/git-math-ulps-i386-update.diff: Update ULPs.
+  * debian/patches/hurd-i386/git-glob-PATH_MAX.diff: Fix posix glob test hurd build.
 
   [ Aurelien Jarno ]
   * debian/control.in/main: Update Vcs-Git to point to the 2.27 branch.
diff --git a/debian/patches/hurd-i386/git-glob-PATH_MAX.diff b/debian/patches/hurd-i386/git-glob-PATH_MAX.diff
new file mode 100644
index 0000000..beafa87
--- /dev/null
+++ b/debian/patches/hurd-i386/git-glob-PATH_MAX.diff
@@ -0,0 +1,22 @@
+commit 01c7e549b2b978e69d6509864d4d067c555cb81b
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date:   Sat Jan 6 22:19:13 2018 +0100
+
+    hurd: Fix posix glob test
+    
+            * posix/tst-glob_symlinks.c [!PATH_MAX]: Define PATH_MAX macro.
+
+diff --git a/posix/tst-glob_symlinks.c b/posix/tst-glob_symlinks.c
+index 0f3478d3d0..df3baa8757 100644
+--- a/posix/tst-glob_symlinks.c
++++ b/posix/tst-glob_symlinks.c
+@@ -57,6 +57,9 @@ create_link (const char *base, const char *fname, char *linkname,
+   add_temp_file (linkname);
+ }
+ 
++#ifndef PATH_MAX
++# define PATH_MAX 1024
++#endif
+ static char valid_link[PATH_MAX];
+ static char dangling_link[PATH_MAX];
+ static char dangling_dir[PATH_MAX];
diff --git a/debian/patches/hurd-i386/git-glob64.diff b/debian/patches/hurd-i386/git-glob64.diff
new file mode 100644
index 0000000..c53224a
--- /dev/null
+++ b/debian/patches/hurd-i386/git-glob64.diff
@@ -0,0 +1,134 @@
+commit f417d92c1714406b85d887c96736801498962ff5
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date:   Sat Jan 6 22:28:36 2018 +0100
+
+    hurd: Fix glob64 compatibility symbols
+    
+    This follows ccf970c7a ('posix: Add compat glob symbol to not follow
+    dangling symbols') by adding to gnu/ the same compatibility as for Linux.
+    
+            * sysdeps/gnu/glob64.c (__glob): Define macro instead of glob macro.
+            (__glob64): Define GLIBC_2_27 versioned symbol instead of glob64.
+            * sysdeps/gnu/glob-lstat-compat.c: New file.
+            * sysdeps/gnu/glob64-lstat-compat.c: New file.
+
+diff --git a/sysdeps/gnu/glob-lstat-compat.c b/sysdeps/gnu/glob-lstat-compat.c
+new file mode 100644
+index 0000000000..7cb52d4fee
+--- /dev/null
++++ b/sysdeps/gnu/glob-lstat-compat.c
+@@ -0,0 +1,38 @@
++/* Compat glob which does not use gl_lstat for GLOB_ALTDIRFUNC.
++   GNU version
++   Copyright (C) 2017-2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <sys/stat.h>
++#include <shlib-compat.h>
++
++#define glob64 __no_glob64_decl
++#include <glob.h>
++#undef glob64
++
++#define __glob __glob_lstat_compat
++
++#define GLOB_ATTRIBUTE attribute_compat_text_section
++
++/* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
++#define GLOB_NO_LSTAT
++
++#include <posix/glob.c>
++
++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_27)
++compat_symbol (libc, __glob_lstat_compat, glob, GLIBC_2_0);
++#endif
+diff --git a/sysdeps/gnu/glob64-lstat-compat.c b/sysdeps/gnu/glob64-lstat-compat.c
+new file mode 100644
+index 0000000000..e237407e0b
+--- /dev/null
++++ b/sysdeps/gnu/glob64-lstat-compat.c
+@@ -0,0 +1,48 @@
++/* Compat glob which does not use gl_lstat for GLOB_ALTDIRFUNC.
++   GNU version
++   Copyright (C) 2017-2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <dirent.h>
++#include <glob.h>
++#include <sys/stat.h>
++#include <shlib-compat.h>
++
++#define dirent dirent64
++#define __readdir(dirp) __readdir64 (dirp)
++
++#define glob_t glob64_t
++#define __glob __glob64_lstat_compat
++#define globfree globfree64
++
++#undef stat
++#define stat stat64
++#undef __stat
++#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf)
++
++#define COMPILE_GLOB64	1
++
++#define GLOB_ATTRIBUTE attribute_compat_text_section
++
++/* Avoid calling gl_lstat with GLOB_ALTDIRFUNC.  */
++#define GLOB_NO_LSTAT
++
++#include <posix/glob.c>
++
++#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_27)
++compat_symbol (libc, __glob64_lstat_compat, glob64, GLIBC_2_1);
++#endif
+diff --git a/sysdeps/gnu/glob64.c b/sysdeps/gnu/glob64.c
+index 52e97e2f6a..42b5b225ca 100644
+--- a/sysdeps/gnu/glob64.c
++++ b/sysdeps/gnu/glob64.c
+@@ -6,8 +6,7 @@
+ #define __readdir(dirp) __readdir64 (dirp)
+ 
+ #define glob_t glob64_t
+-#define glob(pattern, flags, errfunc, pglob) \
+-  glob64 (pattern, flags, errfunc, pglob)
++#define __glob __glob64
+ #define globfree(pglob) globfree64 (pglob)
+ 
+ #undef stat
+@@ -19,4 +18,6 @@
+ 
+ #include <posix/glob.c>
+ 
+-libc_hidden_def (glob64)
++libc_hidden_def (__glob64)
++versioned_symbol (libc, __glob64, glob64, GLIBC_2_27);
++libc_hidden_ver (__glob64, glob64)
diff --git a/debian/patches/hurd-i386/git-hidden-def.diff b/debian/patches/hurd-i386/git-hidden-def.diff
new file mode 100644
index 0000000..467da5d
--- /dev/null
+++ b/debian/patches/hurd-i386/git-hidden-def.diff
@@ -0,0 +1,42 @@
+commit 4a5ce6e908c6b45d976fb78b65434b489dc570b6
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date:   Sat Jan 6 18:18:49 2018 +0100
+
+    hurd: Fix build without NO_HIDDEN
+    
+    * sysdeps/i386/dl-tlsdesc.S (_dl_tlsdesc_dynamic) [NO_RTLD_HIDDEN]: Call
+    JUMPTARGET (___tls_get_addr) instead of HIDDEN_JUMPTARGET (___tls_get_addr).
+    * sysdeps/x86_64/dl-tlsdesc.S (_dl_tlsdesc_dynamic): Likewise.
+
+diff --git a/sysdeps/i386/dl-tlsdesc.S b/sysdeps/i386/dl-tlsdesc.S
+index 8c2c40b7ec..2c4764d1aa 100644
+--- a/sysdeps/i386/dl-tlsdesc.S
++++ b/sysdeps/i386/dl-tlsdesc.S
+@@ -126,7 +126,11 @@ _dl_tlsdesc_dynamic:
+ 	.p2align 4,,7
+ .Lslow:
+ 	cfi_adjust_cfa_offset (28)
++#ifdef NO_RTLD_HIDDEN
++	call	JUMPTARGET (___tls_get_addr)
++#else
+ 	call	HIDDEN_JUMPTARGET (___tls_get_addr)
++#endif
+ 	jmp	.Lret
+ 	cfi_endproc
+ 	.size	_dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
+diff --git a/sysdeps/x86_64/dl-tlsdesc.S b/sysdeps/x86_64/dl-tlsdesc.S
+index 6c4e6b6c91..437bd8cde7 100644
+--- a/sysdeps/x86_64/dl-tlsdesc.S
++++ b/sysdeps/x86_64/dl-tlsdesc.S
+@@ -128,7 +128,11 @@ _dl_tlsdesc_dynamic:
+ 	movq	%r10, 40(%rsp)
+ 	movq	%r11, 48(%rsp)
+ 	/* %rdi already points to the tlsinfo data structure.  */
++#ifdef NO_RTLD_HIDDEN
++	call	JUMPTARGET (__tls_get_addr)
++#else
+ 	call	HIDDEN_JUMPTARGET (__tls_get_addr)
++#endif
+ 	movq	8(%rsp), %rdx
+ 	movq	16(%rsp), %rcx
+ 	movq	24(%rsp), %r8
diff --git a/debian/patches/hurd-i386/git-math-ulps-i386-update.diff b/debian/patches/hurd-i386/git-math-ulps-i386-update.diff
new file mode 100644
index 0000000..633b841
--- /dev/null
+++ b/debian/patches/hurd-i386/git-math-ulps-i386-update.diff
@@ -0,0 +1,90 @@
+commit 107a35a5751586926dbc0fed4d044a34f79c084e
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date:   Sat Jan 6 22:09:42 2018 +0100
+
+    i386: Regenerate libm-test-ulps for for gcc 7 on i686
+    
+            * sysdeps/i386/fpu/libm-test-ulps: Regenerated for GCC 7 with
+            "-O2 -march=i686".
+
+diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
+index 93e12af4e5..862a74e09d 100644
+--- a/sysdeps/i386/fpu/libm-test-ulps
++++ b/sysdeps/i386/fpu/libm-test-ulps
+@@ -935,10 +935,10 @@ ldouble: 1
+ 
+ Function: Real part of "ccosh_downward":
+ double: 1
+-float: 1
++float: 2
+ float128: 2
+ idouble: 1
+-ifloat: 1
++ifloat: 2
+ ifloat128: 2
+ ildouble: 3
+ ldouble: 3
+@@ -1637,20 +1637,20 @@ ldouble: 1
+ 
+ Function: Real part of "ctan_downward":
+ double: 1
+-float: 1
++float: 2
+ float128: 4
+ idouble: 1
+-ifloat: 1
++ifloat: 2
+ ifloat128: 4
+ ildouble: 5
+ ldouble: 5
+ 
+ Function: Imaginary part of "ctan_downward":
+ double: 2
+-float: 1
++float: 2
+ float128: 5
+ idouble: 2
+-ifloat: 1
++ifloat: 2
+ ifloat128: 5
+ ildouble: 4
+ ldouble: 4
+@@ -2099,10 +2099,10 @@ ldouble: 4
+ 
+ Function: "j1":
+ double: 2
+-float: 1
++float: 2
+ float128: 4
+ idouble: 2
+-ifloat: 1
++ifloat: 2
+ ifloat128: 4
+ ildouble: 1
+ ldouble: 1
+@@ -2643,10 +2643,10 @@ ldouble: 1
+ 
+ Function: "y0_downward":
+ double: 2
+-float: 2
++float: 3
+ float128: 4
+ idouble: 2
+-ifloat: 2
++ifloat: 3
+ ifloat128: 4
+ ildouble: 5
+ ldouble: 5
+@@ -2723,10 +2723,10 @@ ldouble: 4
+ 
+ Function: "yn_downward":
+ double: 2
+-float: 2
++float: 3
+ float128: 5
+ idouble: 2
+-ifloat: 2
++ifloat: 3
+ ifloat128: 5
+ ildouble: 5
+ ldouble: 5
diff --git a/debian/patches/hurd-i386/libpthread_build.diff b/debian/patches/hurd-i386/libpthread_build.diff
index 45704a3..05631a4 100644
--- a/debian/patches/hurd-i386/libpthread_build.diff
+++ b/debian/patches/hurd-i386/libpthread_build.diff
@@ -1,8 +1,63 @@
---- a/sysdeps/mach/hurd/Implies.orig	2015-08-20 21:22:34.000000000 +0000
-+++ b/sysdeps/mach/hurd/Implies	2015-08-20 21:22:48.000000000 +0000
-@@ -3,3 +3,5 @@
+Index: glibc-2.27/sysdeps/mach/hurd/Implies
+===================================================================
+--- glibc-2.27.orig/sysdeps/mach/hurd/Implies
++++ glibc-2.27/sysdeps/mach/hurd/Implies
+@@ -3,3 +3,9 @@
  gnu
  # The Hurd provides a rough superset of the functionality of 4.4 BSD.
  unix/bsd
-+# libpthread provides generic bits
++libpthread
++../libpthread/sysdeps/mach/hurd
++../libpthread/sysdeps/hurd
++../libpthread/sysdeps/mach
++../libpthread/sysdeps/posix
 +../libpthread/sysdeps/generic
+Index: glibc-2.27/sysdeps/mach/hurd/i386/Implies
+===================================================================
+--- glibc-2.27.orig/sysdeps/mach/hurd/i386/Implies
++++ glibc-2.27/sysdeps/mach/hurd/i386/Implies
+@@ -1 +1,3 @@
+ mach/hurd/x86
++../libpthread/sysdeps/mach/hurd/i386
++../libpthread/sysdeps/i386
+Index: glibc-2.27/sysdeps/mach/hurd/Subdirs
+===================================================================
+--- glibc-2.27.orig/sysdeps/mach/hurd/Subdirs
++++ glibc-2.27/sysdeps/mach/hurd/Subdirs
+@@ -7,3 +7,5 @@
+ # way with more somewhat expensive `make' invocations.
+ 
+ first hurd
++
++libpthread
+Index: glibc-2.27/libpthread/sysdeps/pthread/pthread-functions.h
+===================================================================
+--- glibc-2.27.orig/libpthread/sysdeps/pthread/pthread-functions.h
++++ glibc-2.27/libpthread/sysdeps/pthread/pthread-functions.h
+@@ -133,7 +133,7 @@ struct pthread_functions
+ extern struct pthread_functions __libc_pthread_functions attribute_hidden;
+ extern int __libc_pthread_functions_init attribute_hidden;
+ 
+-void __libc_pthread_init (const struct pthread_functions *functions) internal_function;
++void __libc_pthread_init (const struct pthread_functions *functions);
+ 
+ # define PTHFCT_CALL(fct, params) \
+     __libc_pthread_functions.fct params
+Index: glibc-2.27/libpthread/libc_pthread_init.c
+===================================================================
+--- glibc-2.27.orig/libpthread/libc_pthread_init.c
++++ glibc-2.27/libpthread/libc_pthread_init.c
+@@ -21,7 +21,6 @@
+ #include <pthread-functions.h>
+ 
+ void
+-internal_function
+ __libc_pthread_init (const struct pthread_functions *functions)
+ {
+ #ifdef SHARED
+Index: glibc-2.27/sysdeps/libpthread/Makeconfig
+===================================================================
+--- /dev/null
++++ glibc-2.27/sysdeps/libpthread/Makeconfig
+@@ -0,0 +1 @@
++include $(..)libpthread/Makeconfig
diff --git a/debian/patches/hurd-i386/libpthread_includes.diff b/debian/patches/hurd-i386/libpthread_includes.diff
new file mode 100644
index 0000000..8c7f050
--- /dev/null
+++ b/debian/patches/hurd-i386/libpthread_includes.diff
@@ -0,0 +1,2050 @@
+Index: glibc-2.27/libpthread/include/pthread/pthread.h
+===================================================================
+--- glibc-2.27.orig/libpthread/include/pthread/pthread.h
++++ /dev/null
+@@ -1,852 +0,0 @@
+-/* Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008, 2009, 2010
+-     Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Library General Public License as
+-   published by the Free Software Foundation; either version 2 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
+-   Library General Public License for more details.
+-
+-   You should have received a copy of the GNU Library General Public
+-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
+-
+-/*
+- *	POSIX Threads Extension: ???			<pthread.h>
+- */
+-
+-#ifndef _PTHREAD_H
+-#define _PTHREAD_H	1
+-
+-#include <features.h>
+-
+-#include <sys/cdefs.h>
+-#ifndef __extern_inline
+-/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+-   inline semantics, unless -fgnu89-inline is used.  */
+-# if !defined __cplusplus || __GNUC_PREREQ (4,3)
+-#  if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+-#   define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+-#   if __GNUC_PREREQ (4,3)
+-#    define __extern_always_inline \
+-   extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
+-#   else
+-#    define __extern_always_inline \
+-   extern __always_inline __attribute__ ((__gnu_inline__))
+-#   endif
+-#  else
+-#   define __extern_inline extern __inline
+-#   define __extern_always_inline extern __always_inline
+-#  endif
+-# endif
+-#endif
+-
+-#include <sched.h>
+-#include <time.h>
+-
+-__BEGIN_DECLS
+-
+-#include <pthread/pthreadtypes.h>
+-
+-#include <bits/pthread.h>
+-
+-/* Possible values for the process shared attribute.  */
+-#define PTHREAD_PROCESS_PRIVATE __PTHREAD_PROCESS_PRIVATE
+-#define PTHREAD_PROCESS_SHARED __PTHREAD_PROCESS_SHARED
+-
+-
+-/* Thread attributes.  */
+-
+-/* Possible values for the inheritsched attribute.  */
+-#define PTHREAD_EXPLICIT_SCHED __PTHREAD_EXPLICIT_SCHED
+-#define PTHREAD_INHERIT_SCHED __PTHREAD_INHERIT_SCHED
+-
+-/* Possible values for the `contentionscope' attribute.  */
+-#define PTHREAD_SCOPE_SYSTEM __PTHREAD_SCOPE_SYSTEM
+-#define PTHREAD_SCOPE_PROCESS __PTHREAD_SCOPE_PROCESS
+-
+-/* Possible values for the `detachstate' attribute.  */
+-#define PTHREAD_CREATE_JOINABLE __PTHREAD_CREATE_JOINABLE
+-#define PTHREAD_CREATE_DETACHED __PTHREAD_CREATE_DETACHED
+-
+-#include <bits/thread-attr.h>
+-
+-/* Initialize the thread attribute object in *ATTR to the default
+-   values.  */
+-extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1));
+-
+-/* Destroy the thread attribute object in *ATTR.  */
+-extern int pthread_attr_destroy (pthread_attr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the inheritsched attribute in *ATTR in
+-   *INHERITSCHED.  */
+-extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict __attr,
+-					 int *__restrict __inheritsched)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the inheritsched attribute in *ATTR to
+-   INHERITSCHED.  */
+-extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
+-					 int __inheritsched)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the schedparam attribute in *ATTR in *PARAM.  */
+-extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
+-				       struct sched_param *__restrict __param)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the schedparam attribute in *ATTR to PARAM.  */
+-extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+-				       const struct sched_param *__restrict
+-				       __param) __THROW __nonnull ((1, 2));
+-
+-
+-/* Return the value of the schedpolicy attribute in *ATTR to *POLICY.  */
+-extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict __attr,
+-					int *__restrict __policy)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the schedpolicy attribute in *ATTR to POLICY.  */
+-extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr,
+-					int __policy)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the contentionscope attribute in *ATTR in
+-   *CONTENTIONSCOPE.  */
+-extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+-				  int *__restrict __contentionscope)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the contentionscope attribute in *ATTR to
+-   CONTENTIONSCOPE.  */
+-extern int pthread_attr_setscope (pthread_attr_t *__attr,
+-				  int __contentionscope)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the stackaddr attribute in *ATTR in
+-   *STACKADDR.  */
+-extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict __attr,
+-				      void **__restrict __stackaddr)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the stackaddr attribute in *ATTR to STACKADDR.  */
+-extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
+-				      void *__stackaddr)
+-	__THROW __nonnull ((1));
+-
+-
+-#ifdef __USE_XOPEN2K
+-/* Return the value of the stackaddr and stacksize attributes in *ATTR
+-   in *STACKADDR and *STACKSIZE respectively.  */
+-extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+-				  void **__restrict __stackaddr,
+-				  size_t *__restrict __stacksize)
+-	__THROW __nonnull ((1, 2, 3));
+-
+-/* Set the value of the stackaddr and stacksize attributes in *ATTR to
+-   STACKADDR and STACKSIZE respectively.  */
+-extern int pthread_attr_setstack (pthread_attr_t *__attr,
+-				  void *__stackaddr,
+-				  size_t __stacksize)
+-	__THROW __nonnull ((1));
+-#endif
+-
+-
+-/* Return the value of the detachstate attribute in *ATTR in
+-   *DETACHSTATE.  */
+-extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+-					int *__detachstate)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the detachstate attribute in *ATTR to
+-   DETACHSTATE.  */
+-extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
+-					int __detachstate)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the guardsize attribute in *ATTR in
+-   *GUARDSIZE.  */
+-extern int pthread_attr_getguardsize (const pthread_attr_t *__restrict __attr,
+-				      size_t *__restrict __guardsize)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the guardsize attribute in *ATTR to GUARDSIZE.  */
+-extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
+-				      size_t __guardsize)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the stacksize attribute in *ATTR in
+-   *STACKSIZE.  */
+-extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict __attr,
+-				      size_t *__restrict __stacksize)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the stacksize attribute in *ATTR to STACKSIZE.  */
+-extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
+-				      size_t __stacksize)
+-	__THROW __nonnull ((1));
+-
+-#ifdef __USE_GNU
+-/* Initialize thread attribute *ATTR with attributes corresponding to the
+-   already running thread THREAD.  It shall be called on an uninitialized ATTR
+-   and destroyed with pthread_attr_destroy when no longer needed.  */
+-extern int pthread_getattr_np (pthread_t __thr, pthread_attr_t *__attr)
+-	__THROW __nonnull ((2));
+-#endif
+-
+-
+-/* Create a thread with attributes given by ATTR, executing
+-   START_ROUTINE with argument ARG.  */
+-extern int pthread_create (pthread_t *__restrict __threadp,
+-			   __const pthread_attr_t *__restrict __attr,
+-			   void *(*__start_routine)(void *),
+-			   void *__restrict __arg) __THROWNL __nonnull ((1, 3));
+-
+-/* Terminate the current thread and make STATUS available to any
+-   thread that might join us.  */
+-extern void pthread_exit (void *__status) __attribute__ ((__noreturn__));
+-
+-/* Make calling thread wait for termination of thread THREAD.  Return
+-   the exit status of the thread in *STATUS.  */
+-extern int pthread_join (pthread_t __threadp, void **__status);
+-
+-/* Indicate that the storage for THREAD can be reclaimed when it
+-   terminates.  */
+-extern int pthread_detach (pthread_t __threadp);
+-
+-/* Compare thread IDs T1 and T2.  Return nonzero if they are equal, 0
+-   if they are not.  */
+-extern int pthread_equal (pthread_t __t1, pthread_t __t2);
+-
+-# ifdef __USE_EXTERN_INLINES
+-
+-__extern_inline int
+-pthread_equal (pthread_t __t1, pthread_t __t2)
+-{
+-  return __pthread_equal (__t1, __t2);
+-}
+-
+-# endif /* Use extern inlines.  */
+-
+-
+-/* Return the thread ID of the calling thread.  */
+-extern pthread_t pthread_self (void) __THROW;
+-
+-
+-/* Mutex attributes.  */
+-
+-#define PTHREAD_PRIO_NONE_NP __PTHREAD_PRIO_NONE
+-#define PTHREAD_PRIO_INHERIT_NP __PTHREAD_PRIO_INHERIT
+-#define PTHREAD_PRIO_PROTECT_NP __PTHREAD_PRIO_PROTECT
+-#ifdef __USE_UNIX98
+-#define PTHREAD_PRIO_NONE PTHREAD_PRIO_NONE_NP
+-#define PTHREAD_PRIO_INHERIT PTHREAD_PRIO_INHERIT_NP
+-#define PTHREAD_PRIO_PROTECT PTHREAD_PRIO_PROTECT_NP
+-#endif
+-
+-#define PTHREAD_MUTEX_TIMED_NP __PTHREAD_MUTEX_TIMED
+-#define PTHREAD_MUTEX_ERRORCHECK_NP __PTHREAD_MUTEX_ERRORCHECK
+-#define PTHREAD_MUTEX_RECURSIVE_NP __PTHREAD_MUTEX_RECURSIVE
+-#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+-#define PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_TIMED_NP
+-#define PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_ERRORCHECK_NP
+-#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
+-#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
+-#endif
+-#ifdef __USE_GNU
+-/* For compatibility.  */
+-#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_TIMED_NP
+-#endif
+-
+-#ifdef __USE_XOPEN2K
+-#define PTHREAD_MUTEX_STALLED __PTHREAD_MUTEX_STALLED
+-#define PTHREAD_MUTEX_ROBUST __PTHREAD_MUTEX_ROBUST
+-#endif
+-
+-#include <bits/mutex-attr.h>
+-
+-/* Initialize the mutex attribute object in *ATTR to the default
+-   values.  */
+-extern int pthread_mutexattr_init(pthread_mutexattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the mutex attribute structure in *ATTR.  */
+-extern int pthread_mutexattr_destroy(pthread_mutexattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-
+-#ifdef __USE_UNIX98
+-/* Return the value of the prioceiling attribute in *ATTR in
+-   *PRIOCEILING.  */
+-extern int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *__restrict __attr,
+-					    int *__restrict __prioceiling)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the prioceiling attribute in *ATTR to
+-   PRIOCEILING.  */
+-extern int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *__attr,
+-					    int __prioceiling)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the protocol attribute in *ATTR in
+-   *PROTOCOL.  */
+-extern int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *__restrict __attr,
+-					 int *__restrict __protocol)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the protocol attribute in *ATTR to PROTOCOL.  */
+-extern int pthread_mutexattr_setprotocol(pthread_mutexattr_t *__attr,
+-					 int __protocol)
+-	__THROW __nonnull ((1));
+-#endif
+-
+-
+-/* Return the value of the process shared attribute in *ATTR in
+-   *PSHARED.  */
+-extern int pthread_mutexattr_getpshared(const pthread_mutexattr_t *__restrict __attr,
+-					int *__restrict __pshared)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the process shared attribute in *ATTR to
+-   PSHARED.  */
+-extern int pthread_mutexattr_setpshared(pthread_mutexattr_t *__attr,
+-					int __pshared)
+-	__THROW __nonnull ((1));
+-
+-
+-#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+-/* Return the value of the type attribute in *ATTR in *TYPE.  */
+-extern int pthread_mutexattr_gettype(const pthread_mutexattr_t *__restrict __attr,
+-				     int *__restrict __type)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the type attribute in *ATTR to TYPE.  */
+-extern int pthread_mutexattr_settype(pthread_mutexattr_t *__attr,
+-				     int __type)
+-	__THROW __nonnull ((1));
+-#endif
+-
+-
+-/* Mutexes.  */
+-
+-#include <bits/mutex.h>
+-
+-#define PTHREAD_MUTEX_INITIALIZER __PTHREAD_MUTEX_INITIALIZER
+-/* Static initializer for recursive mutexes.  */
+-
+-#ifdef __USE_GNU
+-# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+-  __PTHREAD_ERRORCHECK_MUTEX_INITIALIZER
+-# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+-  __PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+-#endif
+-
+-/* Create a mutex with attributes given by ATTR and store it in
+-   *__MUTEX.  */
+-extern int pthread_mutex_init (struct __pthread_mutex *__restrict __mutex,
+-			       const pthread_mutexattr_t *__restrict __attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the mutex __MUTEX.  */
+-extern int pthread_mutex_destroy (struct __pthread_mutex *__mutex)
+-	__THROW __nonnull ((1));
+-
+-/* Wait until lock for MUTEX becomes available and lock it.  */
+-extern int pthread_mutex_lock (pthread_mutex_t *__mutex);
+-
+-/* Try to lock MUTEX.  */
+-extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
+-	__THROWNL __nonnull ((1));
+-
+-#ifdef __USE_XOPEN2K
+-/* Try to lock MUTEX, block until *ABSTIME if it is already held.  */
+-extern int pthread_mutex_timedlock (struct __pthread_mutex *__restrict __mutex,
+-				    const struct timespec *__restrict __abstime)
+-	__THROWNL __nonnull ((1, 2));
+-#endif
+-
+-/* Unlock MUTEX.  */
+-extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
+-	__THROWNL __nonnull ((1));
+-
+-/* Transfer ownership of the mutex MUTEX to the thread TID.  The
+-   caller must own the lock.  */
+-extern int __pthread_mutex_transfer_np (struct __pthread_mutex *__mutex,
+-					pthread_t __tid)
+-	__THROWNL __nonnull ((1));
+-
+-
+-#ifdef __USE_UNIX98
+-/* Return the priority ceiling of mutex *MUTEX in *PRIOCEILING.  */
+-extern int pthread_mutex_getprioceiling (const pthread_mutex_t *__restrict __mutex,
+-					 int *__restrict __prioceiling)
+-	__THROW __nonnull ((1, 2));
+-
+-/* After acquiring the mutex *MUTEX, set its priority ceiling to PRIO
+-   and return the old priority ceiling in *OLDPRIO.  Before returning,
+-   release the mutex.  */
+-extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
+-					 int __prio, int *__restrict __oldprio)
+-	__THROW __nonnull ((1, 3));
+-#endif
+-
+-#ifdef __USE_XOPEN2K8
+-
+-/* Declare the state protected by robust mutex MTXP as consistent. */
+-extern int pthread_mutex_consistent (pthread_mutex_t *__mtxp)
+-  __THROW __nonnull ((1));
+-
+-#  ifdef __USE_GNU
+-extern int pthread_mutex_consistent_np (pthread_mutex_t *__mtxp)
+-  __THROW __nonnull ((1));
+-#  endif
+-#endif
+-
+-
+-
+-/* Condition attributes.  */
+-
+-#include <bits/condition-attr.h>
+-
+-/* Initialize the condition attribute in *ATTR to the default
+-   values.  */
+-extern int pthread_condattr_init (pthread_condattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the condition attribute structure in *ATTR.  */
+-extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-
+-#ifdef __USE_XOPEN2K
+-/* Return the value of the clock attribute in *ATTR in *CLOCK_ID.  */
+-extern int pthread_condattr_getclock (const pthread_condattr_t *__restrict __attr,
+-				      __clockid_t *__restrict __clock_id)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the clock attribute in *ATTR to CLOCK_ID.  */
+-extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
+-				      __clockid_t __clock_id)
+-	__THROW __nonnull ((1));
+-#endif
+-
+-
+-/* Return the value of the process shared attribute in *ATTR in
+-   *PSHARED.  */
+-extern int pthread_condattr_getpshared (const pthread_condattr_t *__restrict __attr,
+-					int *__restrict __pshared)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the process shared attribute in *ATTR to
+-   PSHARED.  */
+-extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
+-					int __pshared)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Condition variables.  */
+-
+-#include <bits/condition.h>
+-
+-#define PTHREAD_COND_INITIALIZER __PTHREAD_COND_INITIALIZER
+-
+-extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+-			      const pthread_condattr_t *__restrict __attr)
+-	__THROW __nonnull ((1));
+-
+-extern int pthread_cond_destroy (pthread_cond_t *__cond)
+-	__THROW __nonnull ((1));
+-
+-/* Unblock at least one of the threads that are blocked on condition
+-   variable COND.  */
+-extern int pthread_cond_signal (pthread_cond_t *__cond)
+-	__THROWNL __nonnull ((1));
+-
+-/* Unblock all threads that are blocked on condition variable COND.  */
+-extern int pthread_cond_broadcast (pthread_cond_t *__cond)
+-	__THROWNL __nonnull ((1));
+-
+-/* Block on condition variable COND.  MUTEX should be held by the
+-   calling thread.  On success, MUTEX will be held by the calling
+-   thread.  */
+-extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+-			      pthread_mutex_t *__restrict __mutex)
+-	 __nonnull ((1, 2));
+-
+-/* Block on condition variable COND.  MUTEX should be held by the
+-   calling thread. On success, MUTEX will be held by the calling
+-   thread.  If the time specified by ABSTIME passes, ETIMEDOUT is
+-   returned, and MUTEX will nevertheless be held.  */
+-extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+-				   pthread_mutex_t *__restrict __mutex,
+-				   __const struct timespec *__restrict __abstime)
+-	 __nonnull ((1, 2, 3));
+-
+-
+-/* Spin locks.  */
+-
+-#ifdef __USE_XOPEN2K
+-
+-# include <bits/spin-lock.h>
+-
+-#define PTHREAD_SPINLOCK_INITIALIZER __PTHREAD_SPIN_LOCK_INITIALIZER
+-
+-/* Destroy the spin lock object LOCK.  */
+-extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
+-	__nonnull ((1));
+-
+-/* Initialize the spin lock object LOCK.  PSHARED determines whether
+-   the spin lock can be operated upon by multiple processes.  */
+-extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+-	__nonnull ((1));
+-
+-/* Lock the spin lock object LOCK.  If the lock is held by another
+-   thread spin until it becomes available.  */
+-extern int pthread_spin_lock (pthread_spinlock_t *__lock)
+-	__nonnull ((1));
+-
+-/* Lock the spin lock object LOCK.  Fail if the lock is held by
+-   another thread.  */
+-extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
+-	__nonnull ((1));
+-
+-/* Unlock the spin lock object LOCK.  */
+-extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
+-	__nonnull ((1));
+-
+-# if defined __USE_EXTERN_INLINES && defined _LIBC
+-
+-# include <bits/spin-lock-inline.h>
+-
+-__extern_inline int
+-pthread_spin_destroy (pthread_spinlock_t *__lock)
+-{
+-  return __pthread_spin_destroy (__lock);
+-}
+-
+-__extern_inline int
+-pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+-{
+-  return __pthread_spin_init (__lock, __pshared);
+-}
+-
+-__extern_inline int
+-pthread_spin_lock (pthread_spinlock_t *__lock)
+-{
+-  return __pthread_spin_lock (__lock);
+-}
+-
+-__extern_inline int
+-pthread_spin_trylock (pthread_spinlock_t *__lock)
+-{
+-  return __pthread_spin_trylock (__lock);
+-}
+-
+-__extern_inline int
+-pthread_spin_unlock (pthread_spinlock_t *__lock)
+-{
+-  return __pthread_spin_unlock (__lock);
+-}
+-
+-# endif /* Use extern inlines.  */
+-
+-#endif /* XPG6.  */
+-
+-
+-/* rwlock attributes.  */
+-
+-#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+-
+-#include <bits/rwlock-attr.h>
+-
+-/* Initialize rwlock attribute object in *ATTR to the default
+-   values.  */
+-extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the rwlock attribute object in *ATTR.  */
+-extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the process shared attribute in *ATTR in
+-   *PSHARED.  */
+-extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *__restrict __attr,
+-					  int *__restrict __pshared)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the process shared atrribute in *ATTR to
+-   PSHARED.  */
+-extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
+-					  int __pshared)
+-	__THROW __nonnull ((1));
+-
+-
+-/* rwlocks.  */
+-
+-#include <bits/rwlock.h>
+-
+-#define PTHREAD_RWLOCK_INITIALIZER __PTHREAD_RWLOCK_INITIALIZER
+-/* Create a rwlock object with attributes given by ATTR and strore the
+-   result in *RWLOCK.  */
+-extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+-				const pthread_rwlockattr_t *__restrict __attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the rwlock *RWLOCK.  */
+-extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
+-	__THROW __nonnull ((1));
+-
+-/* Acquire the rwlock *RWLOCK for reading.  */
+-extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
+-	__THROWNL __nonnull ((1));
+-
+-/* Acquire the rwlock *RWLOCK for reading.  */
+-extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
+-	__THROWNL __nonnull ((1));
+-
+-# ifdef __USE_XOPEN2K
+-/* Acquire the rwlock *RWLOCK for reading blocking until *ABSTIME if
+-   it is already held.  */
+-extern int pthread_rwlock_timedrdlock (struct __pthread_rwlock *__restrict __rwlock,
+-				       const struct timespec *__restrict __abstime)
+-	__THROWNL __nonnull ((1, 2));
+-# endif
+-
+-/* Acquire the rwlock *RWLOCK for writing.  */
+-extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
+-	__THROWNL __nonnull ((1));
+-
+-/* Try to acquire the rwlock *RWLOCK for writing.  */
+-extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
+-	__THROWNL __nonnull ((1));
+-
+-# ifdef __USE_XOPEN2K
+-/* Acquire the rwlock *RWLOCK for writing blocking until *ABSTIME if
+-   it is already held.  */
+-extern int pthread_rwlock_timedwrlock (struct __pthread_rwlock *__restrict __rwlock,
+-				       const struct timespec *__restrict __abstime)
+-	__THROWNL __nonnull ((1, 2));
+-# endif
+-
+-/* Release the lock held by the current thread on *RWLOCK.  */
+-extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
+-	__THROWNL __nonnull ((1));
+-
+-#endif /* __USE_UNIX98 || __USE_XOPEN2K */
+-
+-
+-
+-/* Cancelation.  */
+-
+-/* Register a cleanup handler.  */
+-extern void pthread_cleanup_push (void (*__routine) (void *), void *__arg);
+-
+-/* Unregister a cleanup handler.  */
+-extern void pthread_cleanup_pop (int __execute);
+-
+-#include <bits/cancelation.h>
+-
+-#define pthread_cleanup_push(rt, rtarg) __pthread_cleanup_push(rt, rtarg)
+-#define pthread_cleanup_pop(execute) __pthread_cleanup_pop(execute)
+-
+-#define PTHREAD_CANCEL_DISABLE 0
+-#define PTHREAD_CANCEL_ENABLE 1
+-
+-/* Return the calling thread's cancelation state in *OLDSTATE and set
+-   its state to STATE.  */
+-extern int pthread_setcancelstate (int __state, int *__oldstate);
+-
+-#define PTHREAD_CANCEL_DEFERRED 0
+-#define PTHREAD_CANCEL_ASYNCHRONOUS 1
+-
+-/* Return the calling thread's cancelation type in *OLDTYPE and set
+-   its type to TYPE.  */
+-extern int pthread_setcanceltype (int __type, int *__oldtype);
+-
+-/* Value returned by pthread_join if the target thread was
+-   canceled.  */
+-#define PTHREAD_CANCELED ((void *) -1)
+-
+-/* Cancel THEAD.  */
+-extern int pthread_cancel (pthread_t __thr);
+-
+-/* Add an explicit cancelation point.  */
+-extern void pthread_testcancel (void);
+-
+-
+-/* Barriers attributes.  */
+-
+-#ifdef __USE_XOPEN2K
+-
+-#include <bits/barrier-attr.h>
+-
+-/* Initialize barrier attribute object in *ATTR to the default
+-   values.  */
+-extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy the barrier attribute object in *ATTR.  */
+-extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Return the value of the process shared attribute in *ATTR in
+-   *PSHARED.  */
+-extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *__restrict __attr,
+-					   int *__restrict __pshared)
+-	__THROW __nonnull ((1, 2));
+-
+-/* Set the value of the process shared atrribute in *ATTR to
+-   PSHARED.  */
+-extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
+-					   int __pshared)
+-	__THROW __nonnull ((1));
+-
+-
+-/* Barriers.  */
+-
+-#include <bits/barrier.h>
+-
+-/* Returned by pthread_barrier_wait to exactly one thread each time a
+-   barrier is passed.  */
+-#define PTHREAD_BARRIER_SERIAL_THREAD -1
+-
+-/* Initialize barrier BARRIER.  */
+-extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+-				const pthread_barrierattr_t *__restrict __attr,
+-				unsigned __count)
+-	__THROW __nonnull ((1));
+-
+-/* Destroy barrier BARRIER.  */
+-extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
+-	__THROW __nonnull ((1));
+-
+-/* Wait on barrier BARRIER.  */
+-extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
+-	__THROWNL __nonnull ((1));
+-
+-#endif /* __USE_XOPEN2K */
+-
+-
+-
+-/* Thread specific data.  */
+-
+-#include <bits/thread-specific.h>
+-
+-/* Create a thread specific data key in KEY visible to all threads.
+-   On thread destruction, DESTRUCTOR shall be called with the thread
+-   specific data associate with KEY if it is not NULL.  */
+-extern int pthread_key_create (pthread_key_t *__key,
+-			       void (*__destructor) (void *))
+-	__THROW __nonnull ((1));
+-
+-/* Delete the thread specific data key KEY.  The associated destructor
+-   function is not called.  */
+-extern int pthread_key_delete (pthread_key_t __key) __THROW;
+-
+-/* Return the caller thread's thread specific value of KEY.  */
+-extern void *pthread_getspecific (pthread_key_t __key) __THROW;
+-
+-/* Set the caller thread's thread specific value of KEY to VALUE.  */
+-extern int pthread_setspecific (pthread_key_t __key, const void *__value)
+-	__THROW;
+-
+-
+-/* Dynamic package initialization.  */
+-
+-#include <bits/once.h>
+-
+-#define PTHREAD_ONCE_INIT __PTHREAD_ONCE_INIT
+-
+-/* Call INIT_ROUTINE if this function has never been called with
+-   *ONCE_CONTROL, otherwise do nothing.  */
+-extern int pthread_once (pthread_once_t *__once_control,
+-			 void (*__init_routine) (void)) __nonnull ((1, 2));
+-
+-
+-/* Concurrency.  */
+-
+-#ifdef __USE_UNIX98
+-/* Set the desired concurrency level to NEW_LEVEL.  */
+-extern int pthread_setconcurrency (int __new_level) __THROW;
+-
+-/* Get the current concurrency level.  */
+-extern int pthread_getconcurrency (void) __THROW;
+-#endif
+-
+-
+-/* Forking.  */
+-
+-/* Register the function PREPARE to be run before the process forks,
+-   the function PARENT to be run after a fork in the parent and the
+-   function CHILD to be run in the child after the fork.  If no
+-   handling is desired then any of PREPARE, PARENT and CHILD may be
+-   NULL.  The prepare handles will be called in the reverse order
+-   which they were registered and the parent and child handlers in the
+-   order in which they were registered.  */
+-extern int pthread_atfork (void (*__prepare) (void), void (*__parent) (void),
+-			   void (*__child) (void)) __THROW;
+-
+-
+-/* Signals (should be in <signal.h>).  */
+-
+-/* Send signal SIGNO to thread THREAD.  */
+-extern int pthread_kill (pthread_t __thr, int __signo) __THROW;
+-
+-
+-/* Time.  */
+-
+-#ifdef __USE_XOPEN2K
+-/* Return the thread cpu clock.  */
+-extern int pthread_getcpuclockid (pthread_t __thr, __clockid_t *__clock)
+-	__THROW __nonnull ((2));
+-#endif
+-
+-
+-/* Scheduling.  */
+-
+-/* Return thread THREAD's scheduling paramters.  */
+-extern int pthread_getschedparam (pthread_t __thr, int *__restrict __policy,
+-				  struct sched_param *__restrict __param)
+-	__THROW __nonnull ((2, 3));
+-
+-/* Set thread THREAD's scheduling paramters.  */
+-extern int pthread_setschedparam (pthread_t __thr, int __policy,
+-				  const struct sched_param *__param)
+-	__THROW __nonnull ((3));
+-
+-/* Set thread THREAD's scheduling priority.  */
+-extern int pthread_setschedprio (pthread_t __thr, int __prio) __THROW;
+-
+-#ifdef __USE_GNU
+-/* Yield the processor to another thread or process.
+-   This function is similar to the POSIX `sched_yield' function but
+-   might be differently implemented in the case of a m-on-n thread
+-   implementation.  */
+-extern int pthread_yield (void) __THROW;
+-#endif
+-
+-
+-/* Kernel-specific interfaces.  */
+-
+-#include <bits/pthread-np.h>
+-
+-
+-__END_DECLS
+-
+-#endif /* pthread.h */
+Index: glibc-2.27/libpthread/include/pthread/pthreadtypes.h
+===================================================================
+--- glibc-2.27.orig/libpthread/include/pthread/pthreadtypes.h
++++ /dev/null
+@@ -1,131 +0,0 @@
+-/* Copyright (C) 2000, 2002, 2005, 2008 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Library General Public License as
+-   published by the Free Software Foundation; either version 2 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
+-   Library General Public License for more details.
+-
+-   You should have received a copy of the GNU Library General Public
+-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
+-
+-/*
+- *	POSIX Threads Extension: ???			<pthreadtypes.h>
+- */
+-
+-#ifndef _PTHREADTYPES_H
+-#define _PTHREADTYPES_H	1
+-
+-#include <features.h>
+-
+-#include <bits/types.h>
+-
+-__BEGIN_DECLS
+-
+-#include <bits/pthread.h>
+-typedef __pthread_t pthread_t;
+-
+-/* Possible values for the process shared attribute.  */
+-enum __pthread_process_shared
+-  {
+-    __PTHREAD_PROCESS_PRIVATE = 0,
+-    __PTHREAD_PROCESS_SHARED
+-  };
+-
+-/* Possible values for the inheritsched attribute.  */
+-enum __pthread_inheritsched
+-  {
+-    __PTHREAD_EXPLICIT_SCHED = 0,
+-    __PTHREAD_INHERIT_SCHED
+-  };
+-
+-/* Possible values for the `contentionscope' attribute.  */
+-enum __pthread_contentionscope
+-  {
+-    __PTHREAD_SCOPE_SYSTEM = 0,
+-    __PTHREAD_SCOPE_PROCESS
+-  };
+-
+-/* Possible values for the `detachstate' attribute.  */
+-enum __pthread_detachstate
+-  {
+-    __PTHREAD_CREATE_JOINABLE = 0,
+-    __PTHREAD_CREATE_DETACHED
+-  };
+-
+-#include <bits/thread-attr.h>
+-typedef struct __pthread_attr pthread_attr_t;
+-
+-enum __pthread_mutex_protocol
+-  {
+-    __PTHREAD_PRIO_NONE= 0,
+-    __PTHREAD_PRIO_INHERIT,
+-    __PTHREAD_PRIO_PROTECT
+-  };
+-
+-enum __pthread_mutex_type
+-  {
+-    __PTHREAD_MUTEX_TIMED,
+-    __PTHREAD_MUTEX_ERRORCHECK,
+-    __PTHREAD_MUTEX_RECURSIVE
+-  };
+-
+-enum __pthread_mutex_robustness
+-  {
+-    __PTHREAD_MUTEX_STALLED,
+-    __PTHREAD_MUTEX_ROBUST = 0x100
+-  };
+-
+-#include <bits/mutex-attr.h>
+-typedef struct __pthread_mutexattr pthread_mutexattr_t;
+-
+-#include <bits/mutex.h>
+-typedef struct __pthread_mutex pthread_mutex_t;
+-
+-#include <bits/condition-attr.h>
+-typedef struct __pthread_condattr pthread_condattr_t;
+-
+-#include <bits/condition.h>
+-typedef struct __pthread_cond pthread_cond_t;
+-
+-#ifdef __USE_XOPEN2K
+-# include <bits/spin-lock.h>
+-typedef __pthread_spinlock_t pthread_spinlock_t;
+-#endif /* XPG6.  */
+-
+-#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+-
+-#include <bits/rwlock-attr.h>
+-typedef struct __pthread_rwlockattr pthread_rwlockattr_t;
+-
+-#include <bits/rwlock.h>
+-typedef struct __pthread_rwlock pthread_rwlock_t;
+-
+-#endif /* __USE_UNIX98 || __USE_XOPEN2K */
+-
+-#ifdef __USE_XOPEN2K
+-
+-#include <bits/barrier-attr.h>
+-typedef struct __pthread_barrierattr pthread_barrierattr_t;
+-
+-#include <bits/barrier.h>
+-typedef struct __pthread_barrier pthread_barrier_t;
+-
+-#endif /* __USE_XOPEN2K */
+-
+-#include <bits/thread-specific.h>
+-typedef __pthread_key pthread_key_t;
+-
+-#include <bits/once.h>
+-typedef struct __pthread_once pthread_once_t;
+-
+-__END_DECLS
+-
+-#endif /* pthreadtypes.h */
+Index: glibc-2.27/libpthread/sysdeps/generic/pthread/pthread.h
+===================================================================
+--- /dev/null
++++ glibc-2.27/libpthread/sysdeps/generic/pthread/pthread.h
+@@ -0,0 +1,852 @@
++/* Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008, 2009, 2010
++     Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Library General Public License as
++   published by the Free Software Foundation; either version 2 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
++   Library General Public License for more details.
++
++   You should have received a copy of the GNU Library General Public
++   License along with the GNU C Library; see the file COPYING.LIB.  If not,
++   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/*
++ *	POSIX Threads Extension: ???			<pthread.h>
++ */
++
++#ifndef _PTHREAD_H
++#define _PTHREAD_H	1
++
++#include <features.h>
++
++#include <sys/cdefs.h>
++#ifndef __extern_inline
++/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
++   inline semantics, unless -fgnu89-inline is used.  */
++# if !defined __cplusplus || __GNUC_PREREQ (4,3)
++#  if defined __GNUC_STDC_INLINE__ || defined __cplusplus
++#   define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
++#   if __GNUC_PREREQ (4,3)
++#    define __extern_always_inline \
++   extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
++#   else
++#    define __extern_always_inline \
++   extern __always_inline __attribute__ ((__gnu_inline__))
++#   endif
++#  else
++#   define __extern_inline extern __inline
++#   define __extern_always_inline extern __always_inline
++#  endif
++# endif
++#endif
++
++#include <sched.h>
++#include <time.h>
++
++__BEGIN_DECLS
++
++#include <pthread/pthreadtypes.h>
++
++#include <bits/pthread.h>
++
++/* Possible values for the process shared attribute.  */
++#define PTHREAD_PROCESS_PRIVATE __PTHREAD_PROCESS_PRIVATE
++#define PTHREAD_PROCESS_SHARED __PTHREAD_PROCESS_SHARED
++
++
++/* Thread attributes.  */
++
++/* Possible values for the inheritsched attribute.  */
++#define PTHREAD_EXPLICIT_SCHED __PTHREAD_EXPLICIT_SCHED
++#define PTHREAD_INHERIT_SCHED __PTHREAD_INHERIT_SCHED
++
++/* Possible values for the `contentionscope' attribute.  */
++#define PTHREAD_SCOPE_SYSTEM __PTHREAD_SCOPE_SYSTEM
++#define PTHREAD_SCOPE_PROCESS __PTHREAD_SCOPE_PROCESS
++
++/* Possible values for the `detachstate' attribute.  */
++#define PTHREAD_CREATE_JOINABLE __PTHREAD_CREATE_JOINABLE
++#define PTHREAD_CREATE_DETACHED __PTHREAD_CREATE_DETACHED
++
++#include <bits/thread-attr.h>
++
++/* Initialize the thread attribute object in *ATTR to the default
++   values.  */
++extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1));
++
++/* Destroy the thread attribute object in *ATTR.  */
++extern int pthread_attr_destroy (pthread_attr_t *__attr)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the inheritsched attribute in *ATTR in
++   *INHERITSCHED.  */
++extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict __attr,
++					 int *__restrict __inheritsched)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the inheritsched attribute in *ATTR to
++   INHERITSCHED.  */
++extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
++					 int __inheritsched)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the schedparam attribute in *ATTR in *PARAM.  */
++extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
++				       struct sched_param *__restrict __param)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the schedparam attribute in *ATTR to PARAM.  */
++extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
++				       const struct sched_param *__restrict
++				       __param) __THROW __nonnull ((1, 2));
++
++
++/* Return the value of the schedpolicy attribute in *ATTR to *POLICY.  */
++extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict __attr,
++					int *__restrict __policy)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the schedpolicy attribute in *ATTR to POLICY.  */
++extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr,
++					int __policy)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the contentionscope attribute in *ATTR in
++   *CONTENTIONSCOPE.  */
++extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
++				  int *__restrict __contentionscope)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the contentionscope attribute in *ATTR to
++   CONTENTIONSCOPE.  */
++extern int pthread_attr_setscope (pthread_attr_t *__attr,
++				  int __contentionscope)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the stackaddr attribute in *ATTR in
++   *STACKADDR.  */
++extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict __attr,
++				      void **__restrict __stackaddr)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the stackaddr attribute in *ATTR to STACKADDR.  */
++extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
++				      void *__stackaddr)
++	__THROW __nonnull ((1));
++
++
++#ifdef __USE_XOPEN2K
++/* Return the value of the stackaddr and stacksize attributes in *ATTR
++   in *STACKADDR and *STACKSIZE respectively.  */
++extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
++				  void **__restrict __stackaddr,
++				  size_t *__restrict __stacksize)
++	__THROW __nonnull ((1, 2, 3));
++
++/* Set the value of the stackaddr and stacksize attributes in *ATTR to
++   STACKADDR and STACKSIZE respectively.  */
++extern int pthread_attr_setstack (pthread_attr_t *__attr,
++				  void *__stackaddr,
++				  size_t __stacksize)
++	__THROW __nonnull ((1));
++#endif
++
++
++/* Return the value of the detachstate attribute in *ATTR in
++   *DETACHSTATE.  */
++extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
++					int *__detachstate)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the detachstate attribute in *ATTR to
++   DETACHSTATE.  */
++extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
++					int __detachstate)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the guardsize attribute in *ATTR in
++   *GUARDSIZE.  */
++extern int pthread_attr_getguardsize (const pthread_attr_t *__restrict __attr,
++				      size_t *__restrict __guardsize)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the guardsize attribute in *ATTR to GUARDSIZE.  */
++extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
++				      size_t __guardsize)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the stacksize attribute in *ATTR in
++   *STACKSIZE.  */
++extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict __attr,
++				      size_t *__restrict __stacksize)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the stacksize attribute in *ATTR to STACKSIZE.  */
++extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
++				      size_t __stacksize)
++	__THROW __nonnull ((1));
++
++#ifdef __USE_GNU
++/* Initialize thread attribute *ATTR with attributes corresponding to the
++   already running thread THREAD.  It shall be called on an uninitialized ATTR
++   and destroyed with pthread_attr_destroy when no longer needed.  */
++extern int pthread_getattr_np (pthread_t __thr, pthread_attr_t *__attr)
++	__THROW __nonnull ((2));
++#endif
++
++
++/* Create a thread with attributes given by ATTR, executing
++   START_ROUTINE with argument ARG.  */
++extern int pthread_create (pthread_t *__restrict __threadp,
++			   __const pthread_attr_t *__restrict __attr,
++			   void *(*__start_routine)(void *),
++			   void *__restrict __arg) __THROWNL __nonnull ((1, 3));
++
++/* Terminate the current thread and make STATUS available to any
++   thread that might join us.  */
++extern void pthread_exit (void *__status) __attribute__ ((__noreturn__));
++
++/* Make calling thread wait for termination of thread THREAD.  Return
++   the exit status of the thread in *STATUS.  */
++extern int pthread_join (pthread_t __threadp, void **__status);
++
++/* Indicate that the storage for THREAD can be reclaimed when it
++   terminates.  */
++extern int pthread_detach (pthread_t __threadp);
++
++/* Compare thread IDs T1 and T2.  Return nonzero if they are equal, 0
++   if they are not.  */
++extern int pthread_equal (pthread_t __t1, pthread_t __t2);
++
++# ifdef __USE_EXTERN_INLINES
++
++__extern_inline int
++pthread_equal (pthread_t __t1, pthread_t __t2)
++{
++  return __pthread_equal (__t1, __t2);
++}
++
++# endif /* Use extern inlines.  */
++
++
++/* Return the thread ID of the calling thread.  */
++extern pthread_t pthread_self (void) __THROW;
++
++
++/* Mutex attributes.  */
++
++#define PTHREAD_PRIO_NONE_NP __PTHREAD_PRIO_NONE
++#define PTHREAD_PRIO_INHERIT_NP __PTHREAD_PRIO_INHERIT
++#define PTHREAD_PRIO_PROTECT_NP __PTHREAD_PRIO_PROTECT
++#ifdef __USE_UNIX98
++#define PTHREAD_PRIO_NONE PTHREAD_PRIO_NONE_NP
++#define PTHREAD_PRIO_INHERIT PTHREAD_PRIO_INHERIT_NP
++#define PTHREAD_PRIO_PROTECT PTHREAD_PRIO_PROTECT_NP
++#endif
++
++#define PTHREAD_MUTEX_TIMED_NP __PTHREAD_MUTEX_TIMED
++#define PTHREAD_MUTEX_ERRORCHECK_NP __PTHREAD_MUTEX_ERRORCHECK
++#define PTHREAD_MUTEX_RECURSIVE_NP __PTHREAD_MUTEX_RECURSIVE
++#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
++#define PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_TIMED_NP
++#define PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_ERRORCHECK_NP
++#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
++#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
++#endif
++#ifdef __USE_GNU
++/* For compatibility.  */
++#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_TIMED_NP
++#endif
++
++#ifdef __USE_XOPEN2K
++#define PTHREAD_MUTEX_STALLED __PTHREAD_MUTEX_STALLED
++#define PTHREAD_MUTEX_ROBUST __PTHREAD_MUTEX_ROBUST
++#endif
++
++#include <bits/mutex-attr.h>
++
++/* Initialize the mutex attribute object in *ATTR to the default
++   values.  */
++extern int pthread_mutexattr_init(pthread_mutexattr_t *__attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the mutex attribute structure in *ATTR.  */
++extern int pthread_mutexattr_destroy(pthread_mutexattr_t *__attr)
++	__THROW __nonnull ((1));
++
++
++#ifdef __USE_UNIX98
++/* Return the value of the prioceiling attribute in *ATTR in
++   *PRIOCEILING.  */
++extern int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *__restrict __attr,
++					    int *__restrict __prioceiling)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the prioceiling attribute in *ATTR to
++   PRIOCEILING.  */
++extern int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *__attr,
++					    int __prioceiling)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the protocol attribute in *ATTR in
++   *PROTOCOL.  */
++extern int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *__restrict __attr,
++					 int *__restrict __protocol)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the protocol attribute in *ATTR to PROTOCOL.  */
++extern int pthread_mutexattr_setprotocol(pthread_mutexattr_t *__attr,
++					 int __protocol)
++	__THROW __nonnull ((1));
++#endif
++
++
++/* Return the value of the process shared attribute in *ATTR in
++   *PSHARED.  */
++extern int pthread_mutexattr_getpshared(const pthread_mutexattr_t *__restrict __attr,
++					int *__restrict __pshared)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the process shared attribute in *ATTR to
++   PSHARED.  */
++extern int pthread_mutexattr_setpshared(pthread_mutexattr_t *__attr,
++					int __pshared)
++	__THROW __nonnull ((1));
++
++
++#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
++/* Return the value of the type attribute in *ATTR in *TYPE.  */
++extern int pthread_mutexattr_gettype(const pthread_mutexattr_t *__restrict __attr,
++				     int *__restrict __type)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the type attribute in *ATTR to TYPE.  */
++extern int pthread_mutexattr_settype(pthread_mutexattr_t *__attr,
++				     int __type)
++	__THROW __nonnull ((1));
++#endif
++
++
++/* Mutexes.  */
++
++#include <bits/mutex.h>
++
++#define PTHREAD_MUTEX_INITIALIZER __PTHREAD_MUTEX_INITIALIZER
++/* Static initializer for recursive mutexes.  */
++
++#ifdef __USE_GNU
++# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
++  __PTHREAD_ERRORCHECK_MUTEX_INITIALIZER
++# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
++  __PTHREAD_RECURSIVE_MUTEX_INITIALIZER
++#endif
++
++/* Create a mutex with attributes given by ATTR and store it in
++   *__MUTEX.  */
++extern int pthread_mutex_init (struct __pthread_mutex *__restrict __mutex,
++			       const pthread_mutexattr_t *__restrict __attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the mutex __MUTEX.  */
++extern int pthread_mutex_destroy (struct __pthread_mutex *__mutex)
++	__THROW __nonnull ((1));
++
++/* Wait until lock for MUTEX becomes available and lock it.  */
++extern int pthread_mutex_lock (pthread_mutex_t *__mutex);
++
++/* Try to lock MUTEX.  */
++extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
++	__THROWNL __nonnull ((1));
++
++#ifdef __USE_XOPEN2K
++/* Try to lock MUTEX, block until *ABSTIME if it is already held.  */
++extern int pthread_mutex_timedlock (struct __pthread_mutex *__restrict __mutex,
++				    const struct timespec *__restrict __abstime)
++	__THROWNL __nonnull ((1, 2));
++#endif
++
++/* Unlock MUTEX.  */
++extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
++	__THROWNL __nonnull ((1));
++
++/* Transfer ownership of the mutex MUTEX to the thread TID.  The
++   caller must own the lock.  */
++extern int __pthread_mutex_transfer_np (struct __pthread_mutex *__mutex,
++					pthread_t __tid)
++	__THROWNL __nonnull ((1));
++
++
++#ifdef __USE_UNIX98
++/* Return the priority ceiling of mutex *MUTEX in *PRIOCEILING.  */
++extern int pthread_mutex_getprioceiling (const pthread_mutex_t *__restrict __mutex,
++					 int *__restrict __prioceiling)
++	__THROW __nonnull ((1, 2));
++
++/* After acquiring the mutex *MUTEX, set its priority ceiling to PRIO
++   and return the old priority ceiling in *OLDPRIO.  Before returning,
++   release the mutex.  */
++extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
++					 int __prio, int *__restrict __oldprio)
++	__THROW __nonnull ((1, 3));
++#endif
++
++#ifdef __USE_XOPEN2K8
++
++/* Declare the state protected by robust mutex MTXP as consistent. */
++extern int pthread_mutex_consistent (pthread_mutex_t *__mtxp)
++  __THROW __nonnull ((1));
++
++#  ifdef __USE_GNU
++extern int pthread_mutex_consistent_np (pthread_mutex_t *__mtxp)
++  __THROW __nonnull ((1));
++#  endif
++#endif
++
++
++
++/* Condition attributes.  */
++
++#include <bits/condition-attr.h>
++
++/* Initialize the condition attribute in *ATTR to the default
++   values.  */
++extern int pthread_condattr_init (pthread_condattr_t *__attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the condition attribute structure in *ATTR.  */
++extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
++	__THROW __nonnull ((1));
++
++
++#ifdef __USE_XOPEN2K
++/* Return the value of the clock attribute in *ATTR in *CLOCK_ID.  */
++extern int pthread_condattr_getclock (const pthread_condattr_t *__restrict __attr,
++				      __clockid_t *__restrict __clock_id)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the clock attribute in *ATTR to CLOCK_ID.  */
++extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
++				      __clockid_t __clock_id)
++	__THROW __nonnull ((1));
++#endif
++
++
++/* Return the value of the process shared attribute in *ATTR in
++   *PSHARED.  */
++extern int pthread_condattr_getpshared (const pthread_condattr_t *__restrict __attr,
++					int *__restrict __pshared)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the process shared attribute in *ATTR to
++   PSHARED.  */
++extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
++					int __pshared)
++	__THROW __nonnull ((1));
++
++
++/* Condition variables.  */
++
++#include <bits/condition.h>
++
++#define PTHREAD_COND_INITIALIZER __PTHREAD_COND_INITIALIZER
++
++extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
++			      const pthread_condattr_t *__restrict __attr)
++	__THROW __nonnull ((1));
++
++extern int pthread_cond_destroy (pthread_cond_t *__cond)
++	__THROW __nonnull ((1));
++
++/* Unblock at least one of the threads that are blocked on condition
++   variable COND.  */
++extern int pthread_cond_signal (pthread_cond_t *__cond)
++	__THROWNL __nonnull ((1));
++
++/* Unblock all threads that are blocked on condition variable COND.  */
++extern int pthread_cond_broadcast (pthread_cond_t *__cond)
++	__THROWNL __nonnull ((1));
++
++/* Block on condition variable COND.  MUTEX should be held by the
++   calling thread.  On success, MUTEX will be held by the calling
++   thread.  */
++extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
++			      pthread_mutex_t *__restrict __mutex)
++	 __nonnull ((1, 2));
++
++/* Block on condition variable COND.  MUTEX should be held by the
++   calling thread. On success, MUTEX will be held by the calling
++   thread.  If the time specified by ABSTIME passes, ETIMEDOUT is
++   returned, and MUTEX will nevertheless be held.  */
++extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
++				   pthread_mutex_t *__restrict __mutex,
++				   __const struct timespec *__restrict __abstime)
++	 __nonnull ((1, 2, 3));
++
++
++/* Spin locks.  */
++
++#ifdef __USE_XOPEN2K
++
++# include <bits/spin-lock.h>
++
++#define PTHREAD_SPINLOCK_INITIALIZER __PTHREAD_SPIN_LOCK_INITIALIZER
++
++/* Destroy the spin lock object LOCK.  */
++extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
++	__nonnull ((1));
++
++/* Initialize the spin lock object LOCK.  PSHARED determines whether
++   the spin lock can be operated upon by multiple processes.  */
++extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
++	__nonnull ((1));
++
++/* Lock the spin lock object LOCK.  If the lock is held by another
++   thread spin until it becomes available.  */
++extern int pthread_spin_lock (pthread_spinlock_t *__lock)
++	__nonnull ((1));
++
++/* Lock the spin lock object LOCK.  Fail if the lock is held by
++   another thread.  */
++extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
++	__nonnull ((1));
++
++/* Unlock the spin lock object LOCK.  */
++extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
++	__nonnull ((1));
++
++# if defined __USE_EXTERN_INLINES && defined _LIBC
++
++# include <bits/spin-lock-inline.h>
++
++__extern_inline int
++pthread_spin_destroy (pthread_spinlock_t *__lock)
++{
++  return __pthread_spin_destroy (__lock);
++}
++
++__extern_inline int
++pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
++{
++  return __pthread_spin_init (__lock, __pshared);
++}
++
++__extern_inline int
++pthread_spin_lock (pthread_spinlock_t *__lock)
++{
++  return __pthread_spin_lock (__lock);
++}
++
++__extern_inline int
++pthread_spin_trylock (pthread_spinlock_t *__lock)
++{
++  return __pthread_spin_trylock (__lock);
++}
++
++__extern_inline int
++pthread_spin_unlock (pthread_spinlock_t *__lock)
++{
++  return __pthread_spin_unlock (__lock);
++}
++
++# endif /* Use extern inlines.  */
++
++#endif /* XPG6.  */
++
++
++/* rwlock attributes.  */
++
++#if defined __USE_UNIX98 || defined __USE_XOPEN2K
++
++#include <bits/rwlock-attr.h>
++
++/* Initialize rwlock attribute object in *ATTR to the default
++   values.  */
++extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the rwlock attribute object in *ATTR.  */
++extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the process shared attribute in *ATTR in
++   *PSHARED.  */
++extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *__restrict __attr,
++					  int *__restrict __pshared)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the process shared atrribute in *ATTR to
++   PSHARED.  */
++extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
++					  int __pshared)
++	__THROW __nonnull ((1));
++
++
++/* rwlocks.  */
++
++#include <bits/rwlock.h>
++
++#define PTHREAD_RWLOCK_INITIALIZER __PTHREAD_RWLOCK_INITIALIZER
++/* Create a rwlock object with attributes given by ATTR and strore the
++   result in *RWLOCK.  */
++extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
++				const pthread_rwlockattr_t *__restrict __attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the rwlock *RWLOCK.  */
++extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
++	__THROW __nonnull ((1));
++
++/* Acquire the rwlock *RWLOCK for reading.  */
++extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
++	__THROWNL __nonnull ((1));
++
++/* Acquire the rwlock *RWLOCK for reading.  */
++extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
++	__THROWNL __nonnull ((1));
++
++# ifdef __USE_XOPEN2K
++/* Acquire the rwlock *RWLOCK for reading blocking until *ABSTIME if
++   it is already held.  */
++extern int pthread_rwlock_timedrdlock (struct __pthread_rwlock *__restrict __rwlock,
++				       const struct timespec *__restrict __abstime)
++	__THROWNL __nonnull ((1, 2));
++# endif
++
++/* Acquire the rwlock *RWLOCK for writing.  */
++extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
++	__THROWNL __nonnull ((1));
++
++/* Try to acquire the rwlock *RWLOCK for writing.  */
++extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
++	__THROWNL __nonnull ((1));
++
++# ifdef __USE_XOPEN2K
++/* Acquire the rwlock *RWLOCK for writing blocking until *ABSTIME if
++   it is already held.  */
++extern int pthread_rwlock_timedwrlock (struct __pthread_rwlock *__restrict __rwlock,
++				       const struct timespec *__restrict __abstime)
++	__THROWNL __nonnull ((1, 2));
++# endif
++
++/* Release the lock held by the current thread on *RWLOCK.  */
++extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
++	__THROWNL __nonnull ((1));
++
++#endif /* __USE_UNIX98 || __USE_XOPEN2K */
++
++
++
++/* Cancelation.  */
++
++/* Register a cleanup handler.  */
++extern void pthread_cleanup_push (void (*__routine) (void *), void *__arg);
++
++/* Unregister a cleanup handler.  */
++extern void pthread_cleanup_pop (int __execute);
++
++#include <bits/cancelation.h>
++
++#define pthread_cleanup_push(rt, rtarg) __pthread_cleanup_push(rt, rtarg)
++#define pthread_cleanup_pop(execute) __pthread_cleanup_pop(execute)
++
++#define PTHREAD_CANCEL_DISABLE 0
++#define PTHREAD_CANCEL_ENABLE 1
++
++/* Return the calling thread's cancelation state in *OLDSTATE and set
++   its state to STATE.  */
++extern int pthread_setcancelstate (int __state, int *__oldstate);
++
++#define PTHREAD_CANCEL_DEFERRED 0
++#define PTHREAD_CANCEL_ASYNCHRONOUS 1
++
++/* Return the calling thread's cancelation type in *OLDTYPE and set
++   its type to TYPE.  */
++extern int pthread_setcanceltype (int __type, int *__oldtype);
++
++/* Value returned by pthread_join if the target thread was
++   canceled.  */
++#define PTHREAD_CANCELED ((void *) -1)
++
++/* Cancel THEAD.  */
++extern int pthread_cancel (pthread_t __thr);
++
++/* Add an explicit cancelation point.  */
++extern void pthread_testcancel (void);
++
++
++/* Barriers attributes.  */
++
++#ifdef __USE_XOPEN2K
++
++#include <bits/barrier-attr.h>
++
++/* Initialize barrier attribute object in *ATTR to the default
++   values.  */
++extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
++	__THROW __nonnull ((1));
++
++/* Destroy the barrier attribute object in *ATTR.  */
++extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
++	__THROW __nonnull ((1));
++
++
++/* Return the value of the process shared attribute in *ATTR in
++   *PSHARED.  */
++extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *__restrict __attr,
++					   int *__restrict __pshared)
++	__THROW __nonnull ((1, 2));
++
++/* Set the value of the process shared atrribute in *ATTR to
++   PSHARED.  */
++extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
++					   int __pshared)
++	__THROW __nonnull ((1));
++
++
++/* Barriers.  */
++
++#include <bits/barrier.h>
++
++/* Returned by pthread_barrier_wait to exactly one thread each time a
++   barrier is passed.  */
++#define PTHREAD_BARRIER_SERIAL_THREAD -1
++
++/* Initialize barrier BARRIER.  */
++extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
++				const pthread_barrierattr_t *__restrict __attr,
++				unsigned __count)
++	__THROW __nonnull ((1));
++
++/* Destroy barrier BARRIER.  */
++extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
++	__THROW __nonnull ((1));
++
++/* Wait on barrier BARRIER.  */
++extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
++	__THROWNL __nonnull ((1));
++
++#endif /* __USE_XOPEN2K */
++
++
++
++/* Thread specific data.  */
++
++#include <bits/thread-specific.h>
++
++/* Create a thread specific data key in KEY visible to all threads.
++   On thread destruction, DESTRUCTOR shall be called with the thread
++   specific data associate with KEY if it is not NULL.  */
++extern int pthread_key_create (pthread_key_t *__key,
++			       void (*__destructor) (void *))
++	__THROW __nonnull ((1));
++
++/* Delete the thread specific data key KEY.  The associated destructor
++   function is not called.  */
++extern int pthread_key_delete (pthread_key_t __key) __THROW;
++
++/* Return the caller thread's thread specific value of KEY.  */
++extern void *pthread_getspecific (pthread_key_t __key) __THROW;
++
++/* Set the caller thread's thread specific value of KEY to VALUE.  */
++extern int pthread_setspecific (pthread_key_t __key, const void *__value)
++	__THROW;
++
++
++/* Dynamic package initialization.  */
++
++#include <bits/once.h>
++
++#define PTHREAD_ONCE_INIT __PTHREAD_ONCE_INIT
++
++/* Call INIT_ROUTINE if this function has never been called with
++   *ONCE_CONTROL, otherwise do nothing.  */
++extern int pthread_once (pthread_once_t *__once_control,
++			 void (*__init_routine) (void)) __nonnull ((1, 2));
++
++
++/* Concurrency.  */
++
++#ifdef __USE_UNIX98
++/* Set the desired concurrency level to NEW_LEVEL.  */
++extern int pthread_setconcurrency (int __new_level) __THROW;
++
++/* Get the current concurrency level.  */
++extern int pthread_getconcurrency (void) __THROW;
++#endif
++
++
++/* Forking.  */
++
++/* Register the function PREPARE to be run before the process forks,
++   the function PARENT to be run after a fork in the parent and the
++   function CHILD to be run in the child after the fork.  If no
++   handling is desired then any of PREPARE, PARENT and CHILD may be
++   NULL.  The prepare handles will be called in the reverse order
++   which they were registered and the parent and child handlers in the
++   order in which they were registered.  */
++extern int pthread_atfork (void (*__prepare) (void), void (*__parent) (void),
++			   void (*__child) (void)) __THROW;
++
++
++/* Signals (should be in <signal.h>).  */
++
++/* Send signal SIGNO to thread THREAD.  */
++extern int pthread_kill (pthread_t __thr, int __signo) __THROW;
++
++
++/* Time.  */
++
++#ifdef __USE_XOPEN2K
++/* Return the thread cpu clock.  */
++extern int pthread_getcpuclockid (pthread_t __thr, __clockid_t *__clock)
++	__THROW __nonnull ((2));
++#endif
++
++
++/* Scheduling.  */
++
++/* Return thread THREAD's scheduling paramters.  */
++extern int pthread_getschedparam (pthread_t __thr, int *__restrict __policy,
++				  struct sched_param *__restrict __param)
++	__THROW __nonnull ((2, 3));
++
++/* Set thread THREAD's scheduling paramters.  */
++extern int pthread_setschedparam (pthread_t __thr, int __policy,
++				  const struct sched_param *__param)
++	__THROW __nonnull ((3));
++
++/* Set thread THREAD's scheduling priority.  */
++extern int pthread_setschedprio (pthread_t __thr, int __prio) __THROW;
++
++#ifdef __USE_GNU
++/* Yield the processor to another thread or process.
++   This function is similar to the POSIX `sched_yield' function but
++   might be differently implemented in the case of a m-on-n thread
++   implementation.  */
++extern int pthread_yield (void) __THROW;
++#endif
++
++
++/* Kernel-specific interfaces.  */
++
++#include <bits/pthread-np.h>
++
++
++__END_DECLS
++
++#endif /* pthread.h */
+Index: glibc-2.27/libpthread/sysdeps/generic/pthread/pthreadtypes.h
+===================================================================
+--- /dev/null
++++ glibc-2.27/libpthread/sysdeps/generic/pthread/pthreadtypes.h
+@@ -0,0 +1,131 @@
++/* Copyright (C) 2000, 2002, 2005, 2008 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Library General Public License as
++   published by the Free Software Foundation; either version 2 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
++   Library General Public License for more details.
++
++   You should have received a copy of the GNU Library General Public
++   License along with the GNU C Library; see the file COPYING.LIB.  If not,
++   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/*
++ *	POSIX Threads Extension: ???			<pthreadtypes.h>
++ */
++
++#ifndef _PTHREADTYPES_H
++#define _PTHREADTYPES_H	1
++
++#include <features.h>
++
++#include <bits/types.h>
++
++__BEGIN_DECLS
++
++#include <bits/pthread.h>
++typedef __pthread_t pthread_t;
++
++/* Possible values for the process shared attribute.  */
++enum __pthread_process_shared
++  {
++    __PTHREAD_PROCESS_PRIVATE = 0,
++    __PTHREAD_PROCESS_SHARED
++  };
++
++/* Possible values for the inheritsched attribute.  */
++enum __pthread_inheritsched
++  {
++    __PTHREAD_EXPLICIT_SCHED = 0,
++    __PTHREAD_INHERIT_SCHED
++  };
++
++/* Possible values for the `contentionscope' attribute.  */
++enum __pthread_contentionscope
++  {
++    __PTHREAD_SCOPE_SYSTEM = 0,
++    __PTHREAD_SCOPE_PROCESS
++  };
++
++/* Possible values for the `detachstate' attribute.  */
++enum __pthread_detachstate
++  {
++    __PTHREAD_CREATE_JOINABLE = 0,
++    __PTHREAD_CREATE_DETACHED
++  };
++
++#include <bits/thread-attr.h>
++typedef struct __pthread_attr pthread_attr_t;
++
++enum __pthread_mutex_protocol
++  {
++    __PTHREAD_PRIO_NONE= 0,
++    __PTHREAD_PRIO_INHERIT,
++    __PTHREAD_PRIO_PROTECT
++  };
++
++enum __pthread_mutex_type
++  {
++    __PTHREAD_MUTEX_TIMED,
++    __PTHREAD_MUTEX_ERRORCHECK,
++    __PTHREAD_MUTEX_RECURSIVE
++  };
++
++enum __pthread_mutex_robustness
++  {
++    __PTHREAD_MUTEX_STALLED,
++    __PTHREAD_MUTEX_ROBUST = 0x100
++  };
++
++#include <bits/mutex-attr.h>
++typedef struct __pthread_mutexattr pthread_mutexattr_t;
++
++#include <bits/mutex.h>
++typedef struct __pthread_mutex pthread_mutex_t;
++
++#include <bits/condition-attr.h>
++typedef struct __pthread_condattr pthread_condattr_t;
++
++#include <bits/condition.h>
++typedef struct __pthread_cond pthread_cond_t;
++
++#ifdef __USE_XOPEN2K
++# include <bits/spin-lock.h>
++typedef __pthread_spinlock_t pthread_spinlock_t;
++#endif /* XPG6.  */
++
++#if defined __USE_UNIX98 || defined __USE_XOPEN2K
++
++#include <bits/rwlock-attr.h>
++typedef struct __pthread_rwlockattr pthread_rwlockattr_t;
++
++#include <bits/rwlock.h>
++typedef struct __pthread_rwlock pthread_rwlock_t;
++
++#endif /* __USE_UNIX98 || __USE_XOPEN2K */
++
++#ifdef __USE_XOPEN2K
++
++#include <bits/barrier-attr.h>
++typedef struct __pthread_barrierattr pthread_barrierattr_t;
++
++#include <bits/barrier.h>
++typedef struct __pthread_barrier pthread_barrier_t;
++
++#endif /* __USE_XOPEN2K */
++
++#include <bits/thread-specific.h>
++typedef __pthread_key pthread_key_t;
++
++#include <bits/once.h>
++typedef struct __pthread_once pthread_once_t;
++
++__END_DECLS
++
++#endif /* pthreadtypes.h */
+Index: glibc-2.27/libpthread/pthreadP.h
+===================================================================
+--- glibc-2.27.orig/libpthread/pthreadP.h
++++ /dev/null
+@@ -1,27 +0,0 @@
+-/* Copyright (C) 2016 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _PTHREADP_H
+-#define _PTHREADP_H	1
+-
+-#include <pthread.h>
+-
+-extern pthread_t __pthread_self (void);
+-extern int __pthread_kill (pthread_t threadid, int signo);
+-extern struct __pthread **__pthread_threads;
+-
+-#endif	/* pthreadP.h */
+Index: glibc-2.27/libpthread/sysdeps/pthread/pthreadP.h
+===================================================================
+--- /dev/null
++++ glibc-2.27/libpthread/sysdeps/pthread/pthreadP.h
+@@ -0,0 +1,27 @@
++/* Copyright (C) 2016 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#ifndef _PTHREADP_H
++#define _PTHREADP_H	1
++
++#include <pthread.h>
++
++extern pthread_t __pthread_self (void);
++extern int __pthread_kill (pthread_t threadid, int signo);
++extern struct __pthread **__pthread_threads;
++
++#endif	/* pthreadP.h */
diff --git a/debian/patches/hurd-i386/tg-gsync-libc.diff b/debian/patches/hurd-i386/tg-gsync-libc.diff
index 440713a..54cf571 100644
--- a/debian/patches/hurd-i386/tg-gsync-libc.diff
+++ b/debian/patches/hurd-i386/tg-gsync-libc.diff
@@ -772,7 +772,7 @@ Index: glibc-2.26/sysdeps/mach/Makefile
 ===================================================================
 --- glibc-2.26.orig/sysdeps/mach/Makefile
 +++ glibc-2.26/sysdeps/mach/Makefile
-@@ -50,4 +50,22 @@ mach-before-compile:
+@@ -50,4 +50,23 @@ mach-before-compile:
  before-compile += $(mach-before-compile)
  endif
  
@@ -788,6 +788,7 @@ Index: glibc-2.26/sysdeps/mach/Makefile
 +else ifeq (nss,$(subdir))
 +  LDLIBS-nss.so += $(objdir)/mach/libmachuser.so
 +  LDLIBS-nss_files.so += $(objdir)/mach/libmachuser.so
++  LDLIBS-nss_compat.so += $(objdir)/mach/libmachuser.so
 +else ifeq (posix,$(subdir))
 +  LDLIBS-tst-rfc3484 += $(objdir)/mach/libmachuser.so
 +  LDLIBS-tst-rfc3484-2 += $(objdir)/mach/libmachuser.so
diff --git a/debian/patches/series b/debian/patches/series
index e0601ce..c43494e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -120,6 +120,12 @@ hurd-i386/local-nocheck-installed-headers.diff
 hurd-i386/tg2.26-sigsetops.h.diff
 hurd-i386/git-libpthread-2.26.diff
 hurd-i386/tg-thread-linkspace.diff
+hurd-i386/git-jmp_buf-macros.h.diff
+hurd-i386/libpthread_includes.diff
+hurd-i386/git-glob64.diff
+hurd-i386/git-hidden-def.diff
+hurd-i386/git-math-ulps-i386-update.diff
+hurd-i386/git-glob-PATH_MAX.diff
 
 i386/local-biarch.diff
 i386/unsubmitted-quiet-ldconfig.diff
@@ -183,4 +189,3 @@ any/local-bootstrap-headers.diff
 any/submitted-resolv-unaligned.diff
 any/submitted-intl-tstgettext.diff
 any/local-cudacc-float128.diff
-hurd-i386/git-jmp_buf-macros.h.diff
diff --git a/debian/sysdeps/hurd.mk b/debian/sysdeps/hurd.mk
index 6e8fff7..82ee0c2 100644
--- a/debian/sysdeps/hurd.mk
+++ b/debian/sysdeps/hurd.mk
@@ -8,7 +8,6 @@ pldd = no
 
 # Linuxthreads Config (we claim "no threads" as nptl keys off this)
 threads = no
-libc_add-ons = libpthread $(add-ons)
 # MIG generates a lot of warnings
 extra_config_options = --disable-werror
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git


Reply to: