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

aurel32 pushed a commit to branch glibc-2.25
in repository glibc.

commit b7bf9619bf2aa1c6287ac7257303f8719a284e7e
Author: Aurelien Jarno <aurel...@aurel32.net>
Date:   Sun Aug 13 18:07:01 2017 +0200

    debian/patches/git-updates.diff: update from upstream stable branch.
    
    * debian/patches/git-updates.diff: update from upstream stable branch:
      - debian/patches/hppa/local-fptr-table-size.diff: upstreamed.
      - debian/patches/hppa/local-shmlba.diff: upstreamed.
      - debian/patches/hppa/submitted-gmon-start.diff: partially upstreamed.
      - debian/patches/hppa/submitted-dladdr.diff: upstreamed.
      - debian/patches/hppa/local-stack-grows-up.diff: upstreamed.
      - debian/patches/hppa/submitted-setcontext.diff: upstreamed.
      - debian/patches/hppa/submitted-sysdeps-cancel.diff: upstreamed.
      - debian/patches/hppa/submitted-longjmp.diff: upstreamed.
---
 debian/changelog                                  |   10 +-
 debian/patches/git-updates.diff                   | 1222 ++++++++++++++++++++-
 debian/patches/hppa/local-fptr-table-size.diff    |   54 -
 debian/patches/hppa/local-shmlba.diff             |   13 -
 debian/patches/hppa/local-stack-grows-up.diff     |   19 -
 debian/patches/hppa/submitted-dladdr.diff         |   71 --
 debian/patches/hppa/submitted-gmon-start.diff     |   30 -
 debian/patches/hppa/submitted-longjmp.diff        |   40 -
 debian/patches/hppa/submitted-setcontext.diff     |   13 -
 debian/patches/hppa/submitted-sysdeps-cancel.diff |  143 ---
 debian/patches/series                             |    7 -
 11 files changed, 1224 insertions(+), 398 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 424220a..a71f4be 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -16,7 +16,15 @@ glibc (2.25-0experimental1) UNRELEASED; urgency=medium
   * testsuite-xfail-debian.mk: update for hurd-i386.
 
   [ Aurelien Jarno ]
-  * debian/patches/git-updates.diff: update from upstream stable branch.
+  * debian/patches/git-updates.diff: update from upstream stable branch:
+    - debian/patches/hppa/local-fptr-table-size.diff: upstreamed.
+    - debian/patches/hppa/local-shmlba.diff: upstreamed.
+    - debian/patches/hppa/submitted-gmon-start.diff: partially upstreamed.
+    - debian/patches/hppa/submitted-dladdr.diff: upstreamed.
+    - debian/patches/hppa/local-stack-grows-up.diff: upstreamed.
+    - debian/patches/hppa/submitted-setcontext.diff: upstreamed.
+    - debian/patches/hppa/submitted-sysdeps-cancel.diff: upstreamed.
+    - debian/patches/hppa/submitted-longjmp.diff: upstreamed.
   * debian/patches/kfreebsd/local-sysdeps.diff, local-fbtl.diff:
     update to revision 6171 (from glibc-bsd).
   * testsuite-xfail-debian.mk: update for kfreebsd-i386.
diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff
index 67cfa0f..eea69d1 100644
--- a/debian/patches/git-updates.diff
+++ b/debian/patches/git-updates.diff
@@ -1,10 +1,115 @@
 GIT update of git://sourceware.org/git/glibc.git/release/2.25/master from 
glibc-2.25
 
 diff --git a/ChangeLog b/ChangeLog
-index f140ee67de..897a69b49f 100644
+index f140ee67de..c80eedb68e 100644
 --- a/ChangeLog
 +++ b/ChangeLog
-@@ -1,3 +1,255 @@
+@@ -1,3 +1,360 @@
++2017-08-12  John David Anglin  <dang...@gcc.gnu.org>
++
++      [BZ 19170]
++      * sysdeps/hppa/dl-trampoline.S (_dl_runtime_resolve): Return to caller
++      if _dl_fixup fails.
++
++2017-08-12  John David Anglin  <dang...@gcc.gnu.org>
++          Adhemerval Zanella  <adhemerval.zane...@linaro.org>
++
++      [BZ #21512]
++      * sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): Call exit
++      syscall instead of jump to _exit.
++      * sysdeps/unix/sysv/linux/hppa/localplt.data: Remove _exit entry.
++
++2017-08-12  Adhemerval Zanella  <adhemerval.zane...@linaro.org>
++
++      * sysdeps/unix/sysv/linux/hppa/ipc_priv.h: New file.
++
++2017-08-12  John David Anglin  <dang...@gcc.gnu.org>
++
++      * sysdeps/unix/sysv/linux/hppa/clone.S (__clone): Add .cfi annotation.
++      * sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext): Likewise.
++      * sysdeps/unix/sysv/linux/hppa/pt-vfork.S (__vfork): Likewise.
++      * sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext): Likewise.
++
++      * sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext): Fix stack
++      offset for r19 load.
++
++      * sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext): Return 0.
++
++      * sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Fix CFA offset.
++      Use .cfi_def_cfa_offset instead of .cfi_offset.  Don't record stack
++      pointer offset.  Correct PIC register offset.  Don't mention frame
++      related instructions in epilogue.
++      (PUSHARGS_1): Correct offset.
++      (PUSHARGS_2): Likewise.
++      (PUSHARGS_3): Likewise.
++      (PUSHARGS_4): Likewise.
++      (PUSHARGS_5): Likewise.
++      (PUSHARGS_6): Likewise.
++      (POPARGS_1): Don't mention register restore.
++      (POPARGS_2): Likewise.
++      (POPARGS_3): Likewise.
++      (POPARGS_4): Likewise.
++      (POPARGS_5): Likewise.
++      (POPARGS_6): Likewise.
++      * sysdeps/unix/sysv/linux/hppa/sysdep.h (SAVE_PIC): Don't mention
++      copy of PIC register.
++      (LOAD_PIC): Likewise don't mention restore.
++      (DO_CALL): Fix CFA offset.  Use .cfi_def_cfa_offset instead of
++      .cfi_offset.  Don't record stack pointer offset.  Correct PIC register
++      offset.  Don't mention frame related instructions in epilogue.
++
++      [BZ 20098]
++      * sysdeps/hppa/dl-fptr.c (_dl_read_access_allowed): New.
++      (_dl_lookup_address): Return address if it is not consistent with
++      being a linker defined function pointer.  Likewise, return address
++      if address and function descriptor addresses are not accessible.
++
++      [BZ locale/19838]
++      * sysdeps/unix/sysv/linux/hppa/bits/shm.h (SHMLBA): Set to page size.
++
++      * nptl/allocatestack.c (allocate_stack): Align old and new guard
++      addresses to page boundaries when the stack grows up.
++
++      * sysdeps/hppa/math-tests.h: New.
++
++      [BZ #21016]
++      * sysdeps/hppa/nptl/bits/pthreadtypes.h: Update pthread_cond_t typedef.
++      * sysdeps/unix/sysv/linux/hppa/pthread.h: Include
++      bits/types/struct_timespec.h.
++      (PTHREAD_MUTEX_INITIALIZER): Revise define.
++      (PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP): Likewise.
++      (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP): Likewise.
++      (PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP): Likewise.
++      (PTHREAD_RWLOCK_INITIALIZER): Likewise.
++      (PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP): Likewise.
++      (PTHREAD_COND_INITIALIZER): Likewise.
++      Remove old definitions.
++      * sysdeps/unix/sysv/linux/hppa/internaltypes.h: Delete.
++      * sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c: Delete.
++      * sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c: Delete.
++      * sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c: Delete.
++      * sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c: Delete.
++      * sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c: Delete.
++
++2017-08-11  Florian Weimer  <fwei...@redhat.com>
++
++      [BZ #21242]
++      * assert/assert.h [__GNUC__ && !__STRICT_ANSI__] (assert):
++      Suppress pedantic warning resulting from statement expression.
++      (__ASSERT_FUNCTION): Add missing __extension__.
++
++2017-08-08  Helge Deller  <del...@gmx.de>
++
++      [BZ #21049]
++        * sysdeps/hppa/__longjmp.c (__longjmp): Move call to CHECK_SP up
++        to avoid clobbering r26.
++
++2017-08-06  H.J. Lu  <hongjiu...@intel.com>
++
++      [BZ #21871]
++      * sysdeps/x86/cpu-features.c (init_cpu_features): Set
++      bit_arch_Use_dl_runtime_resolve_opt only with AVX512F.
++
 +2017-08-04  Aurelien Jarno  <aurel...@aurel32.net>
 +
 +      * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Regenerated.
@@ -330,10 +435,10 @@ index e9194e54cf..7f0eef8096 100644
        | sed -n -f $< > $@.new
        test -s $@.new
 diff --git a/NEWS b/NEWS
-index ec15dde761..7be238c404 100644
+index ec15dde761..e27fd4c4f6 100644
 --- a/NEWS
 +++ b/NEWS
-@@ -5,6 +5,19 @@ See the end for copying conditions.
+@@ -5,6 +5,20 @@ See the end for copying conditions.
  Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
  using `glibc' in the "product" field.
  
@@ -346,6 +451,7 @@ index ec15dde761..7be238c404 100644
 +  [21109] Tunables broken on big-endian
 +  [21115] sunrpc: Use-after-free in error path in clntudp_call
 +  [21209] Ignore and remove LD_HWCAP_MASK for AT_SECURE programs
++  [21242] assert: Suppress pedantic warning caused by statement expression
 +  [21289] Fix symbol redirect for fts_set
 +  [21386] Assertion in fork for distinct parent PID is incorrect
 +  [21624] Unsafe alloca allows local attackers to alias stack and heap 
(CVE-2017-1000366)
@@ -353,6 +459,41 @@ index ec15dde761..7be238c404 100644
  Version 2.25
  
  * The feature test macro __STDC_WANT_LIB_EXT2__, from ISO/IEC TR
+diff --git a/assert/assert.h b/assert/assert.h
+index 22f019537c..6801cfeb10 100644
+--- a/assert/assert.h
++++ b/assert/assert.h
+@@ -91,13 +91,19 @@ __END_DECLS
+      ? __ASSERT_VOID_CAST (0)                                         \
+      : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
+ # else
++/* The first occurrence of EXPR is not evaluated due to the sizeof,
++   but will trigger any pedantic warnings masked by the __extension__
++   for the second occurrence.  The explicit comparison against zero is
++   required to support function pointers and bit fields in this
++   context, and to suppress the evaluation of variable length
++   arrays.  */
+ #  define assert(expr)                                                        
\
+-    ({                                                                        
\
++  ((void) sizeof ((expr) == 0), __extension__ ({                      \
+       if (expr)                                                               
\
+         ; /* empty */                                                 \
+       else                                                            \
+         __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \
+-    })
++    }))
+ # endif
+ 
+ # ifdef       __USE_GNU
+@@ -113,7 +119,7 @@ __END_DECLS
+    C9x has a similar variable called __func__, but prefer the GCC one since
+    it demangles C++ function names.  */
+ # if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4)
+-#   define __ASSERT_FUNCTION  __PRETTY_FUNCTION__
++#   define __ASSERT_FUNCTION  __extension__ __PRETTY_FUNCTION__
+ # else
+ #  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+ #   define __ASSERT_FUNCTION  __func__
 diff --git a/elf/Makefile b/elf/Makefile
 index 61abeb59ee..cc4aeb25b6 100644
 --- a/elf/Makefile
@@ -1400,6 +1541,27 @@ index 19d76c0c37..eaea7c3b89 100644
  compat_symbol (libc, locs, locs, GLIBC_2_0);
  
  
+diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
+index 8a228ab254..368fe3c36b 100644
+--- a/nptl/allocatestack.c
++++ b/nptl/allocatestack.c
+@@ -683,8 +683,14 @@ allocate_stack (const struct pthread_attr *attr, struct 
pthread **pdp,
+                       prot) != 0)
+           goto mprot_error;
+ #elif _STACK_GROWS_UP
+-        if (mprotect ((char *) pd - pd->guardsize,
+-                      pd->guardsize - guardsize, prot) != 0)
++        char *new_guard = (char *)(((uintptr_t) pd - guardsize)
++                                   & ~pagesize_m1);
++        char *old_guard = (char *)(((uintptr_t) pd - pd->guardsize)
++                                   & ~pagesize_m1);
++        /* The guard size difference might be > 0, but once rounded
++           to the nearest page the size difference might be zero.  */
++        if (new_guard > old_guard
++            && mprotect (old_guard, new_guard - old_guard, prot) != 0)
+           goto mprot_error;
+ #endif
+ 
 diff --git a/posix/globtest.sh b/posix/globtest.sh
 index f9cc80b4b5..73f7ae31cc 100755
 --- a/posix/globtest.sh
@@ -2653,6 +2815,143 @@ index a74083786e..5ea8a4a259 100644
    "LD_LIBRARY_PATH\0"                                                       \
    "LD_ORIGIN_PATH\0"                                                        \
    "LD_PRELOAD\0"                                                            \
+diff --git a/sysdeps/hppa/__longjmp.c b/sysdeps/hppa/__longjmp.c
+index a7eefc7ad6..2fedb1d738 100644
+--- a/sysdeps/hppa/__longjmp.c
++++ b/sysdeps/hppa/__longjmp.c
+@@ -24,15 +24,15 @@
+ void
+ __longjmp (__jmp_buf env, int val)
+ {
++#ifdef CHECK_SP
++  CHECK_SP (env[0].__jmp_buf.__sp);
++#endif
++
+   /* We must use one of the non-callee saves registers
+      for env.  */
+   register unsigned long r26 asm ("r26") = (unsigned long)&env[0];
+   register unsigned long r25 asm ("r25") = (unsigned long)(val == 0 ? 1 : 
val);
+ 
+-#ifdef CHECK_SP
+-  CHECK_SP (env[0].__jmp_buf.__sp);
+-#endif
+-
+   asm volatile(
+       /* Set return value.  */
+       "copy   %0, %%r28\n\t"
+@@ -79,6 +79,7 @@ __longjmp (__jmp_buf env, int val)
+       : /* No outputs.  */
+       : "r" (r25), "r" (r26)
+       : /* No point in clobbers.  */ );
++
+   /* Avoid `volatile function does return' warnings.  */
+   for (;;);
+ }
+diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c
+index 83bdb91202..f74abc02c2 100644
+--- a/sysdeps/hppa/dl-fptr.c
++++ b/sysdeps/hppa/dl-fptr.c
+@@ -181,24 +181,29 @@ make_fdesc (ElfW(Addr) ip, ElfW(Addr) gp)
+ static inline ElfW(Addr) * __attribute__ ((always_inline))
+ make_fptr_table (struct link_map *map)
+ {
+-  const ElfW(Sym) *symtab
+-    = (const void *) D_PTR (map, l_info[DT_SYMTAB]);
++  const ElfW(Sym) *symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]);
+   const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
+   ElfW(Addr) *fptr_table;
+   size_t size;
+   size_t len;
++  const ElfW(Sym) *symtabend;
+ 
+-  /* XXX Apparently the only way to find out the size of the dynamic
+-     symbol section is to assume that the string table follows right
+-     afterwards...  */
+-  len = ((strtab - (char *) symtab)
++  /* Determine the end of the dynamic symbol table using the hash.  */
++  if (map->l_info[DT_HASH] != NULL)
++    symtabend = (symtab + ((Elf_Symndx *) D_PTR (map, l_info[DT_HASH]))[1]);
++  else
++  /* There is no direct way to determine the number of symbols in the
++     dynamic symbol table and no hash table is present.  The ELF
++     binary is ill-formed but what shall we do?  Use the beginning of
++     the string table which generally follows the symbol table.  */
++    symtabend = (const ElfW(Sym) *) strtab;
++
++  len = (((char *) symtabend - (char *) symtab)
+        / map->l_info[DT_SYMENT]->d_un.d_val);
+-  size = ((len * sizeof (fptr_table[0]) + GLRO(dl_pagesize) - 1)
+-        & -GLRO(dl_pagesize));
+-  /* XXX We don't support here in the moment systems without MAP_ANON.
+-     There probably are none for IA-64.  In case this is proven wrong
+-     we will have to open /dev/null here and use the file descriptor
+-     instead of the hard-coded -1.  */
++  size = ALIGN_UP (len * sizeof (fptr_table[0]), GLRO(dl_pagesize));
++
++  /* We don't support systems without MAP_ANON.  We avoid using malloc
++     because this might get called before malloc is setup.  */
+   fptr_table = __mmap (NULL, size,
+                      PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE,
+                      -1, 0);
+@@ -331,22 +336,45 @@ elf_machine_resolve (void)
+   return addr;
+ }
+ 
++static inline int
++_dl_read_access_allowed (unsigned int *addr)
++{
++  int result;
++
++  asm ("proberi       (%1),3,%0" : "=r" (result) : "r" (addr) : );
++
++  return result;
++}
++
+ ElfW(Addr)
+ _dl_lookup_address (const void *address)
+ {
+   ElfW(Addr) addr = (ElfW(Addr)) address;
+   unsigned int *desc, *gptr;
+ 
+-  /* Check for special cases.  */
+-  if ((int) addr == -1
+-      || (unsigned int) addr < 4096
+-      || !((unsigned int) addr & 2))
++  /* Return ADDR if the least-significant two bits of ADDR are not consistent
++     with ADDR being a linker defined function pointer.  The normal value for
++     a code address in a backtrace is 3.  */
++  if (((unsigned int) addr & 3) != 2)
++    return addr;
++
++  /* Handle special case where ADDR points to page 0.  */
++  if ((unsigned int) addr < 4096)
+     return addr;
+ 
+   /* Clear least-significant two bits from descriptor address.  */
+   desc = (unsigned int *) ((unsigned int) addr & ~3);
++  if (!_dl_read_access_allowed (desc))
++    return addr;
+ 
+-  /* Check if descriptor requires resolution.  The following trampoline is
++  /* Load first word of candidate descriptor.  It should be a pointer
++     with word alignment and point to memory that can be read.  */
++  gptr = (unsigned int *) desc[0];
++  if (((unsigned int) gptr & 3) != 0
++      || !_dl_read_access_allowed (gptr))
++    return addr;
++
++  /* See if descriptor requires resolution.  The following trampoline is
+      used in each global offset table for function resolution:
+ 
+               ldw 0(r20),r22
+@@ -358,7 +386,6 @@ _dl_lookup_address (const void *address)
+               .word "_dl_runtime_resolve ltp"
+      got:     .word _DYNAMIC
+               .word "struct link map address" */
+-  gptr = (unsigned int *) desc[0];
+   if (gptr[0] == 0xea9f1fdd                   /* b,l .-12,r20     */
+       && gptr[1] == 0xd6801c1e                        /* depwi 0,31,2,r20 */
+       && (ElfW(Addr)) gptr[2] == elf_machine_resolve ())
 diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h
 index 339c7bb771..787b95f502 100644
 --- a/sysdeps/hppa/dl-machine.h
@@ -2680,6 +2979,139 @@ index 339c7bb771..787b95f502 100644
        /* See if we were called as a command with the executable file  \
           name as an extra leading argument. */                        \
  "     addil   LT'_dl_skip_args,%r19\n"                                \
+diff --git a/sysdeps/hppa/dl-trampoline.S b/sysdeps/hppa/dl-trampoline.S
+index 856339bffe..3165c6f0e2 100644
+--- a/sysdeps/hppa/dl-trampoline.S
++++ b/sysdeps/hppa/dl-trampoline.S
+@@ -82,6 +82,21 @@ _dl_runtime_resolve:
+       bl      _dl_fixup,%rp
+       copy    %r21,%r19               /* set fixup func ltp */
+ 
++      /* While the linker will set a function pointer to NULL when it
++         encounters an undefined weak function, we need to dynamically
++         detect removed weak functions.  The issue arises because a weak
++         __gmon_start__ function was added to shared executables to work
++         around issues in _init that are now resolved.  The presence of
++         __gmon_start__ in every shared library breaks the linker
++         `--as-needed' option.  This __gmon_start__ function does nothing
++         but removal is tricky.  Depending on the binding, removal can
++         cause an application using it to fault.  The call to _dl_fixup
++         returns NULL when a function isn't resolved.  In order to help
++         with __gmon_start__ removal, we return directly to the caller
++         when _dl_fixup returns NULL.  This check could be removed when
++         BZ 19170 is fixed.  */
++      comib,= 0,%r28,1f
++
+       /* Load up the returned func descriptor */
+       copy    %r28, %r22
+       copy    %r29, %r19
+@@ -107,6 +122,13 @@ _dl_runtime_resolve:
+       /* Jump to new function, but return to previous function */
+       bv      %r0(%r22)
+       ldw     -20(%sp),%rp
++
++1:
++      /* Return to previous function */
++      ldw     -148(%sp),%rp
++      bv      %r0(%rp)
++      ldo     -128(%sp),%sp
++
+         .EXIT
+         .PROCEND
+       cfi_endproc
+diff --git a/sysdeps/hppa/math-tests.h b/sysdeps/hppa/math-tests.h
+new file mode 100644
+index 0000000000..bb205907ad
+--- /dev/null
++++ b/sysdeps/hppa/math-tests.h
+@@ -0,0 +1,22 @@
++/* Configuration for math tests.  hppa version.
++   Copyright (C) 2017 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/>.  */
++
++/* SNaN tests do not preserve payloads.  */
++#define SNAN_TESTS_PRESERVE_PAYLOAD 0
++
++#include_next <math-tests.h>
+diff --git a/sysdeps/hppa/nptl/bits/pthreadtypes.h 
b/sysdeps/hppa/nptl/bits/pthreadtypes.h
+index e37111a2f3..579047b732 100644
+--- a/sysdeps/hppa/nptl/bits/pthreadtypes.h
++++ b/sysdeps/hppa/nptl/bits/pthreadtypes.h
+@@ -106,36 +106,34 @@ typedef union
+ 
+ /* Data structure for conditional variable handling.  The structure of
+    the attribute type is not exposed on purpose. However, this structure
+-   is exposed via PTHREAD_COND_INITIALIZER, and because of this, the
+-   Linuxthreads version sets the first four ints to one. In the NPTL
+-   version we must check, in every function using pthread_cond_t,
+-   for the static Linuxthreads initializer and clear the appropriate
+-   words. */
++   is exposed via PTHREAD_COND_INITIALIZER.  Support for Linuxthreads has
++   been dropped but we still need to retain the alignment of the original
++   lock field from Linuxthreads.  */
+ typedef union
+ {
+   struct
+   {
+-    /* In the old Linuxthreads pthread_cond_t, this is the
+-       start of the 4-word lock structure, the next four words
+-       are set all to 1 by the Linuxthreads
+-       PTHREAD_COND_INITIALIZER.  */
+-    int __lock __attribute__ ((__aligned__(16)));
+-    /* Tracks the initialization of this structure:
+-       0  initialized with NPTL PTHREAD_COND_INITIALIZER.
+-       1  initialized with Linuxthreads PTHREAD_COND_INITIALIZER.
+-       2  initialization in progress.  */
+-    int __initializer;
+-    unsigned int __futex;
+-    void *__mutex;
+-    /* In the old Linuxthreads this would have been the start
+-       of the pthread_fastlock status word.  */
+-    __extension__ unsigned long long int __total_seq;
+-    __extension__ unsigned long long int __wakeup_seq;
+-    __extension__ unsigned long long int __woken_seq;
+-    unsigned int __nwaiters;
+-    unsigned int __broadcast_seq;
+-    /* The NPTL pthread_cond_t is exactly the same size as
+-       the Linuxthreads version, there are no words to spare.  */
++    __extension__ union
++    {
++      __extension__ unsigned long long int __wseq;
++      struct {
++      unsigned int __low;
++      unsigned int __high;
++      } __wseq32;
++    };
++    __extension__ union
++    {
++      __extension__ unsigned long long int __g1_start;
++      struct {
++      unsigned int __low;
++      unsigned int __high;
++      } __g1_start32;
++    };
++    unsigned int __g_refs[2] __attribute__ ((__aligned__(16)));
++    unsigned int __g_size[2];
++    unsigned int __g1_orig_size;
++    unsigned int __wrefs;
++    unsigned int __g_signals[2];
+   } __data;
+   char __size[__SIZEOF_PTHREAD_COND_T];
+   __extension__ long long int __align;
 diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps 
b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
 index cb82d3ee36..275dbbe804 100644
 --- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
@@ -2860,6 +3292,772 @@ index cca17f1e34..1f0e3b494e 100644
  # We used to offer inline functions that used this, so it must be exported.
  # Ought to reorg things such that carg isn't thus forced to use a plt.
  libm.so: __atan2
+diff --git a/sysdeps/unix/sysv/linux/hppa/bits/shm.h 
b/sysdeps/unix/sysv/linux/hppa/bits/shm.h
+index 794f0ab2da..495dae8afc 100644
+--- a/sysdeps/unix/sysv/linux/hppa/bits/shm.h
++++ b/sysdeps/unix/sysv/linux/hppa/bits/shm.h
+@@ -37,7 +37,7 @@
+ #define SHM_UNLOCK    12              /* unlock segment (root only) */
+ 
+ /* Segment low boundary address multiple.  */
+-#define SHMLBA 0x00400000             /* address needs to be 4 Mb aligned */
++#define SHMLBA                0x1000
+ 
+ /* Type to count number of attaches.  */
+ typedef unsigned long int shmatt_t;
+diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S 
b/sysdeps/unix/sysv/linux/hppa/clone.S
+index d36b302199..f6b4e3eea8 100644
+--- a/sysdeps/unix/sysv/linux/hppa/clone.S
++++ b/sysdeps/unix/sysv/linux/hppa/clone.S
+@@ -64,9 +64,12 @@
+ ENTRY(__clone)
+       /* Prologue */
+       stwm    %r4, 64(%sp)
++      .cfi_def_cfa_offset -64
++      .cfi_offset 4, 0
+       stw     %sp, -4(%sp)
+ #ifdef PIC
+       stw     %r19, -32(%sp)
++      .cfi_offset 19, 32
+ #endif
+ 
+       /* Sanity check arguments.  */
+@@ -147,9 +150,9 @@ ENTRY(__clone)
+ #ifdef PIC
+       copy    %r4, %r19
+ #endif
+-      /* The call to _exit needs saved r19.  */
+-      bl      _exit, %rp
+-      copy    %ret0, %arg0
++      copy    %r28, %r26
++      ble     0x100(%sr2, %r0)
++      ldi     __NR_exit, %r20
+ 
+       /* We should not return from _exit.
+            We do not restore r4, or the stack state.  */
+diff --git a/sysdeps/unix/sysv/linux/hppa/getcontext.S 
b/sysdeps/unix/sysv/linux/hppa/getcontext.S
+index 6f52f2149d..68a74a0b7e 100644
+--- a/sysdeps/unix/sysv/linux/hppa/getcontext.S
++++ b/sysdeps/unix/sysv/linux/hppa/getcontext.S
+@@ -130,8 +130,11 @@ ENTRY(__getcontext)
+ 
+       /* Prologue */
+       stwm    %r4, 64(%sp)
++      .cfi_def_cfa_offset -64
++      .cfi_offset 4, 0
+ #ifdef PIC
+       stw     %r19, -32(%sp)
++      .cfi_offset 19, 32
+ #endif
+ 
+       /* Set up the trampoline registers.
+@@ -156,7 +159,7 @@ ENTRY(__getcontext)
+       /* Epilogue */
+       ldw     -84(%sp), %r2
+ #ifdef PIC
+-      ldw     -96(%sp), %r19
++      ldw     -32(%sp), %r19
+ #endif
+       bv      %r0(%r2)
+       ldwm    -64(%sp), %r4
+diff --git a/sysdeps/unix/sysv/linux/hppa/internaltypes.h 
b/sysdeps/unix/sysv/linux/hppa/internaltypes.h
+deleted file mode 100644
+index d6496579da..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/internaltypes.h
++++ /dev/null
+@@ -1,84 +0,0 @@
+-#include_next <internaltypes.h>
+-#ifndef _INTERNAL_TYPES_H_HPPA_
+-#define _INTERNAL_TYPES_H_HPPA_ 1
+-#include <atomic.h>
+-
+-/* In GLIBC 2.10 HPPA switched from Linuxthreads to NPTL, and in order
+-to maintain ABI compatibility with pthread_cond_t, some care had to be
+-taken.
+-
+-The NPTL pthread_cond_t grew in size. When HPPA switched to NPTL, we
+-dropped the use of ldcw, and switched to the kernel helper routine for
+-compare-and-swap.  This allowed HPPA to use the 4-word 16-byte aligned
+-lock words, and alignment words to store the additional pthread_cond_t
+-data. Once organized properly the new NPTL pthread_cond_t was 1 word
+-smaller than the Linuxthreads version.
+-
+-However, we were faced with the case that users may have initialized the
+-pthread_cond_t with PTHREAD_COND_INITIALIZER. In this case, the first
+-four words were set to one, and must be cleared before any NPTL code
+-used these words.
+-
+-We didn't want to use LDCW, because it continues to be a source of bugs
+-when applications memset pthread_cond_t to all zeroes by accident. This
+-works on all other architectures where lock words are unlocked at zero.
+-Remember that because of the semantics of LDCW, a locked word is set to
+-zero, and an unlocked word is set to 1.
+-
+-Instead we used atomic_compare_and_exchange_val_acq, but we couldn't use
+-this on any of the pthread_cond_t words, otherwise it might interfere
+-with the current operation of the structure. To solve this problem we
+-used the left over word.
+-
+-If the stucture was initialized by a legacy Linuxthread
+-PTHREAD_COND_INITIALIZER it contained a 1, and this indicates that the
+-structure requires zeroing for NPTL. The first thread to come upon a
+-pthread_cond_t with a 1 in the __initializer field, will
+-compare-and-swap the value, placing a 2 there which will cause all other
+-threads using the same pthread_cond_t to wait for the completion of the
+-initialization. Lastly, we use a store (with memory barrier) to change
+-__initializer from 2 to 0. Note that the store is strongly ordered, but
+-we use the PA 1.1 compatible form which is ",ma" with zero offset.
+-
+-In the future, when the application is recompiled with NPTL
+-PTHREAD_COND_INITIALIZER it will be a quick compare-and-swap, which
+-fails because __initializer is zero, and the structure will be used as
+-is correctly.  */
+-
+-#define cond_compat_clear(var) \
+-({                                                                    \
+-  int tmp = 0;                                                                
\
+-  var->__data.__wseq = 0;                                             \
+-  var->__data.__signals_sent = 0;                                     \
+-  var->__data.__confirmed = 0;                                                
\
+-  var->__data.__generation = 0;                                               
\
+-  var->__data.__mutex = NULL;                                         \
+-  var->__data.__quiescence_waiters = 0;                                       
\
+-  var->__data.__clockid = 0;                                          \
+-  /* Clear __initializer last, to indicate initialization is done.  */        
\
+-  /* This synchronizes-with the acquire load below.  */                       
\
+-  atomic_store_release (&var->__data.__initializer, 0);                       
\
+-})
+-
+-#define cond_compat_check_and_clear(var) \
+-({                                                            \
+-  int v;                                                      \
+-  int *value = &var->__data.__initializer;                    \
+-  /* This synchronizes-with the release store above.  */      \
+-  while ((v = atomic_load_acquire (value)) != 0)              \
+-    {                                                         \
+-      if (v == 1                                              \
+-        /* Relaxed MO is fine; it only matters who's first.  */        \
+-        && atomic_compare_exchange_acquire_weak_relaxed (value, 1, 2)) \
+-      {                                                       \
+-        /* We're first; initialize structure.  */             \
+-        cond_compat_clear (var);                              \
+-        break;                                                \
+-      }                                                       \
+-      else                                                    \
+-      /* Yield before we re-check initialization status.  */  \
+-      sched_yield ();                                         \
+-    }                                                         \
+-})
+-
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/ipc_priv.h 
b/sysdeps/unix/sysv/linux/hppa/ipc_priv.h
+new file mode 100644
+index 0000000000..d880f5029a
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/hppa/ipc_priv.h
+@@ -0,0 +1,21 @@
++/* Old SysV permission definition for Linux.  Hppa version.
++   Copyright (C) 2017 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/ipc.h>  /* For __key_t  */
++
++#define __IPC_64      0x0
+diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data 
b/sysdeps/unix/sysv/linux/hppa/localplt.data
+index 9dd81b47c8..db9e24b090 100644
+--- a/sysdeps/unix/sysv/linux/hppa/localplt.data
++++ b/sysdeps/unix/sysv/linux/hppa/localplt.data
+@@ -6,7 +6,6 @@ libc.so: free
+ libc.so: malloc
+ libc.so: memalign
+ libc.so: realloc
+-libc.so: _exit
+ libc.so: __sigsetjmp
+ libc.so: _IO_funlockfile
+ libc.so: sigprocmask
+diff --git a/sysdeps/unix/sysv/linux/hppa/pt-vfork.S 
b/sysdeps/unix/sysv/linux/hppa/pt-vfork.S
+index fc4573c86b..8b7d7df2fe 100644
+--- a/sysdeps/unix/sysv/linux/hppa/pt-vfork.S
++++ b/sysdeps/unix/sysv/linux/hppa/pt-vfork.S
+@@ -58,7 +58,10 @@ ENTRY(__vfork)
+          that there is no child now, so it's safe to create
+          a frame.  */
+       stw     %rp, -20(%sp)
++      .cfi_offset 2, -20
+       stwm    %r3, 64(%sp)
++      .cfi_def_cfa_offset -64
++      .cfi_offset 3, 0
+       stw     %sp, -4(%sp)
+ 
+       sub     %r0,%ret0,%r3
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread.h 
b/sysdeps/unix/sysv/linux/hppa/pthread.h
+index ac617201d2..806072cde4 100644
+--- a/sysdeps/unix/sysv/linux/hppa/pthread.h
++++ b/sysdeps/unix/sysv/linux/hppa/pthread.h
+@@ -26,6 +26,7 @@
+ #include <bits/pthreadtypes.h>
+ #include <bits/setjmp.h>
+ #include <bits/wordsize.h>
++#include <bits/types/struct_timespec.h>
+ 
+ 
+ /* Detach state.  */
+@@ -82,32 +83,18 @@ enum
+ #endif
+ 
+ 
+-#ifdef __PTHREAD_MUTEX_HAVE_PREV
+-# define PTHREAD_MUTEX_INITIALIZER \
+-  { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
+-# ifdef __USE_GNU
+-#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+-#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } }
+-#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+-#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
+-
+-# endif
+-#else
+-# define PTHREAD_MUTEX_INITIALIZER \
+-  { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } }
+-# ifdef __USE_GNU
+-#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } }
+-#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } }
+-#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } }
+-
+-# endif
++#define PTHREAD_MUTEX_INITIALIZER \
++  { { 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, { __PTHREAD_SPINS }, 0, 0 } }
++#ifdef __USE_GNU
++# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
++  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, { 0, 0, 0, 0 }, 0, \
++      { __PTHREAD_SPINS }, 0, 0 } }
++# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
++  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, { 0, 0, 0, 0 }, 0, \
++      { __PTHREAD_SPINS }, 0, 0 } }
++# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
++  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, { 0, 0, 0, 0 }, 0, \
++      { __PTHREAD_SPINS }, 0, 0 } }
+ #endif
+ 
+ 
+@@ -130,25 +117,14 @@ enum
+ # endif
+ #endif
+ 
++
+ /* Read-write lock initializers.  */
+ # define PTHREAD_RWLOCK_INITIALIZER \
+-  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
++  { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+ # ifdef __USE_GNU
+-#  ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+-#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0,              
                              \
+-      PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+-#  else
+-#   if __BYTE_ORDER == __LITTLE_ENDIAN
+-#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \
+-      0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
+-#   else
+-#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+-  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\
+-      0 } }
+-#   endif
+-#  endif
++#  define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
++   { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
++       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 0, 0, 0 } }
+ # endif
+ #endif  /* Unix98 or XOpen2K */
+ 
+@@ -183,9 +159,8 @@ enum
+ };
+ 
+ 
+-
+ /* Conditional variable handling.  */
+-#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
++#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } 
}
+ 
+ 
+ /* Cleanup buffers */
+@@ -1161,43 +1136,3 @@ __NTH (pthread_equal (pthread_t __thread1, pthread_t 
__thread2))
+ __END_DECLS
+ 
+ #endif        /* pthread.h */
+-
+-#ifndef _PTHREAD_H_HPPA_
+-#define _PTHREAD_H_HPPA_ 1
+-
+-/* The pthread_cond_t initializer is compatible only with NPTL. We do not
+-   want to be forwards compatible, we eventually want to drop the code
+-   that has to clear the old LT initializer.  */
+-#undef PTHREAD_COND_INITIALIZER
+-#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, (void *) 0, 0, 0, 0, 0, 0 } }
+-
+-/* The pthread_mutex_t and pthread_rwlock_t initializers are compatible
+-   only with NPTL. NPTL assumes pthread_rwlock_t is all zero.  */
+-#undef PTHREAD_MUTEX_INITIALIZER
+-#undef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+-#undef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+-#undef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+-/* Mutex initializers.  */
+-#define PTHREAD_MUTEX_INITIALIZER \
+-  { { 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } }
+-#ifdef __USE_GNU
+-# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } }
+-# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } }
+-# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+-  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } }
+-#endif
+-
+-#undef PTHREAD_RWLOCK_INITIALIZER
+-#undef PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+-/* Read-write lock initializers.  */
+-#define PTHREAD_RWLOCK_INITIALIZER \
+-  { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+-#ifdef __USE_GNU
+-# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+-  { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\
+-      0, 0, 0 } }
+-#endif  /* Unix98 or XOpen2K */
+-
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c 
b/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c
+deleted file mode 100644
+index a6f9f5d433..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c
++++ /dev/null
+@@ -1,40 +0,0 @@
+-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Carlos O'Donell <car...@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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef INCLUDED_SELF
+-# define INCLUDED_SELF
+-# include <pthread_cond_broadcast.c>
+-#else
+-# include <pthread.h>
+-# include <pthreadP.h>
+-# include <internaltypes.h>
+-# include <shlib-compat.h>
+-int
+-__pthread_cond_broadcast (pthread_cond_t *cond)
+-{
+-  cond_compat_check_and_clear (cond);
+-  return __pthread_cond_broadcast_internal (cond);
+-}
+-versioned_symbol (libpthread, __pthread_cond_broadcast, 
pthread_cond_broadcast,
+-                  GLIBC_2_3_2);
+-# undef versioned_symbol
+-# define versioned_symbol(lib, local, symbol, version)
+-# undef __pthread_cond_broadcast
+-# define __pthread_cond_broadcast __pthread_cond_broadcast_internal
+-# include_next <pthread_cond_broadcast.c>
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c 
b/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c
+deleted file mode 100644
+index 49af087bb4..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c
++++ /dev/null
+@@ -1,40 +0,0 @@
+-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Carlos O'Donell <car...@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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef INCLUDED_SELF
+-# define INCLUDED_SELF
+-# include <pthread_cond_destroy.c>
+-#else
+-# include <pthread.h>
+-# include <pthreadP.h>
+-# include <internaltypes.h>
+-# include <shlib-compat.h>
+-int
+-__pthread_cond_destroy (pthread_cond_t *cond)
+-{
+-  cond_compat_check_and_clear (cond);
+-  return __pthread_cond_destroy_internal (cond);
+-}
+-versioned_symbol (libpthread, __pthread_cond_destroy, pthread_cond_destroy,
+-                  GLIBC_2_3_2);
+-# undef versioned_symbol
+-# define versioned_symbol(lib, local, symbol, version)
+-# undef __pthread_cond_destroy
+-# define __pthread_cond_destroy __pthread_cond_destroy_internal
+-# include_next <pthread_cond_destroy.c>
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c 
b/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c
+deleted file mode 100644
+index ccb3de07ff..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c
++++ /dev/null
+@@ -1,40 +0,0 @@
+-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Carlos O'Donell <car...@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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef INCLUDED_SELF
+-# define INCLUDED_SELF
+-# include <pthread_cond_init.c>
+-#else
+-# include <pthread.h>
+-# include <pthreadP.h>
+-# include <internaltypes.h>
+-# include <shlib-compat.h>
+-int
+-__pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t 
*cond_attr)
+-{
+-  cond_compat_clear (cond);
+-  return __pthread_cond_init_internal (cond, cond_attr);
+-}
+-versioned_symbol (libpthread, __pthread_cond_init, pthread_cond_init,
+-                  GLIBC_2_3_2);
+-# undef versioned_symbol
+-# define versioned_symbol(lib, local, symbol, version)
+-# undef __pthread_cond_init
+-# define __pthread_cond_init __pthread_cond_init_internal
+-# include_next <pthread_cond_init.c>
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c 
b/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c
+deleted file mode 100644
+index 2bf32af933..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c
++++ /dev/null
+@@ -1,40 +0,0 @@
+-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Carlos O'Donell <car...@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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef INCLUDED_SELF
+-# define INCLUDED_SELF
+-# include <pthread_cond_signal.c>
+-#else
+-# include <pthread.h>
+-# include <pthreadP.h>
+-# include <internaltypes.h>
+-# include <shlib-compat.h>
+-int
+-__pthread_cond_signal (pthread_cond_t *cond)
+-{
+-  cond_compat_check_and_clear (cond);
+-  return __pthread_cond_signal_internal (cond);
+-}
+-versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal,
+-                  GLIBC_2_3_2);
+-# undef versioned_symbol
+-# define versioned_symbol(lib, local, symbol, version)
+-# undef __pthread_cond_signal
+-# define __pthread_cond_signal __pthread_cond_signal_internal
+-# include_next <pthread_cond_signal.c>
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c 
b/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c
+deleted file mode 100644
+index 1cc2fc15d4..0000000000
+--- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c
++++ /dev/null
+@@ -1,53 +0,0 @@
+-/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Carlos O'Donell <car...@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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef INCLUDED_SELF
+-# define INCLUDED_SELF
+-# include <pthread_cond_wait.c>
+-#else
+-# include <pthread.h>
+-# include <pthreadP.h>
+-# include <internaltypes.h>
+-# include <shlib-compat.h>
+-int
+-__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
+-{
+-  cond_compat_check_and_clear (cond);
+-  return __pthread_cond_wait_internal (cond, mutex);
+-}
+-versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+-                  GLIBC_2_3_2);
+-int
+-__pthread_cond_timedwait (cond, mutex, abstime)
+-     pthread_cond_t *cond;
+-     pthread_mutex_t *mutex;
+-     const struct timespec *abstime;
+-{
+-  cond_compat_check_and_clear (cond);
+-  return __pthread_cond_timedwait_internal (cond, mutex, abstime);
+-}
+-versioned_symbol (libpthread, __pthread_cond_timedwait, 
pthread_cond_timedwait,
+-                  GLIBC_2_3_2);
+-# undef versioned_symbol
+-# define versioned_symbol(lib, local, symbol, version)
+-# undef __pthread_cond_wait
+-# define __pthread_cond_wait __pthread_cond_wait_internal
+-# undef __pthread_cond_timedwait
+-# define __pthread_cond_timedwait __pthread_cond_timedwait_internal
+-# include_next <pthread_cond_wait.c>
+-#endif
+diff --git a/sysdeps/unix/sysv/linux/hppa/setcontext.S 
b/sysdeps/unix/sysv/linux/hppa/setcontext.S
+index 3f4da7938f..92cb204f8d 100644
+--- a/sysdeps/unix/sysv/linux/hppa/setcontext.S
++++ b/sysdeps/unix/sysv/linux/hppa/setcontext.S
+@@ -26,8 +26,11 @@
+ ENTRY(__setcontext)
+       /* Prologue */
+       stwm    %r3, 64(%sp)
++      .cfi_def_cfa_offset -64
++      .cfi_offset 3, 0
+ #ifdef PIC
+       stw     %r19, -32(%sp)
++      .cfi_offset 19, 32
+ #endif
+ 
+       /* Save ucp.  */
+@@ -141,7 +144,7 @@ ENTRY(__setcontext)
+ 
+       /* No further context available. Exit now.  */
+       bl      HIDDEN_JUMPTARGET(exit), %r2
+-      ldi     -1, %r26
++      ldi     0, %r26
+ 
+ 
+ .Lerror:
+diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h 
b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+index 5ea297267f..8b7f2b2095 100644
+--- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
++++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+@@ -62,12 +62,11 @@
+       ENTRY (__##syscall_name##_nocancel)                             \
+       DOARGS_##args                                   ASM_LINE_SEP    \
+       stwm TREG, 64(%sp)                              ASM_LINE_SEP    \
++      .cfi_def_cfa_offset -64                         ASM_LINE_SEP    \
+       .cfi_offset TREG, 0                             ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset 64                       ASM_LINE_SEP    \
+       stw %sp, -4(%sp)                                ASM_LINE_SEP    \
+-      .cfi_offset 30, -4                              ASM_LINE_SEP    \
+       stw %r19, -32(%sp)                              ASM_LINE_SEP    \
+-      .cfi_offset 19, -32                             ASM_LINE_SEP    \
++      .cfi_offset 19, 32                              ASM_LINE_SEP    \
+       /* Save r19 */                                  ASM_LINE_SEP    \
+       SAVE_PIC(TREG)                                  ASM_LINE_SEP    \
+       /* Do syscall, delay loads # */                 ASM_LINE_SEP    \
+@@ -91,21 +90,19 @@ L(pre_nc_end):                                             
ASM_LINE_SEP    \
+       /* No need to LOAD_PIC */                       ASM_LINE_SEP    \
+       /* Undo frame */                                ASM_LINE_SEP    \
+       ldwm -64(%sp),TREG                              ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset -64                      ASM_LINE_SEP    \
+       /* Restore rp before exit */                    ASM_LINE_SEP    \
+       ldw -20(%sp), %rp                               ASM_LINE_SEP    \
+-      .cfi_restore 2                                  ASM_LINE_SEP    \
+       ret                                             ASM_LINE_SEP    \
+       END(__##syscall_name##_nocancel)                ASM_LINE_SEP    \
+       /**********************************************/ASM_LINE_SEP    \
+       ENTRY (name)                                                    \
+       DOARGS_##args                                   ASM_LINE_SEP    \
+       stwm TREG, 64(%sp)                              ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset 64                       ASM_LINE_SEP    \
++      .cfi_def_cfa_offset -64                         ASM_LINE_SEP    \
++      .cfi_offset TREG, 0                             ASM_LINE_SEP    \
+       stw %sp, -4(%sp)                                ASM_LINE_SEP    \
+-      .cfi_offset 30, -4                              ASM_LINE_SEP    \
+       stw %r19, -32(%sp)                              ASM_LINE_SEP    \
+-      .cfi_offset 19, -32                             ASM_LINE_SEP    \
++      .cfi_offset 19, 32                              ASM_LINE_SEP    \
+       /* Done setting up frame, continue... */        ASM_LINE_SEP    \
+       SINGLE_THREAD_P                                 ASM_LINE_SEP    \
+       cmpib,<>,n 0,%ret0,L(pseudo_cancel)             ASM_LINE_SEP    \
+@@ -168,40 +165,32 @@ L(pre_end):                                              
ASM_LINE_SEP    \
+       /* No need to LOAD_PIC */                       ASM_LINE_SEP    \
+       /* Undo frame */                                ASM_LINE_SEP    \
+       ldwm -64(%sp),TREG                              ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset -64                      ASM_LINE_SEP    \
+       /* Restore rp before exit */                    ASM_LINE_SEP    \
+-      ldw -20(%sp), %rp                               ASM_LINE_SEP    \
+-      .cfi_restore 2                                  ASM_LINE_SEP
++      ldw -20(%sp), %rp                               ASM_LINE_SEP
+ 
+ /* Save arguments into our frame */
+ # define PUSHARGS_0   /* nothing to do */
+ # define PUSHARGS_1   PUSHARGS_0 stw %r26, -36(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 26, -36                     ASM_LINE_SEP
++                      .cfi_offset 26, 28                      ASM_LINE_SEP
+ # define PUSHARGS_2   PUSHARGS_1 stw %r25, -40(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 25, -40                     ASM_LINE_SEP
++                      .cfi_offset 25, 24                      ASM_LINE_SEP
+ # define PUSHARGS_3   PUSHARGS_2 stw %r24, -44(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 24, -44                     ASM_LINE_SEP
++                      .cfi_offset 24, 20                      ASM_LINE_SEP
+ # define PUSHARGS_4   PUSHARGS_3 stw %r23, -48(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 23, -48                     ASM_LINE_SEP
++                      .cfi_offset 23, 16                      ASM_LINE_SEP
+ # define PUSHARGS_5   PUSHARGS_4 stw %r22, -52(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 22, -52                     ASM_LINE_SEP
++                      .cfi_offset 22, 12                      ASM_LINE_SEP
+ # define PUSHARGS_6   PUSHARGS_5 stw %r21, -56(%sr0,%sp)      ASM_LINE_SEP    
\
+-                      .cfi_offset 21, -56                     ASM_LINE_SEP
++                      .cfi_offset 21, 8                       ASM_LINE_SEP
+ 
+ /* Bring them back from the stack */
+ # define POPARGS_0    /* nothing to do */
+-# define POPARGS_1    POPARGS_0 ldw -36(%sr0,%sp), %r26       ASM_LINE_SEP    
\
+-                      .cfi_restore 26                         ASM_LINE_SEP
+-# define POPARGS_2    POPARGS_1 ldw -40(%sr0,%sp), %r25       ASM_LINE_SEP    
\
+-                      .cfi_restore 25                         ASM_LINE_SEP
+-# define POPARGS_3    POPARGS_2 ldw -44(%sr0,%sp), %r24       ASM_LINE_SEP    
\
+-                      .cfi_restore 24                         ASM_LINE_SEP
+-# define POPARGS_4    POPARGS_3 ldw -48(%sr0,%sp), %r23       ASM_LINE_SEP    
\
+-                      .cfi_restore 23                         ASM_LINE_SEP
+-# define POPARGS_5    POPARGS_4 ldw -52(%sr0,%sp), %r22       ASM_LINE_SEP    
\
+-                      .cfi_restore 22                         ASM_LINE_SEP
+-# define POPARGS_6    POPARGS_5 ldw -56(%sr0,%sp), %r21       ASM_LINE_SEP    
\
+-                      .cfi_restore 21                         ASM_LINE_SEP
++# define POPARGS_1    POPARGS_0 ldw -36(%sr0,%sp), %r26       ASM_LINE_SEP
++# define POPARGS_2    POPARGS_1 ldw -40(%sr0,%sp), %r25       ASM_LINE_SEP
++# define POPARGS_3    POPARGS_2 ldw -44(%sr0,%sp), %r24       ASM_LINE_SEP
++# define POPARGS_4    POPARGS_3 ldw -48(%sr0,%sp), %r23       ASM_LINE_SEP
++# define POPARGS_5    POPARGS_4 ldw -52(%sr0,%sp), %r22       ASM_LINE_SEP
++# define POPARGS_6    POPARGS_5 ldw -56(%sr0,%sp), %r21       ASM_LINE_SEP
+ 
+ # if IS_IN (libpthread)
+ #  ifdef PIC
+diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h 
b/sysdeps/unix/sysv/linux/hppa/sysdep.h
+index d8dd0431a4..c0cd59e9f5 100644
+--- a/sysdeps/unix/sysv/linux/hppa/sysdep.h
++++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h
+@@ -49,11 +49,9 @@
+    to another function */
+ #define TREG 4
+ #define SAVE_PIC(SREG) \
+-      copy %r19, SREG ASM_LINE_SEP    \
+-      .cfi_register 19, SREG
++      copy %r19, SREG
+ #define LOAD_PIC(LREG) \
+-      copy LREG , %r19 ASM_LINE_SEP   \
+-      .cfi_restore 19
++      copy LREG , %r19
+ /* Inline assembly defines */
+ #define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */
+ #define SAVE_ASM_PIC  "       copy %%r19, %" TREG_ASM "\n"
+@@ -292,12 +290,11 @@
+ #define DO_CALL(syscall_name, args)                           \
+       /* Create a frame */                    ASM_LINE_SEP    \
+       stwm TREG, 64(%sp)                      ASM_LINE_SEP    \
++      .cfi_def_cfa_offset -64                 ASM_LINE_SEP    \
+       .cfi_offset TREG, 0                     ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset 64               ASM_LINE_SEP    \
+       stw %sp, -4(%sp)                        ASM_LINE_SEP    \
+-      .cfi_offset 30, -4                      ASM_LINE_SEP    \
+       stw %r19, -32(%sp)                      ASM_LINE_SEP    \
+-      .cfi_offset 19, -32                     ASM_LINE_SEP    \
++      .cfi_offset 19, 32                      ASM_LINE_SEP    \
+       /* Save r19 */                          ASM_LINE_SEP    \
+       SAVE_PIC(TREG)                          ASM_LINE_SEP    \
+       /* Do syscall, delay loads # */         ASM_LINE_SEP    \
+@@ -320,10 +317,8 @@
+ L(pre_end):                                   ASM_LINE_SEP    \
+       /* Restore our frame, restoring TREG */ ASM_LINE_SEP    \
+       ldwm -64(%sp), TREG                     ASM_LINE_SEP    \
+-      .cfi_adjust_cfa_offset -64              ASM_LINE_SEP    \
+       /* Restore return pointer */            ASM_LINE_SEP    \
+-      ldw -20(%sp),%rp                        ASM_LINE_SEP    \
+-      .cfi_restore 2                          ASM_LINE_SEP
++      ldw -20(%sp),%rp                        ASM_LINE_SEP
+ 
+ /* We do nothing with the return, except hand it back to someone else */
+ #undef  DO_CALL_NOERRNO
 diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data 
b/sysdeps/unix/sysv/linux/i386/localplt.data
 index 2c2584956d..8ea4333846 100644
 --- a/sysdeps/unix/sysv/linux/i386/localplt.data
@@ -2914,7 +4112,7 @@ index 2daf0c5ef0..29d8f25ab5 100644
    void *stack = __mmap (NULL, stack_size, prot,
                        MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
 diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
-index 1c714a4017..9afd74c42e 100644
+index 1c714a4017..5019f156c8 100644
 --- a/sysdeps/x86/cpu-features.c
 +++ b/sysdeps/x86/cpu-features.c
 @@ -139,8 +139,6 @@ init_cpu_features (struct cpu_features *cpu_features)
@@ -2926,7 +4124,7 @@ index 1c714a4017..9afd74c42e 100644
  
            case 0x5c:
            case 0x5f:
-@@ -226,6 +224,16 @@ init_cpu_features (struct cpu_features *cpu_features)
+@@ -226,11 +224,24 @@ init_cpu_features (struct cpu_features *cpu_features)
        cpu_features->feature[index_arch_AVX_Fast_Unaligned_Load]
          |= bit_arch_AVX_Fast_Unaligned_Load;
  
@@ -2941,8 +4139,18 @@ index 1c714a4017..9afd74c42e 100644
 +        |= bit_arch_Prefer_No_AVX512;
 +
        /* To avoid SSE transition penalty, use _dl_runtime_resolve_slow.
-          If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt.  */
+-         If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt.  */
++         If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt.
++       Use _dl_runtime_resolve_opt only with AVX512F since it is
++       slower than _dl_runtime_resolve_slow with AVX.  */
        cpu_features->feature[index_arch_Use_dl_runtime_resolve_slow]
+       |= bit_arch_Use_dl_runtime_resolve_slow;
+-      if (cpu_features->max_cpuid >= 0xd)
++      if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable)
++        && cpu_features->max_cpuid >= 0xd)
+       {
+         unsigned int eax;
+ 
 diff --git a/sysdeps/x86/cpu-features.h b/sysdeps/x86/cpu-features.h
 index 95f0fcff87..a409db67d8 100644
 --- a/sysdeps/x86/cpu-features.h
diff --git a/debian/patches/hppa/local-fptr-table-size.diff 
b/debian/patches/hppa/local-fptr-table-size.diff
deleted file mode 100644
index ee048bb..0000000
--- a/debian/patches/hppa/local-fptr-table-size.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-Index: glibc-2.21/sysdeps/hppa/dl-fptr.c
-===================================================================
---- glibc-2.21.orig/sysdeps/hppa/dl-fptr.c
-+++ glibc-2.21/sysdeps/hppa/dl-fptr.c
-@@ -28,6 +28,7 @@
- #include <dl-fptr.h>
- #include <dl-unmap-segments.h>
- #include <atomic.h>
-+#include <libc-internal.h>
- 
- #ifndef ELF_MACHINE_BOOT_FPTR_TABLE_LEN
- /* ELF_MACHINE_BOOT_FPTR_TABLE_LEN should be greater than the number of
-@@ -181,24 +182,29 @@
- static inline ElfW(Addr) * __attribute__ ((always_inline))
- make_fptr_table (struct link_map *map)
- {
--  const ElfW(Sym) *symtab
--    = (const void *) D_PTR (map, l_info[DT_SYMTAB]);
-+  const ElfW(Sym) *symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]);
-   const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
-   ElfW(Addr) *fptr_table;
-   size_t size;
-   size_t len;
-+  const ElfW(Sym) *symtabend;
- 
--  /* XXX Apparently the only way to find out the size of the dynamic
--     symbol section is to assume that the string table follows right
--     afterwards...  */
--  len = ((strtab - (char *) symtab)
-+  /* Determine the end of the dynamic symbol table using the hash.  */
-+  if (map->l_info[DT_HASH] != NULL)
-+    symtabend = (symtab + ((Elf_Symndx *) D_PTR (map, l_info[DT_HASH]))[1]);
-+  else
-+  /* There is no direct way to determine the number of symbols in the
-+     dynamic symbol table and no hash table is present.  The ELF
-+     binary is ill-formed but what shall we do?  Use the beginning of
-+     the string table which generally follows the symbol table.  */
-+    symtabend = (const ElfW(Sym) *) strtab;
-+
-+  len = (((char *) symtabend - (char *) symtab)
-        / map->l_info[DT_SYMENT]->d_un.d_val);
--  size = ((len * sizeof (fptr_table[0]) + GLRO(dl_pagesize) - 1)
--        & -GLRO(dl_pagesize));
--  /* XXX We don't support here in the moment systems without MAP_ANON.
--     There probably are none for IA-64.  In case this is proven wrong
--     we will have to open /dev/null here and use the file descriptor
--     instead of the hard-coded -1.  */
-+  size = ALIGN_UP (len * sizeof (fptr_table[0]), GLRO(dl_pagesize));
-+
-+  /* We don't support systems without MAP_ANON.  We avoid using malloc
-+     because this might get called before malloc is setup.  */
-   fptr_table = __mmap (NULL, size,
-                      PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE,
-                      -1, 0);
diff --git a/debian/patches/hppa/local-shmlba.diff 
b/debian/patches/hppa/local-shmlba.diff
deleted file mode 100644
index c7673dd..0000000
--- a/debian/patches/hppa/local-shmlba.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: eglibc-2.18/sysdeps/unix/sysv/linux/hppa/bits/shm.h
-===================================================================
---- eglibc-2.18.orig/sysdeps/unix/sysv/linux/hppa/bits/shm.h   2013-01-09 
19:28:48.000000000 -0500
-+++ eglibc-2.18/sysdeps/unix/sysv/linux/hppa/bits/shm.h        2014-04-09 
21:08:06.516202583 -0400
-@@ -36,7 +36,7 @@
- #define SHM_UNLOCK    12              /* unlock segment (root only) */
- 
- /* Segment low boundary address multiple.  */
--#define SHMLBA 0x00400000             /* address needs to be 4 Mb aligned */
-+#define SHMLBA                (__getpagesize ())
- 
- /* Type to count number of attaches.  */
- typedef unsigned long int shmatt_t;
diff --git a/debian/patches/hppa/local-stack-grows-up.diff 
b/debian/patches/hppa/local-stack-grows-up.diff
deleted file mode 100644
index 6c4bbc4..0000000
--- a/debian/patches/hppa/local-stack-grows-up.diff
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/nptl/allocatestack.c
-+++ b/nptl/allocatestack.c
-@@ -683,9 +692,13 @@
-                       prot) != 0)
-           goto mprot_error;
- #elif _STACK_GROWS_UP
--        if (mprotect ((char *) pd - pd->guardsize,
--                      pd->guardsize - guardsize, prot) != 0)
--          goto mprot_error;
-+        char *new_guard = (char *) (((uintptr_t) pd - guardsize) & 
~pagesize_m1);
-+        char *old_guard = (char *) (((uintptr_t) pd - pd->guardsize) & 
~pagesize_m1);
-+        /* The guard size difference might be > 0, but once rounded
-+           to the nearest page the size difference might be zero.  */
-+        if (old_guard - new_guard > 0)
-+          if (mprotect (old_guard, new_guard - old_guard, prot) != 0)
-+            goto mprot_error;
- #endif
- 
-         pd->guardsize = guardsize;
diff --git a/debian/patches/hppa/submitted-dladdr.diff 
b/debian/patches/hppa/submitted-dladdr.diff
deleted file mode 100644
index 5dc670f..0000000
--- a/debian/patches/hppa/submitted-dladdr.diff
+++ /dev/null
@@ -1,71 +0,0 @@
-2016-05-14  John David Anglin  <dang...@gcc.gnu.org>
-
-       [BZ 20098]
-       * sysdeps/hppa/dl-fptr.c (_dl_read_access_allowed): New.
-       (_dl_lookup_address): Return address if it is not consistent with
-       being a linker defined function pointer.  Likewise, return address
-       if address and function descriptor addresses are not accessible.
-       
-diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c
-index 083242b..af0c5a1 100644
---- a/sysdeps/hppa/dl-fptr.c
-+++ b/sysdeps/hppa/dl-fptr.c
-@@ -331,22 +331,45 @@ elf_machine_resolve (void)
-   return addr;
- }
- 
-+static inline int
-+_dl_read_access_allowed (unsigned int *addr)
-+{
-+  int result;
-+
-+  asm ("proberi       (%1),3,%0" : "=r" (result) : "r" (addr) : );
-+
-+  return result;
-+}
-+
- ElfW(Addr)
- _dl_lookup_address (const void *address)
- {
-   ElfW(Addr) addr = (ElfW(Addr)) address;
-   unsigned int *desc, *gptr;
- 
--  /* Check for special cases.  */
--  if ((int) addr == -1
--      || (unsigned int) addr < 4096
--      || !((unsigned int) addr & 2))
-+  /* Return ADDR if the least-significant two bits of ADDR are not consistent
-+     with ADDR being a linker defined function pointer.  The normal value for
-+     a code address in a backtrace is 3.  */
-+  if (((unsigned int) addr & 3) != 2)
-+    return addr;
-+
-+  /* Handle special case where ADDR points to page 0.  */
-+  if ((unsigned int) addr < 4096)
-     return addr;
- 
-   /* Clear least-significant two bits from descriptor address.  */
-   desc = (unsigned int *) ((unsigned int) addr & ~3);
-+  if (!_dl_read_access_allowed (desc))
-+    return addr;
-+
-+  /* Load first word of candidate descriptor.  It should be a pointer
-+     with word alignment and point to memory that can be read.  */
-+  gptr = (unsigned int *) desc[0];
-+  if (((unsigned int) gptr & 3) != 0
-+      || !_dl_read_access_allowed (gptr))
-+    return addr;
- 
--  /* Check if descriptor requires resolution.  The following trampoline is
-+  /* See if descriptor requires resolution.  The following trampoline is
-      used in each global offset table for function resolution:
- 
-               ldw 0(r20),r22
-@@ -358,7 +381,6 @@ _dl_lookup_address (const void *address)
-               .word "_dl_runtime_resolve ltp"
-      got:     .word _DYNAMIC
-               .word "struct link map address" */
--  gptr = (unsigned int *) desc[0];
-   if (gptr[0] == 0xea9f1fdd                   /* b,l .-12,r20     */
-       && gptr[1] == 0xd6801c1e                        /* depwi 0,31,2,r20 */
-       && (ElfW(Addr)) gptr[2] == elf_machine_resolve ())
diff --git a/debian/patches/hppa/submitted-gmon-start.diff 
b/debian/patches/hppa/submitted-gmon-start.diff
index 0849573..05a4ab6 100644
--- a/debian/patches/hppa/submitted-gmon-start.diff
+++ b/debian/patches/hppa/submitted-gmon-start.diff
@@ -173,33 +173,3 @@ index c36928c..dea1809 100644
  
  /* Extract the code address from a fixup value */
  #define DL_FIXUP_VALUE_CODE_ADDR(value) ((value).ip)
-diff --git a/sysdeps/hppa/dl-trampoline.S b/sysdeps/hppa/dl-trampoline.S
-index 22f484a..64f0966 100644
---- a/sysdeps/hppa/dl-trampoline.S
-+++ b/sysdeps/hppa/dl-trampoline.S
-@@ -82,6 +82,11 @@ _dl_runtime_resolve:
-       bl      _dl_fixup,%rp
-       copy    %r21,%r19               /* set fixup func ltp */
- 
-+      /* Sometimes a final executable may attempt to call an undefined
-+         weak function (e.g., __gmon_start__).  Return if the function
-+         was not resolved by _dl_fixup */
-+      comib,= 0,%r28,1f
-+
-       /* Load up the returned func descriptor */
-       copy    %r28, %r22
-       copy    %r29, %r19
-@@ -107,6 +112,13 @@ _dl_runtime_resolve:
-       /* Jump to new function, but return to previous function */
-       bv      %r0(%r22)
-       ldw     -20(%sp),%rp
-+
-+1:
-+      /* Return to previous function */
-+      ldw     -148(%sp),%rp
-+      bv      %r0(%rp)
-+      ldo     -128(%sp),%sp
-+
-         .EXIT
-         .PROCEND
-       cfi_endproc
diff --git a/debian/patches/hppa/submitted-longjmp.diff 
b/debian/patches/hppa/submitted-longjmp.diff
deleted file mode 100644
index 56adcc0..0000000
--- a/debian/patches/hppa/submitted-longjmp.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-2017-01-15  Helge Deller  <del...@gmx.de>
-
-       [BZ #21049]
-       * sysdeps/hppa/__longjmp.c (__longjmp): Move call to CHECK_SP up
-       to avoid clobbering r26.
-
-
---- a/sysdeps/hppa/__longjmp.c
-+++ b/sysdeps/hppa/__longjmp.c
-@@ -24,15 +24,16 @@
- void
- __longjmp (__jmp_buf env, int val)
- {
-+#ifdef CHECK_SP
-+  CHECK_SP (env[0].__jmp_buf.__sp);
-+#endif
-+
-+  {
-   /* We must use one of the non-callee saves registers
-      for env.  */
-   register unsigned long r26 asm ("r26") = (unsigned long)&env[0];
-   register unsigned long r25 asm ("r25") = (unsigned long)(val == 0 ? 1 : 
val);
- 
--#ifdef CHECK_SP
--  CHECK_SP (env[0].__jmp_buf.__sp);
--#endif
--
-   asm volatile(
-       /* Set return value.  */
-       "copy   %0, %%r28\n\t"
-@@ -79,6 +80,8 @@ __longjmp (__jmp_buf env, int val)
-       : /* No outputs.  */
-       : "r" (r25), "r" (r26)
-       : /* No point in clobbers.  */ );
-+  }
-+
-   /* Avoid `volatile function does return' warnings.  */
-   for (;;);
- }
-
diff --git a/debian/patches/hppa/submitted-setcontext.diff 
b/debian/patches/hppa/submitted-setcontext.diff
deleted file mode 100644
index bb35a48..0000000
--- a/debian/patches/hppa/submitted-setcontext.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: glibc-2.22/sysdeps/unix/sysv/linux/hppa/setcontext.S
-===================================================================
---- glibc-2.22.orig/sysdeps/unix/sysv/linux/hppa/setcontext.S
-+++ glibc-2.22/sysdeps/unix/sysv/linux/hppa/setcontext.S
-@@ -141,7 +141,7 @@ ENTRY(__setcontext)
- 
-       /* No further context available. Exit now.  */
-       bl      HIDDEN_JUMPTARGET(exit), %r2
--      ldi     -1, %r26
-+      ldi     0, %r26
- 
- 
- .Lerror:
diff --git a/debian/patches/hppa/submitted-sysdeps-cancel.diff 
b/debian/patches/hppa/submitted-sysdeps-cancel.diff
deleted file mode 100644
index 015711e..0000000
--- a/debian/patches/hppa/submitted-sysdeps-cancel.diff
+++ /dev/null
@@ -1,143 +0,0 @@
-diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h 
b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
-index cafc752..f239408 100644
---- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
-+++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
-@@ -62,12 +62,11 @@
-       ENTRY (__##syscall_name##_nocancel)                             \
-       DOARGS_##args                                   ASM_LINE_SEP    \
-       stwm TREG, 64(%sp)                              ASM_LINE_SEP    \
-+      .cfi_def_cfa_offset -64                         ASM_LINE_SEP    \
-       .cfi_offset TREG, 0                             ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset 64                       ASM_LINE_SEP    \
-       stw %sp, -4(%sp)                                ASM_LINE_SEP    \
--      .cfi_offset 30, -4                              ASM_LINE_SEP    \
-       stw %r19, -32(%sp)                              ASM_LINE_SEP    \
--      .cfi_offset 19, -32                             ASM_LINE_SEP    \
-+      .cfi_offset 19, 32                              ASM_LINE_SEP    \
-       /* Save r19 */                                  ASM_LINE_SEP    \
-       SAVE_PIC(TREG)                                  ASM_LINE_SEP    \
-       /* Do syscall, delay loads # */                 ASM_LINE_SEP    \
-@@ -91,21 +90,19 @@ L(pre_nc_end):                                             
ASM_LINE_SEP    \
-       /* No need to LOAD_PIC */                       ASM_LINE_SEP    \
-       /* Undo frame */                                ASM_LINE_SEP    \
-       ldwm -64(%sp),TREG                              ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset -64                      ASM_LINE_SEP    \
-       /* Restore rp before exit */                    ASM_LINE_SEP    \
-       ldw -20(%sp), %rp                               ASM_LINE_SEP    \
--      .cfi_restore 2                                  ASM_LINE_SEP    \
-       ret                                             ASM_LINE_SEP    \
-       END(__##syscall_name##_nocancel)                ASM_LINE_SEP    \
-       /**********************************************/ASM_LINE_SEP    \
-       ENTRY (name)                                                    \
-       DOARGS_##args                                   ASM_LINE_SEP    \
-       stwm TREG, 64(%sp)                              ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset 64                       ASM_LINE_SEP    \
-+      .cfi_def_cfa_offset -64                         ASM_LINE_SEP    \
-+      .cfi_offset TREG, 0                             ASM_LINE_SEP    \
-       stw %sp, -4(%sp)                                ASM_LINE_SEP    \
--      .cfi_offset 30, -4                              ASM_LINE_SEP    \
-       stw %r19, -32(%sp)                              ASM_LINE_SEP    \
--      .cfi_offset 19, -32                             ASM_LINE_SEP    \
-+      .cfi_offset 19, 32                              ASM_LINE_SEP    \
-       /* Done setting up frame, continue... */        ASM_LINE_SEP    \
-       SINGLE_THREAD_P                                 ASM_LINE_SEP    \
-       cmpib,<>,n 0,%ret0,L(pseudo_cancel)             ASM_LINE_SEP    \
-@@ -168,40 +165,32 @@ L(pre_end):                                              
ASM_LINE_SEP    \
-       /* No need to LOAD_PIC */                       ASM_LINE_SEP    \
-       /* Undo frame */                                ASM_LINE_SEP    \
-       ldwm -64(%sp),TREG                              ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset -64                      ASM_LINE_SEP    \
-       /* Restore rp before exit */                    ASM_LINE_SEP    \
--      ldw -20(%sp), %rp                               ASM_LINE_SEP    \
--      .cfi_restore 2                                  ASM_LINE_SEP
-+      ldw -20(%sp), %rp                               ASM_LINE_SEP
- 
- /* Save arguments into our frame */
- # define PUSHARGS_0   /* nothing to do */
- # define PUSHARGS_1   PUSHARGS_0 stw %r26, -36(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 26, -36                     ASM_LINE_SEP
-+                      .cfi_offset 26, 28                      ASM_LINE_SEP
- # define PUSHARGS_2   PUSHARGS_1 stw %r25, -40(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 25, -40                     ASM_LINE_SEP
-+                      .cfi_offset 25, 24                      ASM_LINE_SEP
- # define PUSHARGS_3   PUSHARGS_2 stw %r24, -44(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 24, -44                     ASM_LINE_SEP
-+                      .cfi_offset 24, 20                      ASM_LINE_SEP
- # define PUSHARGS_4   PUSHARGS_3 stw %r23, -48(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 23, -48                     ASM_LINE_SEP
-+                      .cfi_offset 23, 16                      ASM_LINE_SEP
- # define PUSHARGS_5   PUSHARGS_4 stw %r22, -52(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 22, -52                     ASM_LINE_SEP
-+                      .cfi_offset 22, 12                      ASM_LINE_SEP
- # define PUSHARGS_6   PUSHARGS_5 stw %r21, -56(%sr0,%sp)      ASM_LINE_SEP    
\
--                      .cfi_offset 21, -56                     ASM_LINE_SEP
-+                      .cfi_offset 21, 8                       ASM_LINE_SEP
- 
- /* Bring them back from the stack */
- # define POPARGS_0    /* nothing to do */
--# define POPARGS_1    POPARGS_0 ldw -36(%sr0,%sp), %r26       ASM_LINE_SEP    
\
--                      .cfi_restore 26                         ASM_LINE_SEP
--# define POPARGS_2    POPARGS_1 ldw -40(%sr0,%sp), %r25       ASM_LINE_SEP    
\
--                      .cfi_restore 25                         ASM_LINE_SEP
--# define POPARGS_3    POPARGS_2 ldw -44(%sr0,%sp), %r24       ASM_LINE_SEP    
\
--                      .cfi_restore 24                         ASM_LINE_SEP
--# define POPARGS_4    POPARGS_3 ldw -48(%sr0,%sp), %r23       ASM_LINE_SEP    
\
--                      .cfi_restore 23                         ASM_LINE_SEP
--# define POPARGS_5    POPARGS_4 ldw -52(%sr0,%sp), %r22       ASM_LINE_SEP    
\
--                      .cfi_restore 22                         ASM_LINE_SEP
--# define POPARGS_6    POPARGS_5 ldw -56(%sr0,%sp), %r21       ASM_LINE_SEP    
\
--                      .cfi_restore 21                         ASM_LINE_SEP
-+# define POPARGS_1    POPARGS_0 ldw -36(%sr0,%sp), %r26       ASM_LINE_SEP
-+# define POPARGS_2    POPARGS_1 ldw -40(%sr0,%sp), %r25       ASM_LINE_SEP
-+# define POPARGS_3    POPARGS_2 ldw -44(%sr0,%sp), %r24       ASM_LINE_SEP
-+# define POPARGS_4    POPARGS_3 ldw -48(%sr0,%sp), %r23       ASM_LINE_SEP
-+# define POPARGS_5    POPARGS_4 ldw -52(%sr0,%sp), %r22       ASM_LINE_SEP
-+# define POPARGS_6    POPARGS_5 ldw -56(%sr0,%sp), %r21       ASM_LINE_SEP
- 
- # if IS_IN (libpthread)
- #  ifdef PIC
-diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h 
b/sysdeps/unix/sysv/linux/hppa/sysdep.h
-index b459f0a..00cb366 100644
---- a/sysdeps/unix/sysv/linux/hppa/sysdep.h
-+++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h
-@@ -49,11 +49,9 @@
-    to another function */
- #define TREG 4
- #define SAVE_PIC(SREG) \
--      copy %r19, SREG ASM_LINE_SEP    \
--      .cfi_register 19, SREG
-+      copy %r19, SREG
- #define LOAD_PIC(LREG) \
--      copy LREG , %r19 ASM_LINE_SEP   \
--      .cfi_restore 19
-+      copy LREG , %r19
- /* Inline assembly defines */
- #define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */
- #define SAVE_ASM_PIC  "       copy %%r19, %" TREG_ASM "\n"
-@@ -292,12 +290,11 @@
- #define DO_CALL(syscall_name, args)                           \
-       /* Create a frame */                    ASM_LINE_SEP    \
-       stwm TREG, 64(%sp)                      ASM_LINE_SEP    \
-+      .cfi_def_cfa_offset -64                 ASM_LINE_SEP    \
-       .cfi_offset TREG, 0                     ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset 64               ASM_LINE_SEP    \
-       stw %sp, -4(%sp)                        ASM_LINE_SEP    \
--      .cfi_offset 30, -4                      ASM_LINE_SEP    \
-       stw %r19, -32(%sp)                      ASM_LINE_SEP    \
--      .cfi_offset 19, -32                     ASM_LINE_SEP    \
-+      .cfi_offset 19, 32                      ASM_LINE_SEP    \
-       /* Save r19 */                          ASM_LINE_SEP    \
-       SAVE_PIC(TREG)                          ASM_LINE_SEP    \
-       /* Do syscall, delay loads # */         ASM_LINE_SEP    \
-@@ -320,10 +317,8 @@
- L(pre_end):                                   ASM_LINE_SEP    \
-       /* Restore our frame, restoring TREG */ ASM_LINE_SEP    \
-       ldwm -64(%sp), TREG                     ASM_LINE_SEP    \
--      .cfi_adjust_cfa_offset -64              ASM_LINE_SEP    \
-       /* Restore return pointer */            ASM_LINE_SEP    \
--      ldw -20(%sp),%rp                        ASM_LINE_SEP    \
--      .cfi_restore 2                          ASM_LINE_SEP
-+      ldw -20(%sp),%rp                        ASM_LINE_SEP
- 
- /* We do nothing with the return, except hand it back to someone else */
- #undef  DO_CALL_NOERRNO
diff --git a/debian/patches/series b/debian/patches/series
index a392963..4f1107c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -47,14 +47,7 @@ arm/submitted-strip-bit-0.diff
 
 hppa/local-inlining.diff
 hppa/local-elf-make-cflags.diff
-hppa/local-shmlba.diff
-hppa/local-fptr-table-size.diff
 hppa/submitted-gmon-start.diff
-hppa/submitted-dladdr.diff
-hppa/local-stack-grows-up.diff
-hppa/submitted-setcontext.diff
-hppa/submitted-sysdeps-cancel.diff
-hppa/submitted-longjmp.diff
 
 hurd-i386/local-enable-ldconfig.diff
 hurd-i386/tg-context_functions.diff

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

Reply via email to