All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26
@ 2017-09-23 21:23 Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
                   ` (15 more replies)
  0 siblings, 16 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:23 UTC (permalink / raw)
  To: buildroot

This series bump glibc to the latest release and allow to remove all
patches required for the previous version! But glibc come with some
new issue that are hopefully already fixed in the 2.26.x stable branch.

While testing this new version, some build issues has been dicovered.
Two gcc patch are needed to build a toolchain with older compiler
(gcc 4.9 to 6.4), gcc 7.2 contain already the fix.

Backport a series related to bug 21930 and 22146.
Without them the float128 support break the C++ build for some
packages.

https://sourceware.org/bugzilla/show_bug.cgi?id=21930
https://sourceware.org/bugzilla/show_bug.cgi?id=22146

This third series is for testing and review.
Let's hope that glibc 2.26.1 will be released soon :)

Best regards,
Romain

Romain Naour (7):
  package/gcc: fix build issue with glibc 2.26
  package/gcc: fix build issue with glibc 2.26
  package/glibc: needs kernel headers >= 3.10 on powerpc64le
  package/gcc: enable float128 on powerpc64le with glibc >= 2.26
    toolchains
  package/diffutils: disable getopt_long replacement with glibc
  package/flex: disable reallocarray
  package/glibc: bump to 2.26

 package/diffutils/diffutils.mk                     |   6 +
 package/flex/flex.mk                               |   3 +-
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 190 ++++++++++++
 package/gcc/4.9.4/944-sanitizer-linux.patch        |  88 ++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++
 package/gcc/5.4.0/944-sanitizer-linux.patch        |  91 ++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++
 package/gcc/6.4.0/943-sanitizer-linux.patch        |  91 ++++++
 package/gcc/Config.in.host                         |   4 +
 package/gcc/gcc.mk                                 |   8 +
 ...__builtin_types_compatible_p-in-C-mode-bu.patch |  50 ++++
 .../glibc/0001-sh-Fix-building-with-gcc5-6.patch   |  56 ----
 ...00366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch |  35 ---
 ...02-Do-not-use-generic-selection-in-C-mode.patch |  56 ++++
 ...-version-of-issignaling-that-does-not-use.patch | 225 +++++++++++++++
 ...ject-overly-long-LD_PRELOAD-path-elements.patch | 122 --------
 ...ersion-of-issignaling-when-__NO_LONG_DOUB.patch |  47 +++
 ...Reject-overly-long-LD_AUDIT-path-elements.patch | 204 -------------
 ...-version-of-iszero-that-does-not-use-__MA.patch | 210 ++++++++++++++
 package/glibc/0005-fix-binutils-2-29-build.patch   |  65 -----
 ...ify-use-the-builtin-when-optimizing-for-s.patch |  63 ++++
 ...g-IS_IN-libc-guards-to-vectorized-strcspn.patch |  47 ---
 package/glibc/0006-sh4-trap.patch                  | 318 ---------------------
 package/glibc/glibc.hash                           |   2 +-
 package/glibc/glibc.mk                             |   2 +-
 toolchain/toolchain-buildroot/Config.in            |   6 +
 26 files changed, 1523 insertions(+), 850 deletions(-)
 create mode 100644 package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/4.9.4/944-sanitizer-linux.patch
 create mode 100644 package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/5.4.0/944-sanitizer-linux.patch
 create mode 100644 package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/6.4.0/943-sanitizer-linux.patch
 create mode 100644 package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
 delete mode 100644 package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
 delete mode 100644 package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
 create mode 100644 package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
 create mode 100644 package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
 delete mode 100644 package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
 create mode 100644 package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
 delete mode 100644 package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
 create mode 100644 package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
 delete mode 100644 package/glibc/0005-fix-binutils-2-29-build.patch
 create mode 100644 package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
 delete mode 100644 package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
 delete mode 100644 package/glibc/0006-sh4-trap.patch

-- 
2.9.5

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 20:29   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
                   ` (14 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

In file included from ../../../libgcc/unwind-dw2.c:403:0:
./md-unwind-support.h: In function ??aarch64_fallback_frame_state??:
./md-unwind-support.h:58:21: error: field ??uc??  has incomplete type
     struct ucontext uc;
                     ^~

The fix is already included in gcc 7.2 release [1]. We have to backport it to
all older gcc release since it's not included in any stable release yet.

[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=14c2f22a1877f6b60a2f7c2f83ffb032759456a6

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: use upstream commit for gcc 5 and 6. (Yann)
---
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 190 ++++++++++++++++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
 3 files changed, 574 insertions(+)
 create mode 100644 package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch

diff --git a/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..526346c
--- /dev/null
+++ b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,190 @@
+From b7e85069238c40eae54d0ca03ab6d5470d1815f9 Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:25:10 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
+[Romain backport from gcc-5-branch]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 6b5b3cd..d13dc34 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index b5bfd1c..166d3d2 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index dc58f0a..8b94568 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index 7986928..a9d621c 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index 1ba2a0c4..d67767e 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index ba4bd80..8978868 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 4a3cfff..d2ac437 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index 4875706..671bde7 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index 27481cf..c24d58c 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 6832d0b..cb15b4c 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -63,7 +63,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
diff --git a/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..4c3385d
--- /dev/null
+++ b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,192 @@
+From c287e88cc3743bfa7e5719bc4dee327aa3950051 Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:25:10 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit ecf0d1a107133c715763940c2b197aa814710e1b)
+[Romain rebase on 5.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 86d17b1..909f68f 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index d65474f..9a226b1 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index 0c270e4..7fa95d2 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index e54bf73..d35fc45 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index fb79a4d..b2f5ea4 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index dff1c20..1d88afe 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 0149468..9157535 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index e63091f..67033f0 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index fd83ba7..e3c9ef0 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 9daf738..ff6b663 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -64,7 +64,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
diff --git a/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..a2a2ea0
--- /dev/null
+++ b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,192 @@
+From 35d8ca22047f101a700abb29cffbf03b81278a2b Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:23:57 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 249957 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit b685411208e0aaa79190d54faf945763514706b8)
+[Romain rebase on gcc 6.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 4512efb..06de45a 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index bdbba4a..e84812e 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index 77b7c23..8bf5e82 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index 540a0a2..29efbe3 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index 75b7cf7..f964e24 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index 2304142..30f25ea 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 9a2657f..e47493d 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index e389cac..0bf43ba 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index 796e976..75f8890 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 9872492..586a9d4 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 2/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 20:29   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
                   ` (13 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:241:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
   struct sigaltstack handler_stack;

../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:276:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
   struct sigaltstack handler_stack;
                      ^~~~~~~~~~~~~

The fix is already included in gcc 7.2 release [1]. We have to backport it to
all older gcc release since it's not included in any stable release yet.

[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=72edc2c02f8b4768ad660f46a1c7e2400c0a8e06

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: use upstream commit for gcc 5 and 6. (Yann)
---
 package/gcc/4.9.4/944-sanitizer-linux.patch | 88 ++++++++++++++++++++++++++++
 package/gcc/5.4.0/944-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
 package/gcc/6.4.0/943-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
 3 files changed, 270 insertions(+)
 create mode 100644 package/gcc/4.9.4/944-sanitizer-linux.patch
 create mode 100644 package/gcc/5.4.0/944-sanitizer-linux.patch
 create mode 100644 package/gcc/6.4.0/943-sanitizer-linux.patch

diff --git a/package/gcc/4.9.4/944-sanitizer-linux.patch b/package/gcc/4.9.4/944-sanitizer-linux.patch
new file mode 100644
index 0000000..caadf2d
--- /dev/null
+++ b/package/gcc/4.9.4/944-sanitizer-linux.patch
@@ -0,0 +1,88 @@
+From f9a35ba5c150da2e381c4cab01f8f12bcd6af5d2 Mon Sep 17 00:00:00 2001
+From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 17 Jul 2017 19:41:08 +0000
+Subject: [PATCH] 	Backported from mainline 	2017-07-14  Jakub
+ Jelinek  <jakub@redhat.com>
+
+	PR sanitizer/81066
+	* sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+	* sanitizer_common/sanitizer_linux.cc: Likewise.
+	* sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+	* tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch at 250287 138bc75d-0d04-0410-961f-82ee72b054a4
+(cherry picked from commit 72edc2c02f8b4768ad660f46a1c7e2400c0a8e06)
+[Romain backport to 4.9.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 69c9c10..8e53673 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -599,8 +599,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+   return internal_syscall(__NR_prctl, option, arg2, arg3, arg4, arg5);
+ }
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(__NR_sigaltstack, (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 6422df1..8e111d1 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -18,7 +18,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -28,8 +27,7 @@ struct linux_dirent;
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,
+     __sanitizer_kernel_sigaction_t *oldact);
+ uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index 6ee63ec..50c21a3 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -238,7 +238,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index fe69430..49f5270 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -351,7 +351,7 @@ bool IsGlobalVar(uptr addr) {
+ // closes within glibc. The code is a pure hack.
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
diff --git a/package/gcc/5.4.0/944-sanitizer-linux.patch b/package/gcc/5.4.0/944-sanitizer-linux.patch
new file mode 100644
index 0000000..a2602b7
--- /dev/null
+++ b/package/gcc/5.4.0/944-sanitizer-linux.patch
@@ -0,0 +1,91 @@
+From cf796eadff0f2ff0f6e4565373d54d10dff276e1 Mon Sep 17 00:00:00 2001
+From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Thu, 7 Sep 2017 07:17:17 +0000
+Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
+
+        Backported from mainline
+        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+        PR sanitizer/81066
+        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+        * sanitizer_common/sanitizer_linux.cc: Likewise.
+        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+        * tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 251829 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit 833e00c01e96f61e24cd7ec97b93fad212dc914b)
+[Romain rebase on gcc 5.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 9feb307..821b26d 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -514,8 +514,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+ }
+ #endif
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 086834c..3a6f4cd 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -18,7 +18,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -27,8 +26,7 @@ struct linux_dirent;
+ 
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
+     __sanitizer_sigset_t *oldset);
+ void internal_sigfillset(__sanitizer_sigset_t *set);
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index 5881202..c54894d 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -234,7 +234,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index 3259131..b8e9078 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -377,7 +377,7 @@ bool IsGlobalVar(uptr addr) {
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+ #if SANITIZER_LINUX
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
diff --git a/package/gcc/6.4.0/943-sanitizer-linux.patch b/package/gcc/6.4.0/943-sanitizer-linux.patch
new file mode 100644
index 0000000..640d68c
--- /dev/null
+++ b/package/gcc/6.4.0/943-sanitizer-linux.patch
@@ -0,0 +1,91 @@
+From a3e3d1b5f73380a99126c4937a95225ba3bd214b Mon Sep 17 00:00:00 2001
+From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Thu, 7 Sep 2017 07:15:24 +0000
+Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
+
+        Backported from mainline
+        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+        PR sanitizer/81066
+        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+        * sanitizer_common/sanitizer_linux.cc: Likewise.
+        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+        * tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 251828 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit 8937b94d1a643fd9760714642296d034a45254a8)
+[Romain rebase on gcc 6.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 2cefa20..223d9c6 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -546,8 +546,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+ }
+ #endif
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 4497702..1594058 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -19,7 +19,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -28,8 +27,7 @@ struct linux_dirent;
+ 
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
+     __sanitizer_sigset_t *oldset);
+ void internal_sigfillset(__sanitizer_sigset_t *set);
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index c919e4f..014162af 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -267,7 +267,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index 09cec5f..908f4fe 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -291,7 +291,7 @@ bool IsGlobalVar(uptr addr) {
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+ #if SANITIZER_LINUX
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 20:32   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
                   ` (12 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Since glibc 2.26, kernel headers >= 3.10 are needed on powerpc64le [1].
In order to prepare the glibc bump to this version, we don't allow to
build a Buildroot toolchain with kernel headers older than 3.10.

[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=c2ff5ec13fca1bdd1cd646a0260808386d7bd7ff

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: move the dependency outside of architectures section. (Yann)
---
 toolchain/toolchain-buildroot/Config.in | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/toolchain/toolchain-buildroot/Config.in b/toolchain/toolchain-buildroot/Config.in
index f47001f..ac6017f 100644
--- a/toolchain/toolchain-buildroot/Config.in
+++ b/toolchain/toolchain-buildroot/Config.in
@@ -51,6 +51,7 @@ config BR2_TOOLCHAIN_BUILDROOT_GLIBC
 	depends on BR2_USE_MMU
 	depends on !BR2_STATIC_LIBS
 	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
+	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || !BR2_powerpc64le
 	depends on !BR2_powerpc_SPE
 	select BR2_TOOLCHAIN_USES_GLIBC
 	# our glibc.mk enables RPC support
@@ -65,6 +66,11 @@ comment "glibc needs a toolchain w/ dynamic library, kernel headers >= 3.2"
 	depends on BR2_USE_MMU
 	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
 
+# glibc >= 2.26 require kernel headers >= 3.10 on powerpc64le.
+comment "glibc on powerpc64le needs a toolchain w/ headers >= 3.10"
+	depends on BR2_powerpc64le
+	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
+
 config BR2_TOOLCHAIN_BUILDROOT_MUSL
 	bool "musl"
 	depends on BR2_aarch64	  || BR2_arm     || BR2_armeb     || BR2_i386 || \
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (2 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 20:40   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
                   ` (11 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

float128 is now required on powerpc64le with glibc >= 2.26 toolchains.

Fixes:
running configure fragment for sysdeps/gnu
running configure fragment for sysdeps/powerpc/powerpc64le
checking if [...]powerpc64le-buildroot-linux-gnu-gcc supports binary128 floating point type... no
checking if the target machine is at least POWER8... yes
configure: error: ***  binary128 floating point type (GCC >= 6.2) is required on powerpc64le.

In order to prepare the glibc bump to this version, we enable
binary128 floating point in gcc. This require at least gcc >= 6.2.

Disable gcc 4.x and 5.x for internal toolchain.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
v2: Disable gcc 4.x and 5.x for internal toolchain.
---
 package/gcc/Config.in.host | 4 ++++
 package/gcc/gcc.mk         | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
index ec7b692..0926560 100644
--- a/package/gcc/Config.in.host
+++ b/package/gcc/Config.in.host
@@ -39,6 +39,8 @@ config BR2_GCC_VERSION_4_9_X
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
 	# musl mips64 unsupported
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
+	# glibc >= 2.26 needs gcc >= 6.2
+	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
 	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
 
 config BR2_GCC_VERSION_5_X
@@ -53,6 +55,8 @@ config BR2_GCC_VERSION_5_X
 	depends on !BR2_mips_interaptiv && !BR2_mips_m5150 && !BR2_mips_i6400
 	# musl mips64 unsupported
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
+	# glibc >= 2.26 needs gcc >= 6.2
+	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
 	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
 
 config BR2_GCC_VERSION_6_X
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index 49ccccf..54ef70c 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -254,6 +254,14 @@ HOST_GCC_COMMON_CONF_OPTS += \
 	--without-long-double-128
 endif
 
+# Since glibc >= 2.26, poerpc64le requires double/long double which
+# requires at least gcc 6.2.
+# See sysdeps/powerpc/powerpc64le/configure.ac
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6)$(BR2_powerpc64le),yyy)
+HOST_GCC_COMMON_CONF_OPTS += \
+	--with-long-double-128
+endif
+
 HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"'
 ifeq ($(BR2_GCC_ARCH_HAS_CONFIGURABLE_DEFAULTS),)
 ifeq ($(call qstrip,$(BR2_GCC_TARGET_CPU_REVISION)),)
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (3 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 21:01   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
                   ` (10 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Since glibc >= 2.26, don't try to use getopt_long replacement bundled
with diffutils. It will conflict with the one from glibc.
The getopt copy bundled in glibc has been updated with the one from gnulib.

After a lot of warnings...
Fixes:
xstrtol-error.c: In function 'xstrtol_error':
xstrtol-error.c:84:26: error: invalid use of undefined type 'struct rpl_option'
     option = long_options[opt_idx].name;
                          ^
xstrtol-error.c:84:26: error: dereferencing pointer to incomplete type 'const struct rpl_option'

[...]

xstrtol-error.c:92:1: error: conflicting types for 'xstrtol_fatal'
 xstrtol_fatal (enum strtol_error err,
 ^~~~~~~~~~~~~
In file included from xstrtol-error.c:20:0:
xstrtol.h:69:16: note: previous declaration of 'xstrtol_fatal' was here
 _Noreturn void xstrtol_fatal (enum strtol_error,
                ^~~~~~~~~~~~~

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/diffutils/diffutils.mk | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/package/diffutils/diffutils.mk b/package/diffutils/diffutils.mk
index 6e5b9b6..79785d6 100644
--- a/package/diffutils/diffutils.mk
+++ b/package/diffutils/diffutils.mk
@@ -11,6 +11,12 @@ DIFFUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES)
 DIFFUTILS_LICENSE = GPL-3.0+
 DIFFUTILS_LICENSE_FILES = COPYING
 
+# Since glibc >= 2.26, don't try to use getopt_long replacement bundled
+# with diffutils. It will conflict with the one from glibc.
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
+DIFFUTILS_CONF_ENV += gl_cv_func_getopt_gnu=yes
+endif
+
 ifeq ($(BR2_PACKAGE_BUSYBOX),y)
 DIFFUTILS_DEPENDENCIES += busybox
 endif
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (4 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 21:05   ` Yann E. MORIN
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
                   ` (9 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

This doesn't compile with glibc 2.26 where reallocarray() as been introduced.

It's a nasty issue, when reallocarray() is available for the target, flex will
build a small tool called stage1flex for the host (using _FOR_BUILD) but with
the config.h generated for the target.

When the host doesn't have a glibc >= 2.26, reallocarray() is never defined
while building stage1flex:

misc.c:147:8: warning : implicit declaration of function ? reallocarray ?
[-Wimplicit-function-declaration]
  mem = reallocarray(NULL, (size_t) size, element_size);
        ^~~~~~~~~~~~
misc.c:147:6: warning : assignment makes pointer from integer without a cast
[-Wint-conversion]
  mem = reallocarray(NULL, (size_t) size, element_size);
      ^

Disable reallocarray for now, reallocarray() support may be
enabled in a followup patch.

Fixes:
stage1flex-misc.o: In function `allocate_array':
misc.c:(.text+0x38f): undefined reference to `reallocarray'
stage1flex-misc.o: In function `reallocate_array':
misc.c:(.text+0xc8a): undefined reference to `reallocarray'
collect2: error: ld returned 1 exit status

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/flex/flex.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package/flex/flex.mk b/package/flex/flex.mk
index b782699..0196624 100644
--- a/package/flex/flex.mk
+++ b/package/flex/flex.mk
@@ -10,7 +10,8 @@ FLEX_INSTALL_STAGING = YES
 FLEX_LICENSE = FLEX
 FLEX_LICENSE_FILES = COPYING
 FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4
-FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4
+FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \
+	ac_cv_func_reallocarray=no
 HOST_FLEX_DEPENDENCIES = host-m4
 
 define FLEX_DISABLE_PROGRAM
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (5 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-24  9:16   ` Bernd Kuhls
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 0/7] glibc: " Romain Naour
                   ` (8 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Drop upstream patch:

0001-sh-Fix-building-with-gcc5-6.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=d40dbe722f004f999b589de776f7e57e564dda01

0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d

0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=6d0ba622891bed9d8394eef1935add53003b12e8

0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch

https://sourceware.org/git/?p=glibc.git;a=commit;h=81b82fb966ffbd94353f793ad17116c6088dedd9

0005-fix-binutils-2-29-build.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=388b4f1a02f3a801965028bbfcd48d905638b797

0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=69052a3a95da37169a08f9e59b2cc1808312753c

0006-sh4-trap.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=db3d848e154b00071f4a5e729d5884efad410109

But 2.26 version introduced quite a few regressions on x86, x86_64 and
powerpc64le when float128 support was added. All these issues are now
fixed in the glibc 2.26 stable branch.

Backport patches from glibc 2.26 stable branch related to bug 21930.
Take all patches listed in this bug report in order to have all fix
for this issue [1] [2].

Fixes gnuradio build:
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp: In function ?std::size_t boost::hash_detail::float_hash_value(T)?:
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: expected primary-expression before ?float?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: expected primary-expression before ?long?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: found ?:? in nested-name-specifier, expected ?::?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: ?_Float128? is not a class or namespace
             switch (fpclassify(v))
                     ^

[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: ?_Generic? was not declared in this scope
             switch (fpclassify(v))
                     ^

Also backport fix for glibc bug 22146.
Without this patch some C++ applications (jsoncpp, mesa3d and kodi) fail
to build due to an issue while building the toolchain.

A test in the libstdc++ configure script fail when -Os and float128 are
used.

See the bug report for details [3].

[1] https://sourceware.org/ml/libc-alpha/2017-08/msg00586.html
[2] https://sourceware.org/bugzilla/show_bug.cgi?id=21930
[3] https://sourceware.org/bugzilla/show_bug.cgi?id=22146

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 ...__builtin_types_compatible_p-in-C-mode-bu.patch |  50 ++++
 .../glibc/0001-sh-Fix-building-with-gcc5-6.patch   |  56 ----
 ...00366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch |  35 ---
 ...02-Do-not-use-generic-selection-in-C-mode.patch |  56 ++++
 ...-version-of-issignaling-that-does-not-use.patch | 225 +++++++++++++++
 ...ject-overly-long-LD_PRELOAD-path-elements.patch | 122 --------
 ...ersion-of-issignaling-when-__NO_LONG_DOUB.patch |  47 +++
 ...Reject-overly-long-LD_AUDIT-path-elements.patch | 204 -------------
 ...-version-of-iszero-that-does-not-use-__MA.patch | 210 ++++++++++++++
 package/glibc/0005-fix-binutils-2-29-build.patch   |  65 -----
 ...ify-use-the-builtin-when-optimizing-for-s.patch |  63 ++++
 ...g-IS_IN-libc-guards-to-vectorized-strcspn.patch |  47 ---
 package/glibc/0006-sh4-trap.patch                  | 318 ---------------------
 package/glibc/glibc.hash                           |   2 +-
 package/glibc/glibc.mk                             |   2 +-
 15 files changed, 653 insertions(+), 849 deletions(-)
 create mode 100644 package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
 delete mode 100644 package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
 delete mode 100644 package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
 create mode 100644 package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
 create mode 100644 package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
 delete mode 100644 package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
 create mode 100644 package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
 delete mode 100644 package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
 create mode 100644 package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
 delete mode 100644 package/glibc/0005-fix-binutils-2-29-build.patch
 create mode 100644 package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
 delete mode 100644 package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
 delete mode 100644 package/glibc/0006-sh4-trap.patch

diff --git a/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch b/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
new file mode 100644
index 0000000..27a785e
--- /dev/null
+++ b/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
@@ -0,0 +1,50 @@
+From f7439f9b1089e17b6721f28e228682831a2f0135 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 21 Aug 2017 14:23:27 +0200
+Subject: [PATCH] Do not use __builtin_types_compatible_p in C++ mode (bug
+ 21930)
+
+The logic to define isinf for float128 depends on the availability of
+__builtin_types_compatible_p, which is only available in C mode,
+however, the conditionals do not check for C or C++ mode.  This lead to
+an error in libstdc++ configure, as reported by bug 21930.
+
+This patch adds a conditional for C mode in the definition of isinf for
+float128.  No definition is provided in C++ mode, since libstdc++
+headers undefine isinf.
+
+Tested for powerpc64le (glibc test suite and libstdc++-v3 configure).
+
+	[BZ #21930]
+	* math/math.h (isinf): Check if in C or C++ mode before using
+	__builtin_types_compatible_p, since this is a C mode feature.
+
+(cherry picked from commit 47a67213a9f51c5f8816d240500b10db605d8b77)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/math/math.h b/math/math.h
+index e217080..dea8dbe 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -442,8 +442,12 @@ enum
+ 
+ /* Return nonzero value if X is positive or negative infinity.  */
+ # if __HAVE_DISTINCT_FLOAT128 && !__GNUC_PREREQ (7,0) \
+-     && !defined __SUPPORT_SNAN__
+-   /* __builtin_isinf_sign is broken for float128 only before GCC 7.0.  */
++     && !defined __SUPPORT_SNAN__ && !defined __cplusplus
++   /* Since __builtin_isinf_sign is broken for float128 before GCC 7.0,
++      use the helper function, __isinff128, with older compilers.  This is
++      only provided for C mode, because in C++ mode, GCC has no support
++      for __builtin_types_compatible_p (and when in C++ mode, this macro is
++      not used anyway, because libstdc++ headers undefine it).  */
+ #  define isinf(x) \
+     (__builtin_types_compatible_p (__typeof (x), _Float128) \
+      ? __isinff128 (x) : __builtin_isinf_sign (x))
+-- 
+2.9.5
+
diff --git a/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch b/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
deleted file mode 100644
index fa43bdd..0000000
--- a/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 3840d4c2add1dd282f5f01fa51720b2d5b8fd8d2 Mon Sep 17 00:00:00 2001
-From: Alexey Neyman <stilor@att.net>
-Date: Wed, 8 Feb 2017 16:00:57 -0200
-Subject: [PATCH] sh: Fix building with gcc5/6
-
-Build glibc for sh4-unknown-linux-gnu currently fails if one's
-using GCC5/6: in dl-conflict.c, the elf_machine_rela() function
-is called with NULL as its 3rd argument, sym. The implementation
-of that function in sysdeps/sh/dl-machine.h dereferences that pointer:
-
-const Elf32_Sym *const refsym = sym;
-...
-if (map == &GL(dl_rtld_map))
-  value -= map->l_addr + refsym->st_value + reloc->r_addend;
-
-GCC discovers a null pointer dereference, and in accordance with
--fdelete-null-pointer-checks (which is enabled in -O2) replaces this
-code with a trap - which, as SH does not implement a trap pattern in
-GCC, evaluates to an abort() call. This abort() call pulls many more
-objects from libc_nonshared.a, eventually resulting in link failure
-due to multiple definitions for a number of symbols.
-
-As far as I see, the conditional before this code is always false in
-rtld: _dl_resolve_conflicts() is called with main_map as the first
-argument, not GL(_dl_rtld_map), but since that call is in yet another
-compilation unit, GCC does not know about it. Patch that wraps this
-conditional into !defined RESOLVE_CONFLICT_FIND_MAP attached.
-
-	* sysdeps/sh/dl-machine.h (elf_machine_rela): The condition
-	in R_SH_DIR32 case is always false when inlined from
-	dl-conflict.c. Ifdef out to prevent GCC from insertin an
-	abort() call.
-
-[Waldemar: backport of
-https://sourceware.org/git/?p=glibc.git;a=commit;h=d40dbe722f004f999b589de776f7e57e564dda01.]
-Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
----
- sysdeps/sh/dl-machine.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h
-index 449deea..2b468af 100644
---- a/sysdeps/sh/dl-machine.h
-+++ b/sysdeps/sh/dl-machine.h
-@@ -389,7 +389,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
- 	  break;
- 	case R_SH_DIR32:
- 	  {
--#ifndef RTLD_BOOTSTRAP
-+#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP
- 	   /* This is defined in rtld.c, but nowhere in the static
- 	      libc.a; make the reference weak so static programs can
- 	      still link.  This declaration cannot be done when
--- 
-2.7.4
-
diff --git a/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch b/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
deleted file mode 100644
index d701294..0000000
--- a/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 17:09:55 +0200
-Subject: [PATCH] CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1
- programs [BZ #21624]
-
-LD_LIBRARY_PATH can only be used to reorder system search paths, which
-is not useful functionality.
-
-This makes an exploitable unbounded alloca in _dl_init_paths unreachable
-for AT_SECURE=1 programs.
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 3 ++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 2446a87680..2269dbec81 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -2422,7 +2422,8 @@ process_envvars (enum mode *modep)
- 
- 	case 12:
- 	  /* The library search path.  */
--	  if (memcmp (envline, "LIBRARY_PATH", 12) == 0)
-+	  if (!__libc_enable_secure
-+	      && memcmp (envline, "LIBRARY_PATH", 12) == 0)
- 	    {
- 	      library_path = &envline[13];
- 	      break;
--- 
-2.11.0
-
diff --git a/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch b/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
new file mode 100644
index 0000000..7321eeb
--- /dev/null
+++ b/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
@@ -0,0 +1,56 @@
+From bb21afc362a3ecba07ab386a0bc4385e75fbd4b5 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 14 Aug 2017 17:51:51 -0300
+Subject: [PATCH] Do not use generic selection in C++ mode
+
+The logic to protect the use of generic selection (_Generic) does not
+check for C or C++ mode, however, generic selection is a C-only
+feature.
+
+Tested for powerpc64le.
+
+	* misc/sys/cdefs.h (__HAVE_GENERIC_SELECTION): Define to 0, if
+	in C++ mode.
+
+(cherry picked from commit 6913ad65e00bb32417ad39c41d292b976171e27e)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ misc/sys/cdefs.h | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
+index 06523bf..0c80821 100644
+--- a/misc/sys/cdefs.h
++++ b/misc/sys/cdefs.h
+@@ -464,17 +464,18 @@
+ # define __glibc_macro_warning(msg)
+ #endif
+ 
+-/* Support for generic selection (ISO C11) is available in GCC since
+-   version 4.9.  Previous versions do not provide generic selection,
+-   even though they might set __STDC_VERSION__ to 201112L, when in
+-   -std=c11 mode.  Thus, we must check for !defined __GNUC__ when
+-   testing __STDC_VERSION__ for generic selection support.
++/* Generic selection (ISO C11) is a C-only feature, available in GCC
++   since version 4.9.  Previous versions do not provide generic
++   selection, even though they might set __STDC_VERSION__ to 201112L,
++   when in -std=c11 mode.  Thus, we must check for !defined __GNUC__
++   when testing __STDC_VERSION__ for generic selection support.
+    On the other hand, Clang also defines __GNUC__, so a clang-specific
+    check is required to enable the use of generic selection.  */
+-#if __GNUC_PREREQ (4, 9) \
+-    || __glibc_clang_has_extension (c_generic_selections) \
+-    || (!defined __GNUC__ && defined __STDC_VERSION__ \
+-	&& __STDC_VERSION__ >= 201112L)
++#if !defined __cplusplus \
++    && (__GNUC_PREREQ (4, 9) \
++	|| __glibc_clang_has_extension (c_generic_selections) \
++	|| (!defined __GNUC__ && defined __STDC_VERSION__ \
++	    && __STDC_VERSION__ >= 201112L))
+ # define __HAVE_GENERIC_SELECTION 1
+ #else
+ # define __HAVE_GENERIC_SELECTION 0
+-- 
+2.9.5
+
diff --git a/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch b/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
new file mode 100644
index 0000000..b9cd3df
--- /dev/null
+++ b/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
@@ -0,0 +1,225 @@
+From 9bcf391a21677c6d5fa1c2be71554ec181e24f39 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 14 Aug 2017 13:46:15 -0300
+Subject: [PATCH] Provide a C++ version of issignaling that does not use
+ __MATH_TG
+
+The macro __MATH_TG contains the logic to select between long double and
+_Float128, when these types are ABI-distinct.  This logic relies on
+__builtin_types_compatible_p, which is not available in C++ mode.
+
+On the other hand, C++ function overloading provides the means to
+distinguish between the floating-point types.  The overloading
+resolution will match the correct parameter regardless of type
+qualifiers, i.e.: const and volatile.
+
+Tested for powerpc64le, s390x, and x86_64.
+
+	* math/math.h [defined __cplusplus] (issignaling): Provide a C++
+	definition for issignaling that does not rely on __MATH_TG,
+	since __MATH_TG uses __builtin_types_compatible_p, which is only
+	available in C mode.
+	(CFLAGS-test-math-issignaling.cc): New variable.
+	* math/Makefile [CXX] (tests): Add test-math-issignaling.
+	* math/test-math-issignaling.cc: New test for C++ implementation
+	of type-generic issignaling.
+	* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
+	(CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build
+	options of test-math-issignaling on powerpc64le.
+
+(cherry picked from commit a16e8bc08edca84d507715c66d6cddbbc7ed3b62)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/Makefile                        |   3 +-
+ math/math.h                          |  19 +++++-
+ math/test-math-issignaling.cc        | 113 +++++++++++++++++++++++++++++++++++
+ sysdeps/powerpc/powerpc64le/Makefile |   1 +
+ 4 files changed, 134 insertions(+), 2 deletions(-)
+ create mode 100644 math/test-math-issignaling.cc
+
+diff --git a/math/Makefile b/math/Makefile
+index e09b0c0..0130fcf 100644
+--- a/math/Makefile
++++ b/math/Makefile
+@@ -203,7 +203,7 @@ tests-static = test-fpucw-static test-fpucw-ieee-static \
+ 	       test-signgam-ullong-static test-signgam-ullong-init-static
+ 
+ ifneq (,$(CXX))
+-tests += test-math-isinff test-math-iszero
++tests += test-math-isinff test-math-iszero test-math-issignaling
+ endif
+ 
+ ifneq (no,$(PERL))
+@@ -350,6 +350,7 @@ CFLAGS-test-signgam-ullong-init-static.c = -std=c99
+ 
+ CFLAGS-test-math-isinff.cc = -std=gnu++11
+ CFLAGS-test-math-iszero.cc = -std=gnu++11
++CFLAGS-test-math-issignaling.cc = -std=gnu++11
+ 
+ CFLAGS-test-iszero-excess-precision.c = -fexcess-precision=standard
+ CFLAGS-test-iseqsig-excess-precision.c = -fexcess-precision=standard
+diff --git a/math/math.h b/math/math.h
+index dea8dbe..add86af 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -474,7 +474,24 @@ enum
+ # include <bits/iscanonical.h>
+ 
+ /* Return nonzero value if X is a signaling NaN.  */
+-# define issignaling(x) __MATH_TG ((x), __issignaling, (x))
++# ifndef __cplusplus
++#  define issignaling(x) __MATH_TG ((x), __issignaling, (x))
++# else
++   /* In C++ mode, __MATH_TG cannot be used, because it relies on
++      __builtin_types_compatible_p, which is a C-only builtin.  On the
++      other hand, overloading provides the means to distinguish between
++      the floating-point types.  The overloading resolution will match
++      the correct parameter (regardless of type qualifiers (i.e.: const
++      and volatile).  */
++extern "C++" {
++inline int issignaling (float __val) { return __issignalingf (__val); }
++inline int issignaling (double __val) { return __issignaling (__val); }
++inline int issignaling (long double __val) { return __issignalingl (__val); }
++#  if __HAVE_DISTINCT_FLOAT128
++inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
++#  endif
++} /* extern C++ */
++# endif
+ 
+ /* Return nonzero value if X is subnormal.  */
+ # define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL)
+diff --git a/math/test-math-issignaling.cc b/math/test-math-issignaling.cc
+new file mode 100644
+index 0000000..22ae9e1
+--- /dev/null
++++ b/math/test-math-issignaling.cc
+@@ -0,0 +1,113 @@
++/* Test for the C++ implementation of issignaling.
++   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/>.  */
++
++#define _GNU_SOURCE 1
++#include <math.h>
++#include <stdio.h>
++
++#include <limits>
++
++/* There is no signaling_NaN for _Float128 in std::numeric_limits.
++   Include ieee754_float128.h and use the bitfields in the union
++   ieee854_float128.ieee_nan to build a signaling NaN.  */
++#if __HAVE_DISTINCT_FLOAT128
++# include <ieee754_float128.h>
++#endif
++
++static bool errors;
++
++static void
++check (int actual, int expected, const char *actual_expr, int line)
++{
++  if (actual != expected)
++    {
++      errors = true;
++      printf ("%s:%d: error: %s\n", __FILE__, line, actual_expr);
++      printf ("%s:%d:   expected: %d\n", __FILE__, line, expected);
++      printf ("%s:%d:   actual: %d\n", __FILE__, line, actual);
++    }
++}
++
++#define CHECK(actual, expected) \
++  check ((actual), (expected), #actual, __LINE__)
++
++template <class T>
++static void
++check_type ()
++{
++  typedef std::numeric_limits<T> limits;
++  CHECK (issignaling (T{0}), 0);
++  if (limits::has_infinity)
++    {
++      CHECK (issignaling (limits::infinity ()), 0);
++      CHECK (issignaling (-limits::infinity ()), 0);
++    }
++  if (limits::has_quiet_NaN)
++    CHECK (issignaling (limits::quiet_NaN ()), 0);
++  if (limits::has_signaling_NaN)
++    CHECK (issignaling (limits::signaling_NaN ()), 1);
++}
++
++#if __HAVE_DISTINCT_FLOAT128
++static void
++check_float128 ()
++{
++  ieee854_float128 q;
++
++  q.d = 0;
++  CHECK (issignaling (q.d), 0);
++
++  /* Infinity.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFF;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x0000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Still a quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Signaling NaN.  */
++  q.ieee_nan.quiet_nan = 0;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (issignaling (q.d), 1);
++}
++#endif
++
++static int
++do_test (void)
++{
++  check_type<float> ();
++  check_type<double> ();
++  check_type<long double> ();
++#if __HAVE_DISTINCT_FLOAT128
++  check_float128 ();
++#endif
++  return errors;
++}
++
++#include <support/test-driver.c>
+diff --git a/sysdeps/powerpc/powerpc64le/Makefile b/sysdeps/powerpc/powerpc64le/Makefile
+index 77617b6..19adbfa 100644
+--- a/sysdeps/powerpc/powerpc64le/Makefile
++++ b/sysdeps/powerpc/powerpc64le/Makefile
+@@ -16,6 +16,7 @@ $(foreach suf,$(all-object-suffixes),%f128_r$(suf)): CFLAGS += -mfloat128
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-float128%$(suf)): CFLAGS += -mfloat128
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-ifloat128%$(suf)): CFLAGS += -mfloat128
+ CFLAGS-libm-test-support-float128.c += -mfloat128
++CFLAGS-test-math-issignaling.cc += -mfloat128
+ $(objpfx)test-float128% $(objpfx)test-ifloat128%: \
+   gnulib-tests += $(f128-loader-link)
+ endif
+-- 
+2.9.5
+
diff --git a/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch b/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
deleted file mode 100644
index df41093..0000000
--- a/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 6d0ba622891bed9d8394eef1935add53003b12e8 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 22:31:04 +0200
-Subject: [PATCH] ld.so: Reject overly long LD_PRELOAD path elements
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++------------
- 1 file changed, 72 insertions(+), 16 deletions(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 2269dbec81..86ae20c83f 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -99,6 +99,35 @@ uintptr_t __pointer_chk_guard_local
- strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
- #endif
- 
-+/* Length limits for names and paths, to protect the dynamic linker,
-+   particularly when __libc_enable_secure is active.  */
-+#ifdef NAME_MAX
-+# define SECURE_NAME_LIMIT NAME_MAX
-+#else
-+# define SECURE_NAME_LIMIT 255
-+#endif
-+#ifdef PATH_MAX
-+# define SECURE_PATH_LIMIT PATH_MAX
-+#else
-+# define SECURE_PATH_LIMIT 1024
-+#endif
-+
-+/* Check that AT_SECURE=0, or that the passed name does not contain
-+   directories and is not overly long.  Reject empty names
-+   unconditionally.  */
-+static bool
-+dso_name_valid_for_suid (const char *p)
-+{
-+  if (__glibc_unlikely (__libc_enable_secure))
-+    {
-+      /* Ignore pathnames with directories for AT_SECURE=1
-+	 programs, and also skip overlong names.  */
-+      size_t len = strlen (p);
-+      if (len >= SECURE_NAME_LIMIT || memchr (p, '/', len) != NULL)
-+	return false;
-+    }
-+  return *p != '\0';
-+}
- 
- /* List of auditing DSOs.  */
- static struct audit_list
-@@ -718,6 +747,42 @@ static const char *preloadlist attribute_relro;
- /* Nonzero if information about versions has to be printed.  */
- static int version_info attribute_relro;
- 
-+/* The LD_PRELOAD environment variable gives list of libraries
-+   separated by white space or colons that are loaded before the
-+   executable's dependencies and prepended to the global scope list.
-+   (If the binary is running setuid all elements containing a '/' are
-+   ignored since it is insecure.)  Return the number of preloads
-+   performed.  */
-+unsigned int
-+handle_ld_preload (const char *preloadlist, struct link_map *main_map)
-+{
-+  unsigned int npreloads = 0;
-+  const char *p = preloadlist;
-+  char fname[SECURE_PATH_LIMIT];
-+
-+  while (*p != '\0')
-+    {
-+      /* Split preload list at space/colon.  */
-+      size_t len = strcspn (p, " :");
-+      if (len > 0 && len < sizeof (fname))
-+	{
-+	  memcpy (fname, p, len);
-+	  fname[len] = '\0';
-+	}
-+      else
-+	fname[0] = '\0';
-+
-+      /* Skip over the substring and the following delimiter.  */
-+      p += len;
-+      if (*p != '\0')
-+	++p;
-+
-+      if (dso_name_valid_for_suid (fname))
-+	npreloads += do_preload (fname, main_map, "LD_PRELOAD");
-+    }
-+  return npreloads;
-+}
-+
- static void
- dl_main (const ElfW(Phdr) *phdr,
- 	 ElfW(Word) phnum,
-@@ -1464,23 +1529,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
- 
-   if (__glibc_unlikely (preloadlist != NULL))
-     {
--      /* The LD_PRELOAD environment variable gives list of libraries
--	 separated by white space or colons that are loaded before the
--	 executable's dependencies and prepended to the global scope
--	 list.  If the binary is running setuid all elements
--	 containing a '/' are ignored since it is insecure.  */
--      char *list = strdupa (preloadlist);
--      char *p;
--
-       HP_TIMING_NOW (start);
--
--      /* Prevent optimizing strsep.  Speed is not important here.  */
--      while ((p = (strsep) (&list, " :")) != NULL)
--	if (p[0] != '\0'
--	    && (__builtin_expect (! __libc_enable_secure, 1)
--		|| strchr (p, '/') == NULL))
--	  npreloads += do_preload (p, main_map, "LD_PRELOAD");
--
-+      npreloads += handle_ld_preload (preloadlist, main_map);
-       HP_TIMING_NOW (stop);
-       HP_TIMING_DIFF (diff, start, stop);
-       HP_TIMING_ACCUM_NT (load_time, diff);
--- 
-2.11.0
-
diff --git a/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch b/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
new file mode 100644
index 0000000..5e32f75
--- /dev/null
+++ b/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
@@ -0,0 +1,47 @@
+From 9dbd8386a1b706beb30291a7e76bbfe69c2620cf Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Wed, 23 Aug 2017 10:16:54 -0300
+Subject: [PATCH] Fix the C++ version of issignaling when __NO_LONG_DOUBLE_MATH
+ is defined
+
+When __NO_LONG_DOUBLE_MATH is defined, __issignalingl is not available,
+thus issignaling with long double argument should call __issignaling,
+instead.
+
+Tested for powerpc64le.
+
+	* math/math.h [defined __cplusplus] (issignaling): In the long
+	double case, call __issignalingl only if __NO_LONG_DOUBLE_MATH
+	is not defined.  Call __issignaling, otherwise.
+
+(cherry picked from commit 3d7b66f66cb223e899a7ebc0f4c20f13e711c9e0)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/math/math.h b/math/math.h
+index add86af..60dfa31 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -486,7 +486,15 @@ enum
+ extern "C++" {
+ inline int issignaling (float __val) { return __issignalingf (__val); }
+ inline int issignaling (double __val) { return __issignaling (__val); }
+-inline int issignaling (long double __val) { return __issignalingl (__val); }
++inline int
++issignaling (long double __val)
++{
++#  ifdef __NO_LONG_DOUBLE_MATH
++  return __issignaling (__val);
++#  else
++  return __issignalingl (__val);
++#  endif
++}
+ #  if __HAVE_DISTINCT_FLOAT128
+ inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
+ #  endif
+-- 
+2.9.5
+
diff --git a/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch b/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
deleted file mode 100644
index 25e937b..0000000
--- a/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From 81b82fb966ffbd94353f793ad17116c6088dedd9 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 22:32:12 +0200
-Subject: [PATCH] ld.so: Reject overly long LD_AUDIT path elements
-
-Also only process the last LD_AUDIT entry.
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 105 insertions(+), 15 deletions(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 86ae20c83f..65647fb1c8 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -129,13 +129,91 @@ dso_name_valid_for_suid (const char *p)
-   return *p != '\0';
- }
- 
--/* List of auditing DSOs.  */
-+/* LD_AUDIT variable contents.  Must be processed before the
-+   audit_list below.  */
-+const char *audit_list_string;
-+
-+/* Cyclic list of auditing DSOs.  audit_list->next is the first
-+   element.  */
- static struct audit_list
- {
-   const char *name;
-   struct audit_list *next;
- } *audit_list;
- 
-+/* Iterator for audit_list_string followed by audit_list.  */
-+struct audit_list_iter
-+{
-+  /* Tail of audit_list_string still needing processing, or NULL.  */
-+  const char *audit_list_tail;
-+
-+  /* The list element returned in the previous iteration.  NULL before
-+     the first element.  */
-+  struct audit_list *previous;
-+
-+  /* Scratch buffer for returning a name which is part of
-+     audit_list_string.  */
-+  char fname[SECURE_NAME_LIMIT];
-+};
-+
-+/* Initialize an audit list iterator.  */
-+static void
-+audit_list_iter_init (struct audit_list_iter *iter)
-+{
-+  iter->audit_list_tail = audit_list_string;
-+  iter->previous = NULL;
-+}
-+
-+/* Iterate through both audit_list_string and audit_list.  */
-+static const char *
-+audit_list_iter_next (struct audit_list_iter *iter)
-+{
-+  if (iter->audit_list_tail != NULL)
-+    {
-+      /* First iterate over audit_list_string.  */
-+      while (*iter->audit_list_tail != '\0')
-+	{
-+	  /* Split audit list at colon.  */
-+	  size_t len = strcspn (iter->audit_list_tail, ":");
-+	  if (len > 0 && len < sizeof (iter->fname))
-+	    {
-+	      memcpy (iter->fname, iter->audit_list_tail, len);
-+	      iter->fname[len] = '\0';
-+	    }
-+	  else
-+	    /* Do not return this name to the caller.  */
-+	    iter->fname[0] = '\0';
-+
-+	  /* Skip over the substring and the following delimiter.  */
-+	  iter->audit_list_tail += len;
-+	  if (*iter->audit_list_tail == ':')
-+	    ++iter->audit_list_tail;
-+
-+	  /* If the name is valid, return it.  */
-+	  if (dso_name_valid_for_suid (iter->fname))
-+	    return iter->fname;
-+	  /* Otherwise, wrap around and try the next name.  */
-+	}
-+      /* Fall through to the procesing of audit_list.  */
-+    }
-+
-+  if (iter->previous == NULL)
-+    {
-+      if (audit_list == NULL)
-+	/* No pre-parsed audit list.  */
-+	return NULL;
-+      /* Start of audit list.  The first list element is at
-+	 audit_list->next (cyclic list).  */
-+      iter->previous = audit_list->next;
-+      return iter->previous->name;
-+    }
-+  if (iter->previous == audit_list)
-+    /* Cyclic list wrap-around.  */
-+    return NULL;
-+  iter->previous = iter->previous->next;
-+  return iter->previous->name;
-+}
-+
- #ifndef HAVE_INLINED_SYSCALLS
- /* Set nonzero during loading and initialization of executable and
-    libraries, cleared before the executable's entry point runs.  This
-@@ -1305,11 +1383,13 @@ of this helper program; chances are you did not intend to run this program.\n\
-     GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid ();
- 
-   /* If we have auditing DSOs to load, do it now.  */
--  if (__glibc_unlikely (audit_list != NULL))
-+  bool need_security_init = true;
-+  if (__glibc_unlikely (audit_list != NULL)
-+      || __glibc_unlikely (audit_list_string != NULL))
-     {
--      /* Iterate over all entries in the list.  The order is important.  */
-       struct audit_ifaces *last_audit = NULL;
--      struct audit_list *al = audit_list->next;
-+      struct audit_list_iter al_iter;
-+      audit_list_iter_init (&al_iter);
- 
-       /* Since we start using the auditing DSOs right away we need to
- 	 initialize the data structures now.  */
-@@ -1320,9 +1400,14 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	 use different values (especially the pointer guard) and will
- 	 fail later on.  */
-       security_init ();
-+      need_security_init = false;
- 
--      do
-+      while (true)
- 	{
-+	  const char *name = audit_list_iter_next (&al_iter);
-+	  if (name == NULL)
-+	    break;
-+
- 	  int tls_idx = GL(dl_tls_max_dtv_idx);
- 
- 	  /* Now it is time to determine the layout of the static TLS
-@@ -1331,7 +1416,7 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	     no DF_STATIC_TLS bit is set.  The reason is that we know
- 	     glibc will use the static model.  */
- 	  struct dlmopen_args dlmargs;
--	  dlmargs.fname = al->name;
-+	  dlmargs.fname = name;
- 	  dlmargs.map = NULL;
- 
- 	  const char *objname;
-@@ -1344,7 +1429,7 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	    not_loaded:
- 	      _dl_error_printf ("\
- ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
--				al->name, err_str);
-+				name, err_str);
- 	      if (malloced)
- 		free ((char *) err_str);
- 	    }
-@@ -1448,10 +1533,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
- 		  goto not_loaded;
- 		}
- 	    }
--
--	  al = al->next;
- 	}
--      while (al != audit_list->next);
- 
-       /* If we have any auditing modules, announce that we already
- 	 have two objects loaded.  */
-@@ -1715,7 +1797,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
-   if (tcbp == NULL)
-     tcbp = init_tls ();
- 
--  if (__glibc_likely (audit_list == NULL))
-+  if (__glibc_likely (need_security_init))
-     /* Initialize security features.  But only if we have not done it
-        earlier.  */
-     security_init ();
-@@ -2346,9 +2428,7 @@ process_dl_audit (char *str)
-   char *p;
- 
-   while ((p = (strsep) (&str, ":")) != NULL)
--    if (p[0] != '\0'
--	&& (__builtin_expect (! __libc_enable_secure, 1)
--	    || strchr (p, '/') == NULL))
-+    if (dso_name_valid_for_suid (p))
-       {
- 	/* This is using the local malloc, not the system malloc.  The
- 	   memory can never be freed.  */
-@@ -2412,7 +2492,7 @@ process_envvars (enum mode *modep)
- 	      break;
- 	    }
- 	  if (memcmp (envline, "AUDIT", 5) == 0)
--	    process_dl_audit (&envline[6]);
-+	    audit_list_string = &envline[6];
- 	  break;
- 
- 	case 7:
--- 
-2.11.0
-
diff --git a/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch b/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
new file mode 100644
index 0000000..e12c843
--- /dev/null
+++ b/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
@@ -0,0 +1,210 @@
+From 45970aa26d1af87b016ef95b4b35c566aeb6e841 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Tue, 22 Aug 2017 16:34:42 -0300
+Subject: [PATCH] Provide a C++ version of iszero that does not use __MATH_TG
+ (bug 21930)
+
+When signaling nans are enabled (with -fsignaling-nans), the C++ version
+of iszero uses the fpclassify macro, which is defined with __MATH_TG.
+However, when support for float128 is available, __MATH_TG uses the
+builtin __builtin_types_compatible_p, which is only available in C mode.
+
+This patch refactors the C++ version of iszero so that it uses function
+overloading to select between the floating-point types, instead of
+relying on fpclassify and __MATH_TG.
+
+Tested for powerpc64le, s390x, x86_64, and with build-many-glibcs.py.
+
+	[BZ #21930]
+	* math/math.h [defined __cplusplus && defined __SUPPORT_SNAN__]
+	(iszero): New C++ implementation that does not use
+	fpclassify/__MATH_TG/__builtin_types_compatible_p, when
+	signaling nans are enabled, since __builtin_types_compatible_p
+	is a C-only feature.
+	* math/test-math-iszero.cc: When __HAVE_DISTINCT_FLOAT128 is
+	defined, include ieee754_float128.h for access to the union and
+	member ieee854_float128.ieee.
+	[__HAVE_DISTINCT_FLOAT128] (do_test): Call check_float128.
+	[__HAVE_DISTINCT_FLOAT128] (check_float128): New function.
+	* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
+	(CXXFLAGS-test-math-iszero.cc): Add -mfloat128 to the build
+	options of test-math-zero on powerpc64le.
+
+(cherry picked from commit 42496114ec0eb7d6d039d05d4262e109951c600c)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h                          | 33 +++++++++++++--
+ math/test-math-iszero.cc             | 79 ++++++++++++++++++++++++++++++++++++
+ sysdeps/powerpc/powerpc64le/Makefile |  3 +-
+ 3 files changed, 110 insertions(+), 5 deletions(-)
+
+diff --git a/math/math.h b/math/math.h
+index 60dfa31..7c0fc6d 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -513,15 +513,40 @@ inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
+ #  endif
+ # else	/* __cplusplus */
+ extern "C++" {
++#  ifdef __SUPPORT_SNAN__
++inline int
++iszero (float __val)
++{
++  return __fpclassifyf (__val) == FP_ZERO;
++}
++inline int
++iszero (double __val)
++{
++  return __fpclassify (__val) == FP_ZERO;
++}
++inline int
++iszero (long double __val)
++{
++#   ifdef __NO_LONG_DOUBLE_MATH
++  return __fpclassify (__val) == FP_ZERO;
++#   else
++  return __fpclassifyl (__val) == FP_ZERO;
++#   endif
++}
++#   if __HAVE_DISTINCT_FLOAT128
++inline int
++iszero (_Float128 __val)
++{
++  return __fpclassifyf128 (__val) == FP_ZERO;
++}
++#   endif
++#  else
+ template <class __T> inline bool
+ iszero (__T __val)
+ {
+-#  ifdef __SUPPORT_SNAN__
+-  return fpclassify (__val) == FP_ZERO;
+-#  else
+   return __val == 0;
+-#  endif
+ }
++#  endif
+ } /* extern C++ */
+ # endif	/* __cplusplus */
+ #endif /* Use IEC_60559_BFP_EXT.  */
+diff --git a/math/test-math-iszero.cc b/math/test-math-iszero.cc
+index 027e972..5c07261 100644
+--- a/math/test-math-iszero.cc
++++ b/math/test-math-iszero.cc
+@@ -22,6 +22,13 @@
+ 
+ #include <limits>
+ 
++/* Support for _Float128 in std::numeric_limits is limited.
++   Include ieee754_float128.h and use the bitfields in the union
++   ieee854_float128.ieee_nan to build corner-case inputs.  */
++#if __HAVE_DISTINCT_FLOAT128
++# include <ieee754_float128.h>
++#endif
++
+ static bool errors;
+ 
+ static void
+@@ -72,12 +79,84 @@ check_type ()
+          std::numeric_limits<T>::has_denorm == std::denorm_absent);
+ }
+ 
++#if __HAVE_DISTINCT_FLOAT128
++static void
++check_float128 ()
++{
++  ieee854_float128 q;
++
++  q.d = 0.0Q;
++  CHECK (iszero (q.d), 1);
++  q.d = -0.0Q;
++  CHECK (iszero (q.d), 1);
++  q.d = 1.0Q;
++  CHECK (iszero (q.d), 0);
++  q.d = -1.0Q;
++  CHECK (iszero (q.d), 0);
++
++  /* Normal min.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x0001;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++
++  /* Normal max.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFE;
++  q.ieee.mantissa0 = 0xFFFF;
++  q.ieee.mantissa1 = 0xFFFFFFFF;
++  q.ieee.mantissa2 = 0xFFFFFFFF;
++  q.ieee.mantissa3 = 0xFFFFFFFF;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++
++  /* Infinity.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFF;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (iszero (q.d), 0);
++
++  /* Quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x0000;
++  CHECK (iszero (q.d), 0);
++
++  /* Signaling NaN.  */
++  q.ieee_nan.quiet_nan = 0;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (iszero (q.d), 0);
++
++  /* Denormal min.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x0000;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000001;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++}
++#endif
++
+ static int
+ do_test (void)
+ {
+   check_type<float> ();
+   check_type<double> ();
+   check_type<long double> ();
++#if __HAVE_DISTINCT_FLOAT128
++  check_float128 ();
++#endif
+   return errors;
+ }
+ 
+diff --git a/sysdeps/powerpc/powerpc64le/Makefile b/sysdeps/powerpc/powerpc64le/Makefile
+index 19adbfa..dea2290 100644
+--- a/sysdeps/powerpc/powerpc64le/Makefile
++++ b/sysdeps/powerpc/powerpc64le/Makefile
+@@ -17,7 +17,8 @@ $(foreach suf,$(all-object-suffixes),$(objpfx)test-float128%$(suf)): CFLAGS += -
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-ifloat128%$(suf)): CFLAGS += -mfloat128
+ CFLAGS-libm-test-support-float128.c += -mfloat128
+ CFLAGS-test-math-issignaling.cc += -mfloat128
+-$(objpfx)test-float128% $(objpfx)test-ifloat128%: \
++CFLAGS-test-math-iszero.cc += -mfloat128
++$(objpfx)test-float128% $(objpfx)test-ifloat128% $(objpfx)test-math-iszero: \
+   gnulib-tests += $(f128-loader-link)
+ endif
+ 
+-- 
+2.9.5
+
diff --git a/package/glibc/0005-fix-binutils-2-29-build.patch b/package/glibc/0005-fix-binutils-2-29-build.patch
deleted file mode 100644
index 47fcd2f..0000000
--- a/package/glibc/0005-fix-binutils-2-29-build.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From: H.J. Lu <hjl.tools@gmail.com>
-Date: Fri, 23 Jun 2017 21:38:46 +0000 (-0700)
-Subject: Avoid .symver on common symbols [BZ #21666]
-X-Git-Tag: glibc-2.26~241
-X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=388b4f1a02f3a801965028bbfcd48d905638b797
-
-Avoid .symver on common symbols [BZ #21666]
-
-The .symver directive on common symbol just creates a new common symbol,
-not an alias and the newer assembler with the bug fix for
-
-https://sourceware.org/bugzilla/show_bug.cgi?id=21661
-
-will issue an error.  Before the fix, we got
-
-$ readelf -sW libc.so | grep "loc[12s]"
-  5109: 00000000003a0608     8 OBJECT  LOCAL  DEFAULT   36 loc1
-  5188: 00000000003a0610     8 OBJECT  LOCAL  DEFAULT   36 loc2
-  5455: 00000000003a0618     8 OBJECT  LOCAL  DEFAULT   36 locs
-  6575: 00000000003a05f0     8 OBJECT  GLOBAL DEFAULT   36 locs at GLIBC_2.2.5
-  7156: 00000000003a05f8     8 OBJECT  GLOBAL DEFAULT   36 loc1 at GLIBC_2.2.5
-  7312: 00000000003a0600     8 OBJECT  GLOBAL DEFAULT   36 loc2 at GLIBC_2.2.5
-
-in libc.so.  The versioned loc1, loc2 and locs have the wrong addresses.
-After the fix, we got
-
-$ readelf -sW libc.so | grep "loc[12s]"
-  6570: 000000000039e3b8     8 OBJECT  GLOBAL DEFAULT   34 locs at GLIBC_2.2.5
-  7151: 000000000039e3c8     8 OBJECT  GLOBAL DEFAULT   34 loc1 at GLIBC_2.2.5
-  7307: 000000000039e3c0     8 OBJECT  GLOBAL DEFAULT   34 loc2 at GLIBC_2.2.5
-
-	[BZ #21666]
-	* misc/regexp.c (loc1): Add __attribute__ ((nocommon));
-	(loc2): Likewise.
-	(locs): Likewise.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-[Backported from upstream commit
-388b4f1a02f3a801965028bbfcd48d905638b797, to fix the build with
-binutils 2.29.]
----
-diff --git a/misc/regexp.c b/misc/regexp.c
-index 19d76c0..eaea7c3 100644
---- a/misc/regexp.c
-+++ b/misc/regexp.c
-@@ -29,14 +29,15 @@
- 
- #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
- 
--/* Define the variables used for the interface.  */
--char *loc1;
--char *loc2;
-+/* Define the variables used for the interface.  Avoid .symver on common
-+   symbol, which just creates a new common symbol, not an alias.  */
-+char *loc1 __attribute__ ((nocommon));
-+char *loc2 __attribute__ ((nocommon));
- compat_symbol (libc, loc1, loc1, GLIBC_2_0);
- compat_symbol (libc, loc2, loc2, GLIBC_2_0);
- 
- /* Although we do not support the use we define this variable as well.  */
--char *locs;
-+char *locs __attribute__ ((nocommon));
- compat_symbol (libc, locs, locs, GLIBC_2_0);
- 
- 
diff --git a/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch b/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
new file mode 100644
index 0000000..37807c4
--- /dev/null
+++ b/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
@@ -0,0 +1,63 @@
+From 33f54cf4f81a51e5c8cbfb2408edd439bdee9435 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gabriel@inconstante.eti.br>
+Date: Wed, 20 Sep 2017 15:10:26 -0300
+Subject: [PATCH] Let fpclassify use the builtin when optimizing for size in
+ C++ mode (bug 22146)
+
+When optimization for size is on (-Os), fpclassify does not use the
+type-generic __builtin_fpclassify builtin, instead it uses __MATH_TG.
+However, when library support for float128 is available, __MATH_TG uses
+__builtin_types_compatible_p, which is not available in C++ mode.
+
+On the other hand, libstdc++ undefines (in cmath) many macros from
+math.h, including fpclassify, so that it can provide its own functions.
+However, during its configure tests, libstdc++ just tests for the
+availability of the macros (it does not undefine them, nor does it
+provide its own functions).
+
+Finally, when libstdc++ is configured with optimization for size
+enabled, its configure tests include math.h and get the definition of
+fpclassify that uses __MATH_TG (and __builtin_types_compatible_p).
+Since libstdc++ does not undefine the macros during its configure tests,
+they fail.
+
+This patch lets fpclassify use the builtin in C++ mode, even when
+optimization for size is on.  This allows the configure test in
+libstdc++ to work.
+
+Tested for powerpc64le and x86_64.
+
+	[BZ #22146]
+	math/math.h: Let fpclassify use the builtin in C++ mode, even
+	when optimazing for size.
+
+(cherry picked from commit c5c4a626098ec884b8527356abdf2a4bb7b6bf27)
+
+[Romain rebase on glibc 2.26)
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/math/math.h b/math/math.h
+index 7c0fc6d..f9348ec 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -402,7 +402,13 @@ enum
+ 
+ /* Return number of classification appropriate for X.  */
+ # if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__			      \
+-     && !defined __OPTIMIZE_SIZE__
++     && (!defined __OPTIMIZE_SIZE__ || defined __cplusplus)
++     /* The check for __cplusplus allows the use of the builtin, even
++	when optimization for size is on.  This is provided for
++	libstdc++, only to let its configure test work when it is built
++	with -Os.  No further use of this definition of fpclassify is
++	expected in C++ mode, since libstdc++ provides its own version
++	of fpclassify in cmath (which undefines fpclassify).  */
+ #  define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE,	      \
+      FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
+ # else
+-- 
+2.9.5
+
diff --git a/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch b/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
deleted file mode 100644
index eebf89e..0000000
--- a/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From patchwork Wed Jun 14 06:19:50 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: i686: Add missing IS_IN (libc) guards to vectorized strcspn
-From: Florian Weimer <fweimer@redhat.com>
-X-Patchwork-Id: 21003
-Message-Id: <20170614061950.400FE4010728F@oldenburg.str.redhat.com>
-To: libc-alpha at sourceware.org
-Date: Wed, 14 Jun 2017 08:19:50 +0200
-
-Since commit d957c4d3fa48d685ff2726c605c988127ef99395 (i386: Compile
-rtld-*.os with -mno-sse -mno-mmx -mfpmath=387), vector intrinsics can
-no longer be used in ld.so, even if the compiled code never makes it
-into the final ld.so link.  This commit adds the missing IS_IN (libc)
-guard to the SSE 4.2 strcspn implementation, so that it can be used from
-ld.so in the future.
-
-2017-06-14  Florian Weimer  <fweimer@redhat.com>
-
-	* sysdeps/i386/i686/multiarch/strcspn-c.c: Add IS_IN (libc) guard.
-	* sysdeps/i386/i686/multiarch/varshift.c: Likewise.
-
-[Thomas: fixes a build issue of glibc on x86:
-sysdeps/x86_64/multiarch/varshift.h:26:1: error: SSE vector return without SSE enabled changes the ABI]
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-diff --git a/sysdeps/i386/i686/multiarch/strcspn-c.c b/sysdeps/i386/i686/multiarch/strcspn-c.c
-index 6d61e19..ec230fb 100644
---- a/sysdeps/i386/i686/multiarch/strcspn-c.c
-+++ b/sysdeps/i386/i686/multiarch/strcspn-c.c
-@@ -1,2 +1,4 @@
--#define __strcspn_sse2 __strcspn_ia32
--#include <sysdeps/x86_64/multiarch/strcspn-c.c>
-+#if IS_IN (libc)
-+# define __strcspn_sse2 __strcspn_ia32
-+# include <sysdeps/x86_64/multiarch/strcspn-c.c>
-+#endif
-diff --git a/sysdeps/i386/i686/multiarch/varshift.c b/sysdeps/i386/i686/multiarch/varshift.c
-index 7760b96..6742a35 100644
---- a/sysdeps/i386/i686/multiarch/varshift.c
-+++ b/sysdeps/i386/i686/multiarch/varshift.c
-@@ -1 +1,3 @@
--#include <sysdeps/x86_64/multiarch/varshift.c>
-+#if IS_IN (libc)
-+# include <sysdeps/x86_64/multiarch/varshift.c>
-+#endif
diff --git a/package/glibc/0006-sh4-trap.patch b/package/glibc/0006-sh4-trap.patch
deleted file mode 100644
index c986ac3..0000000
--- a/package/glibc/0006-sh4-trap.patch
+++ /dev/null
@@ -1,318 +0,0 @@
-commit db3d848e154b00071f4a5e729d5884efad410109
-Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date:   Wed Mar 15 15:44:59 2017 -0300
-
-    Build divdi3 only for architecture that required it
-    
-    As noted in [1], divdi3 object is only exported in a handful ABIs
-    (i386, m68k, powerpc32, s390-32, and ia64), however it is built
-    for all current architectures regardless.
-    
-    This patch refact the make rules for this object to so only the
-    aforementioned architectures that actually require it builds it.
-    
-    Also, to avoid internal PLT calls to the exported symbol from the
-    module, glibc uses an internal header (symbol-hacks.h) which is
-    unrequired (and in fact breaks the build for architectures that
-    intend to get symbol definitions from libgcc.a).  The patch also
-    changes it to create its own header (divdi3-symbol-hacks.h) and
-    adjust the architectures that require it accordingly.
-    
-    I checked the build/check (with run-built-tests=no) on the
-    following architectures (which I think must cover all supported
-    ABI/builds) using GCC 6.3:
-    
-    aarch64-linux-gnu
-    alpha-linux-gnu
-    arm-linux-gnueabihf
-    hppa-linux-gnu
-    ia64-linux-gnu
-    m68k-linux-gnu
-    microblaze-linux-gnu
-    mips64-n32-linux-gnu
-    mips-linux-gnu
-    mips64-linux-gnu
-    nios2-linux-gnu
-    powerpc-linux-gnu
-    powerpc-linux-gnu-power4
-    powerpc64-linux-gnu
-    powerpc64le-linux-gnu
-    s390x-linux-gnu
-    s390-linux-gnu
-    sh4-linux-gnu
-    sh4-linux-gnu-soft
-    sparc64-linux-gnu
-    sparcv9-linux-gnu
-    tilegx-linux-gnu
-    tilegx-linux-gnu-32
-    tilepro-linux-gnu
-    x86_64-linux-gnu
-    x86_64-linux-gnu-x32
-    i686-linux-gnu
-    
-    I only saw one regression on sparcv9-linux-gnu (extra PLT call to
-    .udiv) which I address in next patch in the set.  It also correctly
-    build SH with GCC 7.0.1 (without any regression from c89721e25d).
-    
-    [1] https://sourceware.org/ml/libc-alpha/2017-03/msg00243.html
-    
-Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
-
-diff --git a/sysdeps/i386/symbol-hacks.h b/sysdeps/i386/symbol-hacks.h
-new file mode 100644
-index 0000000000..36a13c83f7
---- /dev/null
-+++ b/sysdeps/i386/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  i386 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/m68k/symbol-hacks.h b/sysdeps/m68k/symbol-hacks.h
-new file mode 100644
-index 0000000000..e449d29810
---- /dev/null
-+++ b/sysdeps/m68k/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  m68k 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
-new file mode 100644
-index 0000000000..dbb3141621
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  powerpc 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/s390/s390-32/symbol-hacks.h b/sysdeps/s390/s390-32/symbol-hacks.h
-new file mode 100644
-index 0000000000..585c42365a
---- /dev/null
-+++ b/sysdeps/s390/s390-32/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  s390 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
-index 6aac0dfe15..4080b8c966 100644
---- a/sysdeps/unix/sysv/linux/i386/Makefile
-+++ b/sysdeps/unix/sysv/linux/i386/Makefile
-@@ -26,6 +26,11 @@ endif
- 
- ifeq ($(subdir),csu)
- sysdep-dl-routines += sysdep
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
- endif
- 
- ifeq ($(subdir),nptl)
-diff --git a/sysdeps/unix/sysv/linux/m68k/Makefile b/sysdeps/unix/sysv/linux/m68k/Makefile
-index 5c50ce6927..ce1f696a6f 100644
---- a/sysdeps/unix/sysv/linux/m68k/Makefile
-+++ b/sysdeps/unix/sysv/linux/m68k/Makefile
-@@ -4,6 +4,11 @@ m68k-syntax-flag = -DMOTOROLA_SYNTAX
- 
- ifeq ($(subdir),csu)
- sysdep_routines += m68k-helpers
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
- endif
- 
- ifeq ($(subdir),misc)
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-index 3d6c150582..1f45659ed1 100644
---- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-@@ -1,2 +1,10 @@
- # See Makeconfig regarding the use of default-abi.
- default-abi := 32
-+
-+ifeq ($(subdir),csu)
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
-+endif
-diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-index da3b3c76b4..fd8cf92633 100644
---- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-@@ -21,3 +21,11 @@ endif
- ifeq ($(subdir),stdlib)
- sysdep_routines += __makecontext_ret
- endif
-+
-+ifeq ($(subdir),csu)
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
-+endif
-diff --git a/sysdeps/wordsize-32/Makefile b/sysdeps/wordsize-32/Makefile
-deleted file mode 100644
-index 82beac44ed..0000000000
---- a/sysdeps/wordsize-32/Makefile
-+++ /dev/null
-@@ -1,7 +0,0 @@
--ifeq ($(subdir),csu)
--ifeq (yes,$(build-shared))
--sysdep_routines += divdi3
--shared-only-routines += divdi3
--CPPFLAGS-divdi3.c = -Din_divdi3_c
--endif
--endif
-diff --git a/sysdeps/wordsize-32/divdi3-symbol-hacks.h b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
-new file mode 100644
-index 0000000000..6c90cb796d
---- /dev/null
-+++ b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
-@@ -0,0 +1,31 @@
-+/* Hacks needed for divdi3 symbol manipulation.
-+   Copyright (C) 2004-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/>.  */
-+
-+/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
-+   __moddi3, and __umoddi3.  These functions are exported and
-+   therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
-+   task which might not be worth it so we play tricks with the
-+   assembler.
-+   Note: in_divdi3_c is only used to avoid symbol alias on divdi3
-+   build itself.  */
-+#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
-+asm ("__divdi3 = __divdi3_internal");
-+asm ("__udivdi3 = __udivdi3_internal");
-+asm ("__moddi3 = __moddi3_internal");
-+asm ("__umoddi3 = __umoddi3_internal");
-+#endif
-diff --git a/sysdeps/wordsize-32/symbol-hacks.h b/sysdeps/wordsize-32/symbol-hacks.h
-deleted file mode 100644
-index 0aec1e0b97..0000000000
---- a/sysdeps/wordsize-32/symbol-hacks.h
-+++ /dev/null
-@@ -1,31 +0,0 @@
--/* Hacks needed for symbol manipulation.
--   Copyright (C) 2004-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_next "symbol-hacks.h"
--
--/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
--   __moddi3, and __umoddi3.  These functions are exported and
--   therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
--   task which might not be worth it so we play tricks with the
--   assembler.  */
--#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
--asm ("__divdi3 = __divdi3_internal");
--asm ("__udivdi3 = __udivdi3_internal");
--asm ("__moddi3 = __moddi3_internal");
--asm ("__umoddi3 = __umoddi3_internal");
--#endif
diff --git a/package/glibc/glibc.hash b/package/glibc/glibc.hash
index daaf014..afae10f 100644
--- a/package/glibc/glibc.hash
+++ b/package/glibc/glibc.hash
@@ -1,2 +1,2 @@
 # Locally calculated after checking pgp signature (glibc)
-sha256	067bd9bb3390e79aa45911537d13c3721f1d9d3769931a30c2681bfee66f23a0	glibc-2.25.tar.xz
+sha256	e54e0a934cd2bc94429be79da5e9385898d2306b9eaf3c92d5a77af96190f6bd	glibc-2.26.tar.xz
diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index c9a6579..f5d0282 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-GLIBC_VERSION = 2.25
+GLIBC_VERSION = 2.26
 GLIBC_SITE = $(BR2_GNU_MIRROR)/libc
 GLIBC_SOURCE = glibc-$(GLIBC_VERSION).tar.xz
 GLIBC_SRC_SUBDIR = .
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (6 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:28   ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
                   ` (7 subsequent siblings)
  15 siblings, 1 reply; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

This series bump glibc to the latest release and allow to remove all
patches required for the previous version! But glibc come with some
new issue that are hopefully already fixed in the 2.26.x stable branch.

While testing this new version, some build issues has been dicovered.
Two gcc patch are needed to build a toolchain with older compiler
(gcc 4.9 to 6.4), gcc 7.2 contain already the fix.

Backport a series related to bug 21930 and 22146.
Without them the float128 support break the C++ build for some
packages.

https://sourceware.org/bugzilla/show_bug.cgi?id=21930
https://sourceware.org/bugzilla/show_bug.cgi?id=22146

This third series is for testing and review.
Let's hope that glibc 2.26.1 will be released soon :)

Best regards,
Romain

Romain Naour (7):
  package/gcc: fix build issue with glibc 2.26
  package/gcc: fix build issue with glibc 2.26
  package/glibc: needs kernel headers >= 3.10 on powerpc64le
  package/gcc: enable float128 on powerpc64le with glibc >= 2.26
    toolchains
  package/diffutils: disable getopt_long replacement with glibc
  package/flex: disable reallocarray
  package/glibc: bump to 2.26

 package/diffutils/diffutils.mk                     |   6 +
 package/flex/flex.mk                               |   3 +-
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 190 ++++++++++++
 package/gcc/4.9.4/944-sanitizer-linux.patch        |  88 ++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++
 package/gcc/5.4.0/944-sanitizer-linux.patch        |  91 ++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++
 package/gcc/6.4.0/943-sanitizer-linux.patch        |  91 ++++++
 package/gcc/Config.in.host                         |   4 +
 package/gcc/gcc.mk                                 |   8 +
 ...__builtin_types_compatible_p-in-C-mode-bu.patch |  50 ++++
 .../glibc/0001-sh-Fix-building-with-gcc5-6.patch   |  56 ----
 ...00366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch |  35 ---
 ...02-Do-not-use-generic-selection-in-C-mode.patch |  56 ++++
 ...-version-of-issignaling-that-does-not-use.patch | 225 +++++++++++++++
 ...ject-overly-long-LD_PRELOAD-path-elements.patch | 122 --------
 ...ersion-of-issignaling-when-__NO_LONG_DOUB.patch |  47 +++
 ...Reject-overly-long-LD_AUDIT-path-elements.patch | 204 -------------
 ...-version-of-iszero-that-does-not-use-__MA.patch | 210 ++++++++++++++
 package/glibc/0005-fix-binutils-2-29-build.patch   |  65 -----
 ...ify-use-the-builtin-when-optimizing-for-s.patch |  63 ++++
 ...g-IS_IN-libc-guards-to-vectorized-strcspn.patch |  47 ---
 package/glibc/0006-sh4-trap.patch                  | 318 ---------------------
 package/glibc/glibc.hash                           |   2 +-
 package/glibc/glibc.mk                             |   2 +-
 toolchain/toolchain-buildroot/Config.in            |   6 +
 26 files changed, 1523 insertions(+), 850 deletions(-)
 create mode 100644 package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/4.9.4/944-sanitizer-linux.patch
 create mode 100644 package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/5.4.0/944-sanitizer-linux.patch
 create mode 100644 package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/6.4.0/943-sanitizer-linux.patch
 create mode 100644 package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
 delete mode 100644 package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
 delete mode 100644 package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
 create mode 100644 package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
 create mode 100644 package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
 delete mode 100644 package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
 create mode 100644 package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
 delete mode 100644 package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
 create mode 100644 package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
 delete mode 100644 package/glibc/0005-fix-binutils-2-29-build.patch
 create mode 100644 package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
 delete mode 100644 package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
 delete mode 100644 package/glibc/0006-sh4-trap.patch

-- 
2.9.5

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (7 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 0/7] glibc: " Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

In file included from ../../../libgcc/unwind-dw2.c:403:0:
./md-unwind-support.h: In function ??aarch64_fallback_frame_state??:
./md-unwind-support.h:58:21: error: field ??uc??  has incomplete type
     struct ucontext uc;
                     ^~

The fix is already included in gcc 7.2 release [1]. We have to backport it to
all older gcc release since it's not included in any stable release yet.

[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=14c2f22a1877f6b60a2f7c2f83ffb032759456a6

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: use upstream commit for gcc 5 and 6. (Yann)
---
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 190 ++++++++++++++++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
 ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
 3 files changed, 574 insertions(+)
 create mode 100644 package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
 create mode 100644 package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch

diff --git a/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..526346c
--- /dev/null
+++ b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,190 @@
+From b7e85069238c40eae54d0ca03ab6d5470d1815f9 Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:25:10 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
+[Romain backport from gcc-5-branch]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 6b5b3cd..d13dc34 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index b5bfd1c..166d3d2 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index dc58f0a..8b94568 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index 7986928..a9d621c 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index 1ba2a0c4..d67767e 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index ba4bd80..8978868 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 4a3cfff..d2ac437 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index 4875706..671bde7 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index 27481cf..c24d58c 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 6832d0b..cb15b4c 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -63,7 +63,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
diff --git a/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..4c3385d
--- /dev/null
+++ b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,192 @@
+From c287e88cc3743bfa7e5719bc4dee327aa3950051 Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:25:10 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit ecf0d1a107133c715763940c2b197aa814710e1b)
+[Romain rebase on 5.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 86d17b1..909f68f 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index d65474f..9a226b1 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index 0c270e4..7fa95d2 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index e54bf73..d35fc45 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index fb79a4d..b2f5ea4 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index dff1c20..1d88afe 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 0149468..9157535 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index e63091f..67033f0 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index fd83ba7..e3c9ef0 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 9daf738..ff6b663 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -64,7 +64,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
diff --git a/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
new file mode 100644
index 0000000..a2a2ea0
--- /dev/null
+++ b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
@@ -0,0 +1,192 @@
+From 35d8ca22047f101a700abb29cffbf03b81278a2b Mon Sep 17 00:00:00 2001
+From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue, 4 Jul 2017 10:23:57 +0000
+Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
+
+Current glibc no longer gives the ucontext_t type the tag struct
+ucontext, to conform with POSIX namespace rules.  This requires
+various linux-unwind.h files in libgcc, that were previously using
+struct ucontext, to be fixed to use ucontext_t instead.  This is
+similar to the removal of the struct siginfo tag from siginfo_t some
+years ago.
+
+This patch changes those files to use ucontext_t instead.  As the
+standard name that should be unconditionally safe, so this is not
+restricted to architectures supported by glibc, or conditioned on the
+glibc version.
+
+Tested compilation together with current glibc with glibc's
+build-many-glibcs.py.
+
+	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
+	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
+	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
+	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
+	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
+	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
+	config/pa/linux-unwind.h (pa32_fallback_frame_state),
+	config/sh/linux-unwind.h (sh_fallback_frame_state),
+	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
+	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
+	ucontext_t instead of struct ucontext.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 249957 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit b685411208e0aaa79190d54faf945763514706b8)
+[Romain rebase on gcc 6.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libgcc/config/aarch64/linux-unwind.h | 2 +-
+ libgcc/config/alpha/linux-unwind.h   | 2 +-
+ libgcc/config/bfin/linux-unwind.h    | 2 +-
+ libgcc/config/i386/linux-unwind.h    | 4 ++--
+ libgcc/config/m68k/linux-unwind.h    | 2 +-
+ libgcc/config/nios2/linux-unwind.h   | 2 +-
+ libgcc/config/pa/linux-unwind.h      | 2 +-
+ libgcc/config/sh/linux-unwind.h      | 2 +-
+ libgcc/config/tilepro/linux-unwind.h | 2 +-
+ libgcc/config/xtensa/linux-unwind.h  | 2 +-
+ 10 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
+index 4512efb..06de45a 100644
+--- a/libgcc/config/aarch64/linux-unwind.h
++++ b/libgcc/config/aarch64/linux-unwind.h
+@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe
+   {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   };
+ 
+   struct rt_sigframe *rt_;
+diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
+index bdbba4a..e84812e 100644
+--- a/libgcc/config/alpha/linux-unwind.h
++++ b/libgcc/config/alpha/linux-unwind.h
+@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       sc = &rt_->uc.uc_mcontext;
+     }
+diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
+index 77b7c23..8bf5e82 100644
+--- a/libgcc/config/bfin/linux-unwind.h
++++ b/libgcc/config/bfin/linux-unwind.h
+@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
+ 	void *puc;
+ 	char retcode[8];
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+ 
+       /* The void * cast is necessary to avoid an aliasing warning.
+diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
+index 540a0a2..29efbe3 100644
+--- a/libgcc/config/i386/linux-unwind.h
++++ b/libgcc/config/i386/linux-unwind.h
+@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+   if (*(unsigned char *)(pc+0) == 0x48
+       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+     {
+-      struct ucontext *uc_ = context->cfa;
++      ucontext_t *uc_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+          because it does not alias anything.  */
+@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
+ 	siginfo_t *pinfo;
+ 	void *puc;
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
+index 75b7cf7..f964e24 100644
+--- a/libgcc/config/m68k/linux-unwind.h
++++ b/libgcc/config/m68k/linux-unwind.h
+@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ /* <sys/ucontext.h> is unfortunately broken right now.  */
+ struct uw_ucontext {
+ 	unsigned long	  uc_flags;
+-	struct ucontext  *uc_link;
++	ucontext_t	 *uc_link;
+ 	stack_t		  uc_stack;
+ 	mcontext_t	  uc_mcontext;
+ 	unsigned long	  uc_filler[80];
+diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
+index 2304142..30f25ea 100644
+--- a/libgcc/config/nios2/linux-unwind.h
++++ b/libgcc/config/nios2/linux-unwind.h
+@@ -38,7 +38,7 @@ struct nios2_mcontext {
+ 
+ struct nios2_ucontext {
+   unsigned long uc_flags;
+-  struct ucontext *uc_link;
++  ucontext_t *uc_link;
+   stack_t uc_stack;
+   struct nios2_mcontext uc_mcontext;
+   sigset_t uc_sigmask;	/* mask last for extensibility */
+diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
+index 9a2657f..e47493d 100644
+--- a/libgcc/config/pa/linux-unwind.h
++++ b/libgcc/config/pa/linux-unwind.h
+@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
+   struct sigcontext *sc;
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *frame;
+ 
+   /* rt_sigreturn trampoline:
+diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
+index e389cac..0bf43ba 100644
+--- a/libgcc/config/sh/linux-unwind.h
++++ b/libgcc/config/sh/linux-unwind.h
+@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
+     {
+       struct rt_sigframe {
+ 	siginfo_t info;
+-	struct ucontext uc;
++	ucontext_t uc;
+       } *rt_ = context->cfa;
+       /* The void * cast is necessary to avoid an aliasing warning.
+          The aliasing warning is correct, but should not be a problem
+diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
+index 796e976..75f8890 100644
+--- a/libgcc/config/tilepro/linux-unwind.h
++++ b/libgcc/config/tilepro/linux-unwind.h
+@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
+   struct rt_sigframe {
+     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* Return if this is not a signal handler.  */
+diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
+index 9872492..586a9d4 100644
+--- a/libgcc/config/xtensa/linux-unwind.h
++++ b/libgcc/config/xtensa/linux-unwind.h
+@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ 
+   struct rt_sigframe {
+     siginfo_t info;
+-    struct ucontext uc;
++    ucontext_t uc;
+   } *rt_;
+ 
+   /* movi a2, __NR_rt_sigreturn; syscall */
+-- 
+2.9.5
+
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 2/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (8 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:241:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
   struct sigaltstack handler_stack;

../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:276:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
   struct sigaltstack handler_stack;
                      ^~~~~~~~~~~~~

The fix is already included in gcc 7.2 release [1]. We have to backport it to
all older gcc release since it's not included in any stable release yet.

[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=72edc2c02f8b4768ad660f46a1c7e2400c0a8e06

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: use upstream commit for gcc 5 and 6. (Yann)
---
 package/gcc/4.9.4/944-sanitizer-linux.patch | 88 ++++++++++++++++++++++++++++
 package/gcc/5.4.0/944-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
 package/gcc/6.4.0/943-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
 3 files changed, 270 insertions(+)
 create mode 100644 package/gcc/4.9.4/944-sanitizer-linux.patch
 create mode 100644 package/gcc/5.4.0/944-sanitizer-linux.patch
 create mode 100644 package/gcc/6.4.0/943-sanitizer-linux.patch

diff --git a/package/gcc/4.9.4/944-sanitizer-linux.patch b/package/gcc/4.9.4/944-sanitizer-linux.patch
new file mode 100644
index 0000000..caadf2d
--- /dev/null
+++ b/package/gcc/4.9.4/944-sanitizer-linux.patch
@@ -0,0 +1,88 @@
+From f9a35ba5c150da2e381c4cab01f8f12bcd6af5d2 Mon Sep 17 00:00:00 2001
+From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 17 Jul 2017 19:41:08 +0000
+Subject: [PATCH] 	Backported from mainline 	2017-07-14  Jakub
+ Jelinek  <jakub@redhat.com>
+
+	PR sanitizer/81066
+	* sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+	* sanitizer_common/sanitizer_linux.cc: Likewise.
+	* sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+	* tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch at 250287 138bc75d-0d04-0410-961f-82ee72b054a4
+(cherry picked from commit 72edc2c02f8b4768ad660f46a1c7e2400c0a8e06)
+[Romain backport to 4.9.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 69c9c10..8e53673 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -599,8 +599,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+   return internal_syscall(__NR_prctl, option, arg2, arg3, arg4, arg5);
+ }
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(__NR_sigaltstack, (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 6422df1..8e111d1 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -18,7 +18,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -28,8 +27,7 @@ struct linux_dirent;
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,
+     __sanitizer_kernel_sigaction_t *oldact);
+ uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index 6ee63ec..50c21a3 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -238,7 +238,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index fe69430..49f5270 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -351,7 +351,7 @@ bool IsGlobalVar(uptr addr) {
+ // closes within glibc. The code is a pure hack.
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
diff --git a/package/gcc/5.4.0/944-sanitizer-linux.patch b/package/gcc/5.4.0/944-sanitizer-linux.patch
new file mode 100644
index 0000000..a2602b7
--- /dev/null
+++ b/package/gcc/5.4.0/944-sanitizer-linux.patch
@@ -0,0 +1,91 @@
+From cf796eadff0f2ff0f6e4565373d54d10dff276e1 Mon Sep 17 00:00:00 2001
+From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Thu, 7 Sep 2017 07:17:17 +0000
+Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
+
+        Backported from mainline
+        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+        PR sanitizer/81066
+        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+        * sanitizer_common/sanitizer_linux.cc: Likewise.
+        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+        * tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 251829 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit 833e00c01e96f61e24cd7ec97b93fad212dc914b)
+[Romain rebase on gcc 5.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 9feb307..821b26d 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -514,8 +514,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+ }
+ #endif
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 086834c..3a6f4cd 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -18,7 +18,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -27,8 +26,7 @@ struct linux_dirent;
+ 
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
+     __sanitizer_sigset_t *oldset);
+ void internal_sigfillset(__sanitizer_sigset_t *set);
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index 5881202..c54894d 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -234,7 +234,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index 3259131..b8e9078 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -377,7 +377,7 @@ bool IsGlobalVar(uptr addr) {
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+ #if SANITIZER_LINUX
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
diff --git a/package/gcc/6.4.0/943-sanitizer-linux.patch b/package/gcc/6.4.0/943-sanitizer-linux.patch
new file mode 100644
index 0000000..640d68c
--- /dev/null
+++ b/package/gcc/6.4.0/943-sanitizer-linux.patch
@@ -0,0 +1,91 @@
+From a3e3d1b5f73380a99126c4937a95225ba3bd214b Mon Sep 17 00:00:00 2001
+From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Thu, 7 Sep 2017 07:15:24 +0000
+Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
+
+        Backported from mainline
+        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
+
+        PR sanitizer/81066
+        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+        * sanitizer_common/sanitizer_linux.cc: Likewise.
+        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+        * tsan/tsan_platform_linux.cc: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 251828 138bc75d-0d04-0410-961f-82ee72b054a4
+
+(cherry picked from commit 8937b94d1a643fd9760714642296d034a45254a8)
+[Romain rebase on gcc 6.4]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
+ libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
+ 4 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 2cefa20..223d9c6 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -546,8 +546,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+ }
+ #endif
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 4497702..1594058 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -19,7 +19,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -28,8 +27,7 @@ struct linux_dirent;
+ 
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
+     __sanitizer_sigset_t *oldset);
+ void internal_sigfillset(__sanitizer_sigset_t *set);
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index c919e4f..014162af 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -267,7 +267,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index 09cec5f..908f4fe 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -291,7 +291,7 @@ bool IsGlobalVar(uptr addr) {
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+ #if SANITIZER_LINUX
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];
+-- 
+2.9.5
+
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (9 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Since glibc 2.26, kernel headers >= 3.10 are needed on powerpc64le [1].
In order to prepare the glibc bump to this version, we don't allow to
build a Buildroot toolchain with kernel headers older than 3.10.

[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=c2ff5ec13fca1bdd1cd646a0260808386d7bd7ff

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
v3: move the dependency outside of architectures section. (Yann)
---
 toolchain/toolchain-buildroot/Config.in | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/toolchain/toolchain-buildroot/Config.in b/toolchain/toolchain-buildroot/Config.in
index f47001f..ac6017f 100644
--- a/toolchain/toolchain-buildroot/Config.in
+++ b/toolchain/toolchain-buildroot/Config.in
@@ -51,6 +51,7 @@ config BR2_TOOLCHAIN_BUILDROOT_GLIBC
 	depends on BR2_USE_MMU
 	depends on !BR2_STATIC_LIBS
 	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
+	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || !BR2_powerpc64le
 	depends on !BR2_powerpc_SPE
 	select BR2_TOOLCHAIN_USES_GLIBC
 	# our glibc.mk enables RPC support
@@ -65,6 +66,11 @@ comment "glibc needs a toolchain w/ dynamic library, kernel headers >= 3.2"
 	depends on BR2_USE_MMU
 	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
 
+# glibc >= 2.26 require kernel headers >= 3.10 on powerpc64le.
+comment "glibc on powerpc64le needs a toolchain w/ headers >= 3.10"
+	depends on BR2_powerpc64le
+	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
+
 config BR2_TOOLCHAIN_BUILDROOT_MUSL
 	bool "musl"
 	depends on BR2_aarch64	  || BR2_arm     || BR2_armeb     || BR2_i386 || \
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (10 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

float128 is now required on powerpc64le with glibc >= 2.26 toolchains.

Fixes:
running configure fragment for sysdeps/gnu
running configure fragment for sysdeps/powerpc/powerpc64le
checking if [...]powerpc64le-buildroot-linux-gnu-gcc supports binary128 floating point type... no
checking if the target machine is at least POWER8... yes
configure: error: ***  binary128 floating point type (GCC >= 6.2) is required on powerpc64le.

In order to prepare the glibc bump to this version, we enable
binary128 floating point in gcc. This require at least gcc >= 6.2.

Disable gcc 4.x and 5.x for internal toolchain.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
v2: Disable gcc 4.x and 5.x for internal toolchain.
---
 package/gcc/Config.in.host | 4 ++++
 package/gcc/gcc.mk         | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
index ec7b692..0926560 100644
--- a/package/gcc/Config.in.host
+++ b/package/gcc/Config.in.host
@@ -39,6 +39,8 @@ config BR2_GCC_VERSION_4_9_X
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
 	# musl mips64 unsupported
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
+	# glibc >= 2.26 needs gcc >= 6.2
+	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
 	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
 
 config BR2_GCC_VERSION_5_X
@@ -53,6 +55,8 @@ config BR2_GCC_VERSION_5_X
 	depends on !BR2_mips_interaptiv && !BR2_mips_m5150 && !BR2_mips_i6400
 	# musl mips64 unsupported
 	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
+	# glibc >= 2.26 needs gcc >= 6.2
+	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
 	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
 
 config BR2_GCC_VERSION_6_X
diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index 49ccccf..54ef70c 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -254,6 +254,14 @@ HOST_GCC_COMMON_CONF_OPTS += \
 	--without-long-double-128
 endif
 
+# Since glibc >= 2.26, poerpc64le requires double/long double which
+# requires at least gcc 6.2.
+# See sysdeps/powerpc/powerpc64le/configure.ac
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6)$(BR2_powerpc64le),yyy)
+HOST_GCC_COMMON_CONF_OPTS += \
+	--with-long-double-128
+endif
+
 HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"'
 ifeq ($(BR2_GCC_ARCH_HAS_CONFIGURABLE_DEFAULTS),)
 ifeq ($(call qstrip,$(BR2_GCC_TARGET_CPU_REVISION)),)
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (11 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Since glibc >= 2.26, don't try to use getopt_long replacement bundled
with diffutils. It will conflict with the one from glibc.
The getopt copy bundled in glibc has been updated with the one from gnulib.

After a lot of warnings...
Fixes:
xstrtol-error.c: In function 'xstrtol_error':
xstrtol-error.c:84:26: error: invalid use of undefined type 'struct rpl_option'
     option = long_options[opt_idx].name;
                          ^
xstrtol-error.c:84:26: error: dereferencing pointer to incomplete type 'const struct rpl_option'

[...]

xstrtol-error.c:92:1: error: conflicting types for 'xstrtol_fatal'
 xstrtol_fatal (enum strtol_error err,
 ^~~~~~~~~~~~~
In file included from xstrtol-error.c:20:0:
xstrtol.h:69:16: note: previous declaration of 'xstrtol_fatal' was here
 _Noreturn void xstrtol_fatal (enum strtol_error,
                ^~~~~~~~~~~~~

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/diffutils/diffutils.mk | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/package/diffutils/diffutils.mk b/package/diffutils/diffutils.mk
index 6e5b9b6..79785d6 100644
--- a/package/diffutils/diffutils.mk
+++ b/package/diffutils/diffutils.mk
@@ -11,6 +11,12 @@ DIFFUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES)
 DIFFUTILS_LICENSE = GPL-3.0+
 DIFFUTILS_LICENSE_FILES = COPYING
 
+# Since glibc >= 2.26, don't try to use getopt_long replacement bundled
+# with diffutils. It will conflict with the one from glibc.
+ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
+DIFFUTILS_CONF_ENV += gl_cv_func_getopt_gnu=yes
+endif
+
 ifeq ($(BR2_PACKAGE_BUSYBOX),y)
 DIFFUTILS_DEPENDENCIES += busybox
 endif
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (12 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
  2017-09-27 21:12 ` [Buildroot] [PATCH v3 0/7] glibc: " Arnout Vandecappelle
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

This doesn't compile with glibc 2.26 where reallocarray() as been introduced.

It's a nasty issue, when reallocarray() is available for the target, flex will
build a small tool called stage1flex for the host (using _FOR_BUILD) but with
the config.h generated for the target.

When the host doesn't have a glibc >= 2.26, reallocarray() is never defined
while building stage1flex:

misc.c:147:8: warning : implicit declaration of function ? reallocarray ?
[-Wimplicit-function-declaration]
  mem = reallocarray(NULL, (size_t) size, element_size);
        ^~~~~~~~~~~~
misc.c:147:6: warning : assignment makes pointer from integer without a cast
[-Wint-conversion]
  mem = reallocarray(NULL, (size_t) size, element_size);
      ^

Disable reallocarray for now, reallocarray() support may be
enabled in a followup patch.

Fixes:
stage1flex-misc.o: In function `allocate_array':
misc.c:(.text+0x38f): undefined reference to `reallocarray'
stage1flex-misc.o: In function `reallocate_array':
misc.c:(.text+0xc8a): undefined reference to `reallocarray'
collect2: error: ld returned 1 exit status

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/flex/flex.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package/flex/flex.mk b/package/flex/flex.mk
index b782699..0196624 100644
--- a/package/flex/flex.mk
+++ b/package/flex/flex.mk
@@ -10,7 +10,8 @@ FLEX_INSTALL_STAGING = YES
 FLEX_LICENSE = FLEX
 FLEX_LICENSE_FILES = COPYING
 FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4
-FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4
+FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \
+	ac_cv_func_reallocarray=no
 HOST_FLEX_DEPENDENCIES = host-m4
 
 define FLEX_DISABLE_PROGRAM
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (13 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
@ 2017-09-23 21:24 ` Romain Naour
  2017-09-27 21:12 ` [Buildroot] [PATCH v3 0/7] glibc: " Arnout Vandecappelle
  15 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:24 UTC (permalink / raw)
  To: buildroot

Drop upstream patch:

0001-sh-Fix-building-with-gcc5-6.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=d40dbe722f004f999b589de776f7e57e564dda01

0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d

0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
https://sourceware.org/git/?p=glibc.git;a=commit;h=6d0ba622891bed9d8394eef1935add53003b12e8

0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch

https://sourceware.org/git/?p=glibc.git;a=commit;h=81b82fb966ffbd94353f793ad17116c6088dedd9

0005-fix-binutils-2-29-build.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=388b4f1a02f3a801965028bbfcd48d905638b797

0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=69052a3a95da37169a08f9e59b2cc1808312753c

0006-sh4-trap.patch
https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=db3d848e154b00071f4a5e729d5884efad410109

But 2.26 version introduced quite a few regressions on x86, x86_64 and
powerpc64le when float128 support was added. All these issues are now
fixed in the glibc 2.26 stable branch.

Backport patches from glibc 2.26 stable branch related to bug 21930.
Take all patches listed in this bug report in order to have all fix
for this issue [1] [2].

Fixes gnuradio build:
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp: In function ?std::size_t boost::hash_detail::float_hash_value(T)?:
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: expected primary-expression before ?float?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: expected primary-expression before ?long?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: found ?:? in nested-name-specifier, expected ?::?
             switch (fpclassify(v))
                     ^
[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: ?_Float128? is not a class or namespace
             switch (fpclassify(v))
                     ^

[...]/sysroot/usr/include/boost/functional/hash/detail/hash_float.hpp:210:21: error: ?_Generic? was not declared in this scope
             switch (fpclassify(v))
                     ^

Also backport fix for glibc bug 22146.
Without this patch some C++ applications (jsoncpp, mesa3d and kodi) fail
to build due to an issue while building the toolchain.

A test in the libstdc++ configure script fail when -Os and float128 are
used.

See the bug report for details [3].

[1] https://sourceware.org/ml/libc-alpha/2017-08/msg00586.html
[2] https://sourceware.org/bugzilla/show_bug.cgi?id=21930
[3] https://sourceware.org/bugzilla/show_bug.cgi?id=22146

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 ...__builtin_types_compatible_p-in-C-mode-bu.patch |  50 ++++
 .../glibc/0001-sh-Fix-building-with-gcc5-6.patch   |  56 ----
 ...00366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch |  35 ---
 ...02-Do-not-use-generic-selection-in-C-mode.patch |  56 ++++
 ...-version-of-issignaling-that-does-not-use.patch | 225 +++++++++++++++
 ...ject-overly-long-LD_PRELOAD-path-elements.patch | 122 --------
 ...ersion-of-issignaling-when-__NO_LONG_DOUB.patch |  47 +++
 ...Reject-overly-long-LD_AUDIT-path-elements.patch | 204 -------------
 ...-version-of-iszero-that-does-not-use-__MA.patch | 210 ++++++++++++++
 package/glibc/0005-fix-binutils-2-29-build.patch   |  65 -----
 ...ify-use-the-builtin-when-optimizing-for-s.patch |  63 ++++
 ...g-IS_IN-libc-guards-to-vectorized-strcspn.patch |  47 ---
 package/glibc/0006-sh4-trap.patch                  | 318 ---------------------
 package/glibc/glibc.hash                           |   2 +-
 package/glibc/glibc.mk                             |   2 +-
 15 files changed, 653 insertions(+), 849 deletions(-)
 create mode 100644 package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
 delete mode 100644 package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
 delete mode 100644 package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
 create mode 100644 package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
 create mode 100644 package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
 delete mode 100644 package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
 create mode 100644 package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
 delete mode 100644 package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
 create mode 100644 package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
 delete mode 100644 package/glibc/0005-fix-binutils-2-29-build.patch
 create mode 100644 package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
 delete mode 100644 package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
 delete mode 100644 package/glibc/0006-sh4-trap.patch

diff --git a/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch b/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
new file mode 100644
index 0000000..27a785e
--- /dev/null
+++ b/package/glibc/0001-Do-not-use-__builtin_types_compatible_p-in-C-mode-bu.patch
@@ -0,0 +1,50 @@
+From f7439f9b1089e17b6721f28e228682831a2f0135 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 21 Aug 2017 14:23:27 +0200
+Subject: [PATCH] Do not use __builtin_types_compatible_p in C++ mode (bug
+ 21930)
+
+The logic to define isinf for float128 depends on the availability of
+__builtin_types_compatible_p, which is only available in C mode,
+however, the conditionals do not check for C or C++ mode.  This lead to
+an error in libstdc++ configure, as reported by bug 21930.
+
+This patch adds a conditional for C mode in the definition of isinf for
+float128.  No definition is provided in C++ mode, since libstdc++
+headers undefine isinf.
+
+Tested for powerpc64le (glibc test suite and libstdc++-v3 configure).
+
+	[BZ #21930]
+	* math/math.h (isinf): Check if in C or C++ mode before using
+	__builtin_types_compatible_p, since this is a C mode feature.
+
+(cherry picked from commit 47a67213a9f51c5f8816d240500b10db605d8b77)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/math/math.h b/math/math.h
+index e217080..dea8dbe 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -442,8 +442,12 @@ enum
+ 
+ /* Return nonzero value if X is positive or negative infinity.  */
+ # if __HAVE_DISTINCT_FLOAT128 && !__GNUC_PREREQ (7,0) \
+-     && !defined __SUPPORT_SNAN__
+-   /* __builtin_isinf_sign is broken for float128 only before GCC 7.0.  */
++     && !defined __SUPPORT_SNAN__ && !defined __cplusplus
++   /* Since __builtin_isinf_sign is broken for float128 before GCC 7.0,
++      use the helper function, __isinff128, with older compilers.  This is
++      only provided for C mode, because in C++ mode, GCC has no support
++      for __builtin_types_compatible_p (and when in C++ mode, this macro is
++      not used anyway, because libstdc++ headers undefine it).  */
+ #  define isinf(x) \
+     (__builtin_types_compatible_p (__typeof (x), _Float128) \
+      ? __isinff128 (x) : __builtin_isinf_sign (x))
+-- 
+2.9.5
+
diff --git a/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch b/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
deleted file mode 100644
index fa43bdd..0000000
--- a/package/glibc/0001-sh-Fix-building-with-gcc5-6.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 3840d4c2add1dd282f5f01fa51720b2d5b8fd8d2 Mon Sep 17 00:00:00 2001
-From: Alexey Neyman <stilor@att.net>
-Date: Wed, 8 Feb 2017 16:00:57 -0200
-Subject: [PATCH] sh: Fix building with gcc5/6
-
-Build glibc for sh4-unknown-linux-gnu currently fails if one's
-using GCC5/6: in dl-conflict.c, the elf_machine_rela() function
-is called with NULL as its 3rd argument, sym. The implementation
-of that function in sysdeps/sh/dl-machine.h dereferences that pointer:
-
-const Elf32_Sym *const refsym = sym;
-...
-if (map == &GL(dl_rtld_map))
-  value -= map->l_addr + refsym->st_value + reloc->r_addend;
-
-GCC discovers a null pointer dereference, and in accordance with
--fdelete-null-pointer-checks (which is enabled in -O2) replaces this
-code with a trap - which, as SH does not implement a trap pattern in
-GCC, evaluates to an abort() call. This abort() call pulls many more
-objects from libc_nonshared.a, eventually resulting in link failure
-due to multiple definitions for a number of symbols.
-
-As far as I see, the conditional before this code is always false in
-rtld: _dl_resolve_conflicts() is called with main_map as the first
-argument, not GL(_dl_rtld_map), but since that call is in yet another
-compilation unit, GCC does not know about it. Patch that wraps this
-conditional into !defined RESOLVE_CONFLICT_FIND_MAP attached.
-
-	* sysdeps/sh/dl-machine.h (elf_machine_rela): The condition
-	in R_SH_DIR32 case is always false when inlined from
-	dl-conflict.c. Ifdef out to prevent GCC from insertin an
-	abort() call.
-
-[Waldemar: backport of
-https://sourceware.org/git/?p=glibc.git;a=commit;h=d40dbe722f004f999b589de776f7e57e564dda01.]
-Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
----
- sysdeps/sh/dl-machine.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h
-index 449deea..2b468af 100644
---- a/sysdeps/sh/dl-machine.h
-+++ b/sysdeps/sh/dl-machine.h
-@@ -389,7 +389,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
- 	  break;
- 	case R_SH_DIR32:
- 	  {
--#ifndef RTLD_BOOTSTRAP
-+#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP
- 	   /* This is defined in rtld.c, but nowhere in the static
- 	      libc.a; make the reference weak so static programs can
- 	      still link.  This declaration cannot be done when
--- 
-2.7.4
-
diff --git a/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch b/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
deleted file mode 100644
index d701294..0000000
--- a/package/glibc/0002-CVE-2017-1000366-Ignore-LD_LIBRARY_PATH-for-AT_SECUR.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 17:09:55 +0200
-Subject: [PATCH] CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1
- programs [BZ #21624]
-
-LD_LIBRARY_PATH can only be used to reorder system search paths, which
-is not useful functionality.
-
-This makes an exploitable unbounded alloca in _dl_init_paths unreachable
-for AT_SECURE=1 programs.
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 3 ++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 2446a87680..2269dbec81 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -2422,7 +2422,8 @@ process_envvars (enum mode *modep)
- 
- 	case 12:
- 	  /* The library search path.  */
--	  if (memcmp (envline, "LIBRARY_PATH", 12) == 0)
-+	  if (!__libc_enable_secure
-+	      && memcmp (envline, "LIBRARY_PATH", 12) == 0)
- 	    {
- 	      library_path = &envline[13];
- 	      break;
--- 
-2.11.0
-
diff --git a/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch b/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
new file mode 100644
index 0000000..7321eeb
--- /dev/null
+++ b/package/glibc/0002-Do-not-use-generic-selection-in-C-mode.patch
@@ -0,0 +1,56 @@
+From bb21afc362a3ecba07ab386a0bc4385e75fbd4b5 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 14 Aug 2017 17:51:51 -0300
+Subject: [PATCH] Do not use generic selection in C++ mode
+
+The logic to protect the use of generic selection (_Generic) does not
+check for C or C++ mode, however, generic selection is a C-only
+feature.
+
+Tested for powerpc64le.
+
+	* misc/sys/cdefs.h (__HAVE_GENERIC_SELECTION): Define to 0, if
+	in C++ mode.
+
+(cherry picked from commit 6913ad65e00bb32417ad39c41d292b976171e27e)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ misc/sys/cdefs.h | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
+index 06523bf..0c80821 100644
+--- a/misc/sys/cdefs.h
++++ b/misc/sys/cdefs.h
+@@ -464,17 +464,18 @@
+ # define __glibc_macro_warning(msg)
+ #endif
+ 
+-/* Support for generic selection (ISO C11) is available in GCC since
+-   version 4.9.  Previous versions do not provide generic selection,
+-   even though they might set __STDC_VERSION__ to 201112L, when in
+-   -std=c11 mode.  Thus, we must check for !defined __GNUC__ when
+-   testing __STDC_VERSION__ for generic selection support.
++/* Generic selection (ISO C11) is a C-only feature, available in GCC
++   since version 4.9.  Previous versions do not provide generic
++   selection, even though they might set __STDC_VERSION__ to 201112L,
++   when in -std=c11 mode.  Thus, we must check for !defined __GNUC__
++   when testing __STDC_VERSION__ for generic selection support.
+    On the other hand, Clang also defines __GNUC__, so a clang-specific
+    check is required to enable the use of generic selection.  */
+-#if __GNUC_PREREQ (4, 9) \
+-    || __glibc_clang_has_extension (c_generic_selections) \
+-    || (!defined __GNUC__ && defined __STDC_VERSION__ \
+-	&& __STDC_VERSION__ >= 201112L)
++#if !defined __cplusplus \
++    && (__GNUC_PREREQ (4, 9) \
++	|| __glibc_clang_has_extension (c_generic_selections) \
++	|| (!defined __GNUC__ && defined __STDC_VERSION__ \
++	    && __STDC_VERSION__ >= 201112L))
+ # define __HAVE_GENERIC_SELECTION 1
+ #else
+ # define __HAVE_GENERIC_SELECTION 0
+-- 
+2.9.5
+
diff --git a/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch b/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
new file mode 100644
index 0000000..b9cd3df
--- /dev/null
+++ b/package/glibc/0003-Provide-a-C-version-of-issignaling-that-does-not-use.patch
@@ -0,0 +1,225 @@
+From 9bcf391a21677c6d5fa1c2be71554ec181e24f39 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Mon, 14 Aug 2017 13:46:15 -0300
+Subject: [PATCH] Provide a C++ version of issignaling that does not use
+ __MATH_TG
+
+The macro __MATH_TG contains the logic to select between long double and
+_Float128, when these types are ABI-distinct.  This logic relies on
+__builtin_types_compatible_p, which is not available in C++ mode.
+
+On the other hand, C++ function overloading provides the means to
+distinguish between the floating-point types.  The overloading
+resolution will match the correct parameter regardless of type
+qualifiers, i.e.: const and volatile.
+
+Tested for powerpc64le, s390x, and x86_64.
+
+	* math/math.h [defined __cplusplus] (issignaling): Provide a C++
+	definition for issignaling that does not rely on __MATH_TG,
+	since __MATH_TG uses __builtin_types_compatible_p, which is only
+	available in C mode.
+	(CFLAGS-test-math-issignaling.cc): New variable.
+	* math/Makefile [CXX] (tests): Add test-math-issignaling.
+	* math/test-math-issignaling.cc: New test for C++ implementation
+	of type-generic issignaling.
+	* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
+	(CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build
+	options of test-math-issignaling on powerpc64le.
+
+(cherry picked from commit a16e8bc08edca84d507715c66d6cddbbc7ed3b62)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/Makefile                        |   3 +-
+ math/math.h                          |  19 +++++-
+ math/test-math-issignaling.cc        | 113 +++++++++++++++++++++++++++++++++++
+ sysdeps/powerpc/powerpc64le/Makefile |   1 +
+ 4 files changed, 134 insertions(+), 2 deletions(-)
+ create mode 100644 math/test-math-issignaling.cc
+
+diff --git a/math/Makefile b/math/Makefile
+index e09b0c0..0130fcf 100644
+--- a/math/Makefile
++++ b/math/Makefile
+@@ -203,7 +203,7 @@ tests-static = test-fpucw-static test-fpucw-ieee-static \
+ 	       test-signgam-ullong-static test-signgam-ullong-init-static
+ 
+ ifneq (,$(CXX))
+-tests += test-math-isinff test-math-iszero
++tests += test-math-isinff test-math-iszero test-math-issignaling
+ endif
+ 
+ ifneq (no,$(PERL))
+@@ -350,6 +350,7 @@ CFLAGS-test-signgam-ullong-init-static.c = -std=c99
+ 
+ CFLAGS-test-math-isinff.cc = -std=gnu++11
+ CFLAGS-test-math-iszero.cc = -std=gnu++11
++CFLAGS-test-math-issignaling.cc = -std=gnu++11
+ 
+ CFLAGS-test-iszero-excess-precision.c = -fexcess-precision=standard
+ CFLAGS-test-iseqsig-excess-precision.c = -fexcess-precision=standard
+diff --git a/math/math.h b/math/math.h
+index dea8dbe..add86af 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -474,7 +474,24 @@ enum
+ # include <bits/iscanonical.h>
+ 
+ /* Return nonzero value if X is a signaling NaN.  */
+-# define issignaling(x) __MATH_TG ((x), __issignaling, (x))
++# ifndef __cplusplus
++#  define issignaling(x) __MATH_TG ((x), __issignaling, (x))
++# else
++   /* In C++ mode, __MATH_TG cannot be used, because it relies on
++      __builtin_types_compatible_p, which is a C-only builtin.  On the
++      other hand, overloading provides the means to distinguish between
++      the floating-point types.  The overloading resolution will match
++      the correct parameter (regardless of type qualifiers (i.e.: const
++      and volatile).  */
++extern "C++" {
++inline int issignaling (float __val) { return __issignalingf (__val); }
++inline int issignaling (double __val) { return __issignaling (__val); }
++inline int issignaling (long double __val) { return __issignalingl (__val); }
++#  if __HAVE_DISTINCT_FLOAT128
++inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
++#  endif
++} /* extern C++ */
++# endif
+ 
+ /* Return nonzero value if X is subnormal.  */
+ # define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL)
+diff --git a/math/test-math-issignaling.cc b/math/test-math-issignaling.cc
+new file mode 100644
+index 0000000..22ae9e1
+--- /dev/null
++++ b/math/test-math-issignaling.cc
+@@ -0,0 +1,113 @@
++/* Test for the C++ implementation of issignaling.
++   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/>.  */
++
++#define _GNU_SOURCE 1
++#include <math.h>
++#include <stdio.h>
++
++#include <limits>
++
++/* There is no signaling_NaN for _Float128 in std::numeric_limits.
++   Include ieee754_float128.h and use the bitfields in the union
++   ieee854_float128.ieee_nan to build a signaling NaN.  */
++#if __HAVE_DISTINCT_FLOAT128
++# include <ieee754_float128.h>
++#endif
++
++static bool errors;
++
++static void
++check (int actual, int expected, const char *actual_expr, int line)
++{
++  if (actual != expected)
++    {
++      errors = true;
++      printf ("%s:%d: error: %s\n", __FILE__, line, actual_expr);
++      printf ("%s:%d:   expected: %d\n", __FILE__, line, expected);
++      printf ("%s:%d:   actual: %d\n", __FILE__, line, actual);
++    }
++}
++
++#define CHECK(actual, expected) \
++  check ((actual), (expected), #actual, __LINE__)
++
++template <class T>
++static void
++check_type ()
++{
++  typedef std::numeric_limits<T> limits;
++  CHECK (issignaling (T{0}), 0);
++  if (limits::has_infinity)
++    {
++      CHECK (issignaling (limits::infinity ()), 0);
++      CHECK (issignaling (-limits::infinity ()), 0);
++    }
++  if (limits::has_quiet_NaN)
++    CHECK (issignaling (limits::quiet_NaN ()), 0);
++  if (limits::has_signaling_NaN)
++    CHECK (issignaling (limits::signaling_NaN ()), 1);
++}
++
++#if __HAVE_DISTINCT_FLOAT128
++static void
++check_float128 ()
++{
++  ieee854_float128 q;
++
++  q.d = 0;
++  CHECK (issignaling (q.d), 0);
++
++  /* Infinity.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFF;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x0000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Still a quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (issignaling (q.d), 0);
++
++  /* Signaling NaN.  */
++  q.ieee_nan.quiet_nan = 0;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (issignaling (q.d), 1);
++}
++#endif
++
++static int
++do_test (void)
++{
++  check_type<float> ();
++  check_type<double> ();
++  check_type<long double> ();
++#if __HAVE_DISTINCT_FLOAT128
++  check_float128 ();
++#endif
++  return errors;
++}
++
++#include <support/test-driver.c>
+diff --git a/sysdeps/powerpc/powerpc64le/Makefile b/sysdeps/powerpc/powerpc64le/Makefile
+index 77617b6..19adbfa 100644
+--- a/sysdeps/powerpc/powerpc64le/Makefile
++++ b/sysdeps/powerpc/powerpc64le/Makefile
+@@ -16,6 +16,7 @@ $(foreach suf,$(all-object-suffixes),%f128_r$(suf)): CFLAGS += -mfloat128
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-float128%$(suf)): CFLAGS += -mfloat128
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-ifloat128%$(suf)): CFLAGS += -mfloat128
+ CFLAGS-libm-test-support-float128.c += -mfloat128
++CFLAGS-test-math-issignaling.cc += -mfloat128
+ $(objpfx)test-float128% $(objpfx)test-ifloat128%: \
+   gnulib-tests += $(f128-loader-link)
+ endif
+-- 
+2.9.5
+
diff --git a/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch b/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
deleted file mode 100644
index df41093..0000000
--- a/package/glibc/0003-ld.so-Reject-overly-long-LD_PRELOAD-path-elements.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 6d0ba622891bed9d8394eef1935add53003b12e8 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 22:31:04 +0200
-Subject: [PATCH] ld.so: Reject overly long LD_PRELOAD path elements
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++------------
- 1 file changed, 72 insertions(+), 16 deletions(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 2269dbec81..86ae20c83f 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -99,6 +99,35 @@ uintptr_t __pointer_chk_guard_local
- strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
- #endif
- 
-+/* Length limits for names and paths, to protect the dynamic linker,
-+   particularly when __libc_enable_secure is active.  */
-+#ifdef NAME_MAX
-+# define SECURE_NAME_LIMIT NAME_MAX
-+#else
-+# define SECURE_NAME_LIMIT 255
-+#endif
-+#ifdef PATH_MAX
-+# define SECURE_PATH_LIMIT PATH_MAX
-+#else
-+# define SECURE_PATH_LIMIT 1024
-+#endif
-+
-+/* Check that AT_SECURE=0, or that the passed name does not contain
-+   directories and is not overly long.  Reject empty names
-+   unconditionally.  */
-+static bool
-+dso_name_valid_for_suid (const char *p)
-+{
-+  if (__glibc_unlikely (__libc_enable_secure))
-+    {
-+      /* Ignore pathnames with directories for AT_SECURE=1
-+	 programs, and also skip overlong names.  */
-+      size_t len = strlen (p);
-+      if (len >= SECURE_NAME_LIMIT || memchr (p, '/', len) != NULL)
-+	return false;
-+    }
-+  return *p != '\0';
-+}
- 
- /* List of auditing DSOs.  */
- static struct audit_list
-@@ -718,6 +747,42 @@ static const char *preloadlist attribute_relro;
- /* Nonzero if information about versions has to be printed.  */
- static int version_info attribute_relro;
- 
-+/* The LD_PRELOAD environment variable gives list of libraries
-+   separated by white space or colons that are loaded before the
-+   executable's dependencies and prepended to the global scope list.
-+   (If the binary is running setuid all elements containing a '/' are
-+   ignored since it is insecure.)  Return the number of preloads
-+   performed.  */
-+unsigned int
-+handle_ld_preload (const char *preloadlist, struct link_map *main_map)
-+{
-+  unsigned int npreloads = 0;
-+  const char *p = preloadlist;
-+  char fname[SECURE_PATH_LIMIT];
-+
-+  while (*p != '\0')
-+    {
-+      /* Split preload list at space/colon.  */
-+      size_t len = strcspn (p, " :");
-+      if (len > 0 && len < sizeof (fname))
-+	{
-+	  memcpy (fname, p, len);
-+	  fname[len] = '\0';
-+	}
-+      else
-+	fname[0] = '\0';
-+
-+      /* Skip over the substring and the following delimiter.  */
-+      p += len;
-+      if (*p != '\0')
-+	++p;
-+
-+      if (dso_name_valid_for_suid (fname))
-+	npreloads += do_preload (fname, main_map, "LD_PRELOAD");
-+    }
-+  return npreloads;
-+}
-+
- static void
- dl_main (const ElfW(Phdr) *phdr,
- 	 ElfW(Word) phnum,
-@@ -1464,23 +1529,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
- 
-   if (__glibc_unlikely (preloadlist != NULL))
-     {
--      /* The LD_PRELOAD environment variable gives list of libraries
--	 separated by white space or colons that are loaded before the
--	 executable's dependencies and prepended to the global scope
--	 list.  If the binary is running setuid all elements
--	 containing a '/' are ignored since it is insecure.  */
--      char *list = strdupa (preloadlist);
--      char *p;
--
-       HP_TIMING_NOW (start);
--
--      /* Prevent optimizing strsep.  Speed is not important here.  */
--      while ((p = (strsep) (&list, " :")) != NULL)
--	if (p[0] != '\0'
--	    && (__builtin_expect (! __libc_enable_secure, 1)
--		|| strchr (p, '/') == NULL))
--	  npreloads += do_preload (p, main_map, "LD_PRELOAD");
--
-+      npreloads += handle_ld_preload (preloadlist, main_map);
-       HP_TIMING_NOW (stop);
-       HP_TIMING_DIFF (diff, start, stop);
-       HP_TIMING_ACCUM_NT (load_time, diff);
--- 
-2.11.0
-
diff --git a/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch b/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
new file mode 100644
index 0000000..5e32f75
--- /dev/null
+++ b/package/glibc/0004-Fix-the-C-version-of-issignaling-when-__NO_LONG_DOUB.patch
@@ -0,0 +1,47 @@
+From 9dbd8386a1b706beb30291a7e76bbfe69c2620cf Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Wed, 23 Aug 2017 10:16:54 -0300
+Subject: [PATCH] Fix the C++ version of issignaling when __NO_LONG_DOUBLE_MATH
+ is defined
+
+When __NO_LONG_DOUBLE_MATH is defined, __issignalingl is not available,
+thus issignaling with long double argument should call __issignaling,
+instead.
+
+Tested for powerpc64le.
+
+	* math/math.h [defined __cplusplus] (issignaling): In the long
+	double case, call __issignalingl only if __NO_LONG_DOUBLE_MATH
+	is not defined.  Call __issignaling, otherwise.
+
+(cherry picked from commit 3d7b66f66cb223e899a7ebc0f4c20f13e711c9e0)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/math/math.h b/math/math.h
+index add86af..60dfa31 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -486,7 +486,15 @@ enum
+ extern "C++" {
+ inline int issignaling (float __val) { return __issignalingf (__val); }
+ inline int issignaling (double __val) { return __issignaling (__val); }
+-inline int issignaling (long double __val) { return __issignalingl (__val); }
++inline int
++issignaling (long double __val)
++{
++#  ifdef __NO_LONG_DOUBLE_MATH
++  return __issignaling (__val);
++#  else
++  return __issignalingl (__val);
++#  endif
++}
+ #  if __HAVE_DISTINCT_FLOAT128
+ inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
+ #  endif
+-- 
+2.9.5
+
diff --git a/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch b/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
deleted file mode 100644
index 25e937b..0000000
--- a/package/glibc/0004-ld.so-Reject-overly-long-LD_AUDIT-path-elements.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From 81b82fb966ffbd94353f793ad17116c6088dedd9 Mon Sep 17 00:00:00 2001
-From: Florian Weimer <fweimer@redhat.com>
-Date: Mon, 19 Jun 2017 22:32:12 +0200
-Subject: [PATCH] ld.so: Reject overly long LD_AUDIT path elements
-
-Also only process the last LD_AUDIT entry.
-
-[Peter: Drop ChangeLog modification]
-Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
----
- elf/rtld.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 105 insertions(+), 15 deletions(-)
-
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 86ae20c83f..65647fb1c8 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -129,13 +129,91 @@ dso_name_valid_for_suid (const char *p)
-   return *p != '\0';
- }
- 
--/* List of auditing DSOs.  */
-+/* LD_AUDIT variable contents.  Must be processed before the
-+   audit_list below.  */
-+const char *audit_list_string;
-+
-+/* Cyclic list of auditing DSOs.  audit_list->next is the first
-+   element.  */
- static struct audit_list
- {
-   const char *name;
-   struct audit_list *next;
- } *audit_list;
- 
-+/* Iterator for audit_list_string followed by audit_list.  */
-+struct audit_list_iter
-+{
-+  /* Tail of audit_list_string still needing processing, or NULL.  */
-+  const char *audit_list_tail;
-+
-+  /* The list element returned in the previous iteration.  NULL before
-+     the first element.  */
-+  struct audit_list *previous;
-+
-+  /* Scratch buffer for returning a name which is part of
-+     audit_list_string.  */
-+  char fname[SECURE_NAME_LIMIT];
-+};
-+
-+/* Initialize an audit list iterator.  */
-+static void
-+audit_list_iter_init (struct audit_list_iter *iter)
-+{
-+  iter->audit_list_tail = audit_list_string;
-+  iter->previous = NULL;
-+}
-+
-+/* Iterate through both audit_list_string and audit_list.  */
-+static const char *
-+audit_list_iter_next (struct audit_list_iter *iter)
-+{
-+  if (iter->audit_list_tail != NULL)
-+    {
-+      /* First iterate over audit_list_string.  */
-+      while (*iter->audit_list_tail != '\0')
-+	{
-+	  /* Split audit list at colon.  */
-+	  size_t len = strcspn (iter->audit_list_tail, ":");
-+	  if (len > 0 && len < sizeof (iter->fname))
-+	    {
-+	      memcpy (iter->fname, iter->audit_list_tail, len);
-+	      iter->fname[len] = '\0';
-+	    }
-+	  else
-+	    /* Do not return this name to the caller.  */
-+	    iter->fname[0] = '\0';
-+
-+	  /* Skip over the substring and the following delimiter.  */
-+	  iter->audit_list_tail += len;
-+	  if (*iter->audit_list_tail == ':')
-+	    ++iter->audit_list_tail;
-+
-+	  /* If the name is valid, return it.  */
-+	  if (dso_name_valid_for_suid (iter->fname))
-+	    return iter->fname;
-+	  /* Otherwise, wrap around and try the next name.  */
-+	}
-+      /* Fall through to the procesing of audit_list.  */
-+    }
-+
-+  if (iter->previous == NULL)
-+    {
-+      if (audit_list == NULL)
-+	/* No pre-parsed audit list.  */
-+	return NULL;
-+      /* Start of audit list.  The first list element is at
-+	 audit_list->next (cyclic list).  */
-+      iter->previous = audit_list->next;
-+      return iter->previous->name;
-+    }
-+  if (iter->previous == audit_list)
-+    /* Cyclic list wrap-around.  */
-+    return NULL;
-+  iter->previous = iter->previous->next;
-+  return iter->previous->name;
-+}
-+
- #ifndef HAVE_INLINED_SYSCALLS
- /* Set nonzero during loading and initialization of executable and
-    libraries, cleared before the executable's entry point runs.  This
-@@ -1305,11 +1383,13 @@ of this helper program; chances are you did not intend to run this program.\n\
-     GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid ();
- 
-   /* If we have auditing DSOs to load, do it now.  */
--  if (__glibc_unlikely (audit_list != NULL))
-+  bool need_security_init = true;
-+  if (__glibc_unlikely (audit_list != NULL)
-+      || __glibc_unlikely (audit_list_string != NULL))
-     {
--      /* Iterate over all entries in the list.  The order is important.  */
-       struct audit_ifaces *last_audit = NULL;
--      struct audit_list *al = audit_list->next;
-+      struct audit_list_iter al_iter;
-+      audit_list_iter_init (&al_iter);
- 
-       /* Since we start using the auditing DSOs right away we need to
- 	 initialize the data structures now.  */
-@@ -1320,9 +1400,14 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	 use different values (especially the pointer guard) and will
- 	 fail later on.  */
-       security_init ();
-+      need_security_init = false;
- 
--      do
-+      while (true)
- 	{
-+	  const char *name = audit_list_iter_next (&al_iter);
-+	  if (name == NULL)
-+	    break;
-+
- 	  int tls_idx = GL(dl_tls_max_dtv_idx);
- 
- 	  /* Now it is time to determine the layout of the static TLS
-@@ -1331,7 +1416,7 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	     no DF_STATIC_TLS bit is set.  The reason is that we know
- 	     glibc will use the static model.  */
- 	  struct dlmopen_args dlmargs;
--	  dlmargs.fname = al->name;
-+	  dlmargs.fname = name;
- 	  dlmargs.map = NULL;
- 
- 	  const char *objname;
-@@ -1344,7 +1429,7 @@ of this helper program; chances are you did not intend to run this program.\n\
- 	    not_loaded:
- 	      _dl_error_printf ("\
- ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
--				al->name, err_str);
-+				name, err_str);
- 	      if (malloced)
- 		free ((char *) err_str);
- 	    }
-@@ -1448,10 +1533,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
- 		  goto not_loaded;
- 		}
- 	    }
--
--	  al = al->next;
- 	}
--      while (al != audit_list->next);
- 
-       /* If we have any auditing modules, announce that we already
- 	 have two objects loaded.  */
-@@ -1715,7 +1797,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
-   if (tcbp == NULL)
-     tcbp = init_tls ();
- 
--  if (__glibc_likely (audit_list == NULL))
-+  if (__glibc_likely (need_security_init))
-     /* Initialize security features.  But only if we have not done it
-        earlier.  */
-     security_init ();
-@@ -2346,9 +2428,7 @@ process_dl_audit (char *str)
-   char *p;
- 
-   while ((p = (strsep) (&str, ":")) != NULL)
--    if (p[0] != '\0'
--	&& (__builtin_expect (! __libc_enable_secure, 1)
--	    || strchr (p, '/') == NULL))
-+    if (dso_name_valid_for_suid (p))
-       {
- 	/* This is using the local malloc, not the system malloc.  The
- 	   memory can never be freed.  */
-@@ -2412,7 +2492,7 @@ process_envvars (enum mode *modep)
- 	      break;
- 	    }
- 	  if (memcmp (envline, "AUDIT", 5) == 0)
--	    process_dl_audit (&envline[6]);
-+	    audit_list_string = &envline[6];
- 	  break;
- 
- 	case 7:
--- 
-2.11.0
-
diff --git a/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch b/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
new file mode 100644
index 0000000..e12c843
--- /dev/null
+++ b/package/glibc/0005-Provide-a-C-version-of-iszero-that-does-not-use-__MA.patch
@@ -0,0 +1,210 @@
+From 45970aa26d1af87b016ef95b4b35c566aeb6e841 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
+Date: Tue, 22 Aug 2017 16:34:42 -0300
+Subject: [PATCH] Provide a C++ version of iszero that does not use __MATH_TG
+ (bug 21930)
+
+When signaling nans are enabled (with -fsignaling-nans), the C++ version
+of iszero uses the fpclassify macro, which is defined with __MATH_TG.
+However, when support for float128 is available, __MATH_TG uses the
+builtin __builtin_types_compatible_p, which is only available in C mode.
+
+This patch refactors the C++ version of iszero so that it uses function
+overloading to select between the floating-point types, instead of
+relying on fpclassify and __MATH_TG.
+
+Tested for powerpc64le, s390x, x86_64, and with build-many-glibcs.py.
+
+	[BZ #21930]
+	* math/math.h [defined __cplusplus && defined __SUPPORT_SNAN__]
+	(iszero): New C++ implementation that does not use
+	fpclassify/__MATH_TG/__builtin_types_compatible_p, when
+	signaling nans are enabled, since __builtin_types_compatible_p
+	is a C-only feature.
+	* math/test-math-iszero.cc: When __HAVE_DISTINCT_FLOAT128 is
+	defined, include ieee754_float128.h for access to the union and
+	member ieee854_float128.ieee.
+	[__HAVE_DISTINCT_FLOAT128] (do_test): Call check_float128.
+	[__HAVE_DISTINCT_FLOAT128] (check_float128): New function.
+	* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
+	(CXXFLAGS-test-math-iszero.cc): Add -mfloat128 to the build
+	options of test-math-zero on powerpc64le.
+
+(cherry picked from commit 42496114ec0eb7d6d039d05d4262e109951c600c)
+[Romain rebase on glibc 2.26]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h                          | 33 +++++++++++++--
+ math/test-math-iszero.cc             | 79 ++++++++++++++++++++++++++++++++++++
+ sysdeps/powerpc/powerpc64le/Makefile |  3 +-
+ 3 files changed, 110 insertions(+), 5 deletions(-)
+
+diff --git a/math/math.h b/math/math.h
+index 60dfa31..7c0fc6d 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -513,15 +513,40 @@ inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
+ #  endif
+ # else	/* __cplusplus */
+ extern "C++" {
++#  ifdef __SUPPORT_SNAN__
++inline int
++iszero (float __val)
++{
++  return __fpclassifyf (__val) == FP_ZERO;
++}
++inline int
++iszero (double __val)
++{
++  return __fpclassify (__val) == FP_ZERO;
++}
++inline int
++iszero (long double __val)
++{
++#   ifdef __NO_LONG_DOUBLE_MATH
++  return __fpclassify (__val) == FP_ZERO;
++#   else
++  return __fpclassifyl (__val) == FP_ZERO;
++#   endif
++}
++#   if __HAVE_DISTINCT_FLOAT128
++inline int
++iszero (_Float128 __val)
++{
++  return __fpclassifyf128 (__val) == FP_ZERO;
++}
++#   endif
++#  else
+ template <class __T> inline bool
+ iszero (__T __val)
+ {
+-#  ifdef __SUPPORT_SNAN__
+-  return fpclassify (__val) == FP_ZERO;
+-#  else
+   return __val == 0;
+-#  endif
+ }
++#  endif
+ } /* extern C++ */
+ # endif	/* __cplusplus */
+ #endif /* Use IEC_60559_BFP_EXT.  */
+diff --git a/math/test-math-iszero.cc b/math/test-math-iszero.cc
+index 027e972..5c07261 100644
+--- a/math/test-math-iszero.cc
++++ b/math/test-math-iszero.cc
+@@ -22,6 +22,13 @@
+ 
+ #include <limits>
+ 
++/* Support for _Float128 in std::numeric_limits is limited.
++   Include ieee754_float128.h and use the bitfields in the union
++   ieee854_float128.ieee_nan to build corner-case inputs.  */
++#if __HAVE_DISTINCT_FLOAT128
++# include <ieee754_float128.h>
++#endif
++
+ static bool errors;
+ 
+ static void
+@@ -72,12 +79,84 @@ check_type ()
+          std::numeric_limits<T>::has_denorm == std::denorm_absent);
+ }
+ 
++#if __HAVE_DISTINCT_FLOAT128
++static void
++check_float128 ()
++{
++  ieee854_float128 q;
++
++  q.d = 0.0Q;
++  CHECK (iszero (q.d), 1);
++  q.d = -0.0Q;
++  CHECK (iszero (q.d), 1);
++  q.d = 1.0Q;
++  CHECK (iszero (q.d), 0);
++  q.d = -1.0Q;
++  CHECK (iszero (q.d), 0);
++
++  /* Normal min.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x0001;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++
++  /* Normal max.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFE;
++  q.ieee.mantissa0 = 0xFFFF;
++  q.ieee.mantissa1 = 0xFFFFFFFF;
++  q.ieee.mantissa2 = 0xFFFFFFFF;
++  q.ieee.mantissa3 = 0xFFFFFFFF;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++
++  /* Infinity.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x7FFF;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000000;
++  CHECK (iszero (q.d), 0);
++
++  /* Quiet NaN.  */
++  q.ieee_nan.quiet_nan = 1;
++  q.ieee_nan.mantissa0 = 0x0000;
++  CHECK (iszero (q.d), 0);
++
++  /* Signaling NaN.  */
++  q.ieee_nan.quiet_nan = 0;
++  q.ieee_nan.mantissa0 = 0x4000;
++  CHECK (iszero (q.d), 0);
++
++  /* Denormal min.  */
++  q.ieee.negative = 0;
++  q.ieee.exponent = 0x0000;
++  q.ieee.mantissa0 = 0x0000;
++  q.ieee.mantissa1 = 0x00000000;
++  q.ieee.mantissa2 = 0x00000000;
++  q.ieee.mantissa3 = 0x00000001;
++  CHECK (iszero (q.d), 0);
++  q.ieee.negative = 1;
++  CHECK (iszero (q.d), 0);
++}
++#endif
++
+ static int
+ do_test (void)
+ {
+   check_type<float> ();
+   check_type<double> ();
+   check_type<long double> ();
++#if __HAVE_DISTINCT_FLOAT128
++  check_float128 ();
++#endif
+   return errors;
+ }
+ 
+diff --git a/sysdeps/powerpc/powerpc64le/Makefile b/sysdeps/powerpc/powerpc64le/Makefile
+index 19adbfa..dea2290 100644
+--- a/sysdeps/powerpc/powerpc64le/Makefile
++++ b/sysdeps/powerpc/powerpc64le/Makefile
+@@ -17,7 +17,8 @@ $(foreach suf,$(all-object-suffixes),$(objpfx)test-float128%$(suf)): CFLAGS += -
+ $(foreach suf,$(all-object-suffixes),$(objpfx)test-ifloat128%$(suf)): CFLAGS += -mfloat128
+ CFLAGS-libm-test-support-float128.c += -mfloat128
+ CFLAGS-test-math-issignaling.cc += -mfloat128
+-$(objpfx)test-float128% $(objpfx)test-ifloat128%: \
++CFLAGS-test-math-iszero.cc += -mfloat128
++$(objpfx)test-float128% $(objpfx)test-ifloat128% $(objpfx)test-math-iszero: \
+   gnulib-tests += $(f128-loader-link)
+ endif
+ 
+-- 
+2.9.5
+
diff --git a/package/glibc/0005-fix-binutils-2-29-build.patch b/package/glibc/0005-fix-binutils-2-29-build.patch
deleted file mode 100644
index 47fcd2f..0000000
--- a/package/glibc/0005-fix-binutils-2-29-build.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From: H.J. Lu <hjl.tools@gmail.com>
-Date: Fri, 23 Jun 2017 21:38:46 +0000 (-0700)
-Subject: Avoid .symver on common symbols [BZ #21666]
-X-Git-Tag: glibc-2.26~241
-X-Git-Url: https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff_plain;h=388b4f1a02f3a801965028bbfcd48d905638b797
-
-Avoid .symver on common symbols [BZ #21666]
-
-The .symver directive on common symbol just creates a new common symbol,
-not an alias and the newer assembler with the bug fix for
-
-https://sourceware.org/bugzilla/show_bug.cgi?id=21661
-
-will issue an error.  Before the fix, we got
-
-$ readelf -sW libc.so | grep "loc[12s]"
-  5109: 00000000003a0608     8 OBJECT  LOCAL  DEFAULT   36 loc1
-  5188: 00000000003a0610     8 OBJECT  LOCAL  DEFAULT   36 loc2
-  5455: 00000000003a0618     8 OBJECT  LOCAL  DEFAULT   36 locs
-  6575: 00000000003a05f0     8 OBJECT  GLOBAL DEFAULT   36 locs at GLIBC_2.2.5
-  7156: 00000000003a05f8     8 OBJECT  GLOBAL DEFAULT   36 loc1 at GLIBC_2.2.5
-  7312: 00000000003a0600     8 OBJECT  GLOBAL DEFAULT   36 loc2 at GLIBC_2.2.5
-
-in libc.so.  The versioned loc1, loc2 and locs have the wrong addresses.
-After the fix, we got
-
-$ readelf -sW libc.so | grep "loc[12s]"
-  6570: 000000000039e3b8     8 OBJECT  GLOBAL DEFAULT   34 locs at GLIBC_2.2.5
-  7151: 000000000039e3c8     8 OBJECT  GLOBAL DEFAULT   34 loc1 at GLIBC_2.2.5
-  7307: 000000000039e3c0     8 OBJECT  GLOBAL DEFAULT   34 loc2 at GLIBC_2.2.5
-
-	[BZ #21666]
-	* misc/regexp.c (loc1): Add __attribute__ ((nocommon));
-	(loc2): Likewise.
-	(locs): Likewise.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-[Backported from upstream commit
-388b4f1a02f3a801965028bbfcd48d905638b797, to fix the build with
-binutils 2.29.]
----
-diff --git a/misc/regexp.c b/misc/regexp.c
-index 19d76c0..eaea7c3 100644
---- a/misc/regexp.c
-+++ b/misc/regexp.c
-@@ -29,14 +29,15 @@
- 
- #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
- 
--/* Define the variables used for the interface.  */
--char *loc1;
--char *loc2;
-+/* Define the variables used for the interface.  Avoid .symver on common
-+   symbol, which just creates a new common symbol, not an alias.  */
-+char *loc1 __attribute__ ((nocommon));
-+char *loc2 __attribute__ ((nocommon));
- compat_symbol (libc, loc1, loc1, GLIBC_2_0);
- compat_symbol (libc, loc2, loc2, GLIBC_2_0);
- 
- /* Although we do not support the use we define this variable as well.  */
--char *locs;
-+char *locs __attribute__ ((nocommon));
- compat_symbol (libc, locs, locs, GLIBC_2_0);
- 
- 
diff --git a/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch b/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
new file mode 100644
index 0000000..37807c4
--- /dev/null
+++ b/package/glibc/0006-Let-fpclassify-use-the-builtin-when-optimizing-for-s.patch
@@ -0,0 +1,63 @@
+From 33f54cf4f81a51e5c8cbfb2408edd439bdee9435 Mon Sep 17 00:00:00 2001
+From: "Gabriel F. T. Gomes" <gabriel@inconstante.eti.br>
+Date: Wed, 20 Sep 2017 15:10:26 -0300
+Subject: [PATCH] Let fpclassify use the builtin when optimizing for size in
+ C++ mode (bug 22146)
+
+When optimization for size is on (-Os), fpclassify does not use the
+type-generic __builtin_fpclassify builtin, instead it uses __MATH_TG.
+However, when library support for float128 is available, __MATH_TG uses
+__builtin_types_compatible_p, which is not available in C++ mode.
+
+On the other hand, libstdc++ undefines (in cmath) many macros from
+math.h, including fpclassify, so that it can provide its own functions.
+However, during its configure tests, libstdc++ just tests for the
+availability of the macros (it does not undefine them, nor does it
+provide its own functions).
+
+Finally, when libstdc++ is configured with optimization for size
+enabled, its configure tests include math.h and get the definition of
+fpclassify that uses __MATH_TG (and __builtin_types_compatible_p).
+Since libstdc++ does not undefine the macros during its configure tests,
+they fail.
+
+This patch lets fpclassify use the builtin in C++ mode, even when
+optimization for size is on.  This allows the configure test in
+libstdc++ to work.
+
+Tested for powerpc64le and x86_64.
+
+	[BZ #22146]
+	math/math.h: Let fpclassify use the builtin in C++ mode, even
+	when optimazing for size.
+
+(cherry picked from commit c5c4a626098ec884b8527356abdf2a4bb7b6bf27)
+
+[Romain rebase on glibc 2.26)
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ math/math.h | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/math/math.h b/math/math.h
+index 7c0fc6d..f9348ec 100644
+--- a/math/math.h
++++ b/math/math.h
+@@ -402,7 +402,13 @@ enum
+ 
+ /* Return number of classification appropriate for X.  */
+ # if __GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__			      \
+-     && !defined __OPTIMIZE_SIZE__
++     && (!defined __OPTIMIZE_SIZE__ || defined __cplusplus)
++     /* The check for __cplusplus allows the use of the builtin, even
++	when optimization for size is on.  This is provided for
++	libstdc++, only to let its configure test work when it is built
++	with -Os.  No further use of this definition of fpclassify is
++	expected in C++ mode, since libstdc++ provides its own version
++	of fpclassify in cmath (which undefines fpclassify).  */
+ #  define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE,	      \
+      FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
+ # else
+-- 
+2.9.5
+
diff --git a/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch b/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
deleted file mode 100644
index eebf89e..0000000
--- a/package/glibc/0006-i686-Add-missing-IS_IN-libc-guards-to-vectorized-strcspn.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From patchwork Wed Jun 14 06:19:50 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: i686: Add missing IS_IN (libc) guards to vectorized strcspn
-From: Florian Weimer <fweimer@redhat.com>
-X-Patchwork-Id: 21003
-Message-Id: <20170614061950.400FE4010728F@oldenburg.str.redhat.com>
-To: libc-alpha at sourceware.org
-Date: Wed, 14 Jun 2017 08:19:50 +0200
-
-Since commit d957c4d3fa48d685ff2726c605c988127ef99395 (i386: Compile
-rtld-*.os with -mno-sse -mno-mmx -mfpmath=387), vector intrinsics can
-no longer be used in ld.so, even if the compiled code never makes it
-into the final ld.so link.  This commit adds the missing IS_IN (libc)
-guard to the SSE 4.2 strcspn implementation, so that it can be used from
-ld.so in the future.
-
-2017-06-14  Florian Weimer  <fweimer@redhat.com>
-
-	* sysdeps/i386/i686/multiarch/strcspn-c.c: Add IS_IN (libc) guard.
-	* sysdeps/i386/i686/multiarch/varshift.c: Likewise.
-
-[Thomas: fixes a build issue of glibc on x86:
-sysdeps/x86_64/multiarch/varshift.h:26:1: error: SSE vector return without SSE enabled changes the ABI]
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-diff --git a/sysdeps/i386/i686/multiarch/strcspn-c.c b/sysdeps/i386/i686/multiarch/strcspn-c.c
-index 6d61e19..ec230fb 100644
---- a/sysdeps/i386/i686/multiarch/strcspn-c.c
-+++ b/sysdeps/i386/i686/multiarch/strcspn-c.c
-@@ -1,2 +1,4 @@
--#define __strcspn_sse2 __strcspn_ia32
--#include <sysdeps/x86_64/multiarch/strcspn-c.c>
-+#if IS_IN (libc)
-+# define __strcspn_sse2 __strcspn_ia32
-+# include <sysdeps/x86_64/multiarch/strcspn-c.c>
-+#endif
-diff --git a/sysdeps/i386/i686/multiarch/varshift.c b/sysdeps/i386/i686/multiarch/varshift.c
-index 7760b96..6742a35 100644
---- a/sysdeps/i386/i686/multiarch/varshift.c
-+++ b/sysdeps/i386/i686/multiarch/varshift.c
-@@ -1 +1,3 @@
--#include <sysdeps/x86_64/multiarch/varshift.c>
-+#if IS_IN (libc)
-+# include <sysdeps/x86_64/multiarch/varshift.c>
-+#endif
diff --git a/package/glibc/0006-sh4-trap.patch b/package/glibc/0006-sh4-trap.patch
deleted file mode 100644
index c986ac3..0000000
--- a/package/glibc/0006-sh4-trap.patch
+++ /dev/null
@@ -1,318 +0,0 @@
-commit db3d848e154b00071f4a5e729d5884efad410109
-Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date:   Wed Mar 15 15:44:59 2017 -0300
-
-    Build divdi3 only for architecture that required it
-    
-    As noted in [1], divdi3 object is only exported in a handful ABIs
-    (i386, m68k, powerpc32, s390-32, and ia64), however it is built
-    for all current architectures regardless.
-    
-    This patch refact the make rules for this object to so only the
-    aforementioned architectures that actually require it builds it.
-    
-    Also, to avoid internal PLT calls to the exported symbol from the
-    module, glibc uses an internal header (symbol-hacks.h) which is
-    unrequired (and in fact breaks the build for architectures that
-    intend to get symbol definitions from libgcc.a).  The patch also
-    changes it to create its own header (divdi3-symbol-hacks.h) and
-    adjust the architectures that require it accordingly.
-    
-    I checked the build/check (with run-built-tests=no) on the
-    following architectures (which I think must cover all supported
-    ABI/builds) using GCC 6.3:
-    
-    aarch64-linux-gnu
-    alpha-linux-gnu
-    arm-linux-gnueabihf
-    hppa-linux-gnu
-    ia64-linux-gnu
-    m68k-linux-gnu
-    microblaze-linux-gnu
-    mips64-n32-linux-gnu
-    mips-linux-gnu
-    mips64-linux-gnu
-    nios2-linux-gnu
-    powerpc-linux-gnu
-    powerpc-linux-gnu-power4
-    powerpc64-linux-gnu
-    powerpc64le-linux-gnu
-    s390x-linux-gnu
-    s390-linux-gnu
-    sh4-linux-gnu
-    sh4-linux-gnu-soft
-    sparc64-linux-gnu
-    sparcv9-linux-gnu
-    tilegx-linux-gnu
-    tilegx-linux-gnu-32
-    tilepro-linux-gnu
-    x86_64-linux-gnu
-    x86_64-linux-gnu-x32
-    i686-linux-gnu
-    
-    I only saw one regression on sparcv9-linux-gnu (extra PLT call to
-    .udiv) which I address in next patch in the set.  It also correctly
-    build SH with GCC 7.0.1 (without any regression from c89721e25d).
-    
-    [1] https://sourceware.org/ml/libc-alpha/2017-03/msg00243.html
-    
-Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
-
-diff --git a/sysdeps/i386/symbol-hacks.h b/sysdeps/i386/symbol-hacks.h
-new file mode 100644
-index 0000000000..36a13c83f7
---- /dev/null
-+++ b/sysdeps/i386/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  i386 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/m68k/symbol-hacks.h b/sysdeps/m68k/symbol-hacks.h
-new file mode 100644
-index 0000000000..e449d29810
---- /dev/null
-+++ b/sysdeps/m68k/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  m68k 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
-new file mode 100644
-index 0000000000..dbb3141621
---- /dev/null
-+++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  powerpc 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/s390/s390-32/symbol-hacks.h b/sysdeps/s390/s390-32/symbol-hacks.h
-new file mode 100644
-index 0000000000..585c42365a
---- /dev/null
-+++ b/sysdeps/s390/s390-32/symbol-hacks.h
-@@ -0,0 +1,21 @@
-+/* Hacks needed for symbol manipulation.  s390 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 <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
-+
-+#include_next "symbol-hacks.h"
-diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
-index 6aac0dfe15..4080b8c966 100644
---- a/sysdeps/unix/sysv/linux/i386/Makefile
-+++ b/sysdeps/unix/sysv/linux/i386/Makefile
-@@ -26,6 +26,11 @@ endif
- 
- ifeq ($(subdir),csu)
- sysdep-dl-routines += sysdep
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
- endif
- 
- ifeq ($(subdir),nptl)
-diff --git a/sysdeps/unix/sysv/linux/m68k/Makefile b/sysdeps/unix/sysv/linux/m68k/Makefile
-index 5c50ce6927..ce1f696a6f 100644
---- a/sysdeps/unix/sysv/linux/m68k/Makefile
-+++ b/sysdeps/unix/sysv/linux/m68k/Makefile
-@@ -4,6 +4,11 @@ m68k-syntax-flag = -DMOTOROLA_SYNTAX
- 
- ifeq ($(subdir),csu)
- sysdep_routines += m68k-helpers
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
- endif
- 
- ifeq ($(subdir),misc)
-diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-index 3d6c150582..1f45659ed1 100644
---- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
-@@ -1,2 +1,10 @@
- # See Makeconfig regarding the use of default-abi.
- default-abi := 32
-+
-+ifeq ($(subdir),csu)
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
-+endif
-diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-index da3b3c76b4..fd8cf92633 100644
---- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
-@@ -21,3 +21,11 @@ endif
- ifeq ($(subdir),stdlib)
- sysdep_routines += __makecontext_ret
- endif
-+
-+ifeq ($(subdir),csu)
-+ifeq (yes,$(build-shared))
-+sysdep_routines += divdi3
-+shared-only-routines += divdi3
-+CPPFLAGS-divdi3.c = -Din_divdi3_c
-+endif
-+endif
-diff --git a/sysdeps/wordsize-32/Makefile b/sysdeps/wordsize-32/Makefile
-deleted file mode 100644
-index 82beac44ed..0000000000
---- a/sysdeps/wordsize-32/Makefile
-+++ /dev/null
-@@ -1,7 +0,0 @@
--ifeq ($(subdir),csu)
--ifeq (yes,$(build-shared))
--sysdep_routines += divdi3
--shared-only-routines += divdi3
--CPPFLAGS-divdi3.c = -Din_divdi3_c
--endif
--endif
-diff --git a/sysdeps/wordsize-32/divdi3-symbol-hacks.h b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
-new file mode 100644
-index 0000000000..6c90cb796d
---- /dev/null
-+++ b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
-@@ -0,0 +1,31 @@
-+/* Hacks needed for divdi3 symbol manipulation.
-+   Copyright (C) 2004-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/>.  */
-+
-+/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
-+   __moddi3, and __umoddi3.  These functions are exported and
-+   therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
-+   task which might not be worth it so we play tricks with the
-+   assembler.
-+   Note: in_divdi3_c is only used to avoid symbol alias on divdi3
-+   build itself.  */
-+#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
-+asm ("__divdi3 = __divdi3_internal");
-+asm ("__udivdi3 = __udivdi3_internal");
-+asm ("__moddi3 = __moddi3_internal");
-+asm ("__umoddi3 = __umoddi3_internal");
-+#endif
-diff --git a/sysdeps/wordsize-32/symbol-hacks.h b/sysdeps/wordsize-32/symbol-hacks.h
-deleted file mode 100644
-index 0aec1e0b97..0000000000
---- a/sysdeps/wordsize-32/symbol-hacks.h
-+++ /dev/null
-@@ -1,31 +0,0 @@
--/* Hacks needed for symbol manipulation.
--   Copyright (C) 2004-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_next "symbol-hacks.h"
--
--/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
--   __moddi3, and __umoddi3.  These functions are exported and
--   therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
--   task which might not be worth it so we play tricks with the
--   assembler.  */
--#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
--asm ("__divdi3 = __divdi3_internal");
--asm ("__udivdi3 = __udivdi3_internal");
--asm ("__moddi3 = __moddi3_internal");
--asm ("__umoddi3 = __umoddi3_internal");
--#endif
diff --git a/package/glibc/glibc.hash b/package/glibc/glibc.hash
index daaf014..afae10f 100644
--- a/package/glibc/glibc.hash
+++ b/package/glibc/glibc.hash
@@ -1,2 +1,2 @@
 # Locally calculated after checking pgp signature (glibc)
-sha256	067bd9bb3390e79aa45911537d13c3721f1d9d3769931a30c2681bfee66f23a0	glibc-2.25.tar.xz
+sha256	e54e0a934cd2bc94429be79da5e9385898d2306b9eaf3c92d5a77af96190f6bd	glibc-2.26.tar.xz
diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index c9a6579..f5d0282 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-GLIBC_VERSION = 2.25
+GLIBC_VERSION = 2.26
 GLIBC_SITE = $(BR2_GNU_MIRROR)/libc
 GLIBC_SOURCE = glibc-$(GLIBC_VERSION).tar.xz
 GLIBC_SRC_SUBDIR = .
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 0/7] glibc: " Romain Naour
@ 2017-09-23 21:28   ` Romain Naour
  0 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-23 21:28 UTC (permalink / raw)
  To: buildroot

This series was send twice... sorry for the noise.

Romain

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
@ 2017-09-24  9:16   ` Bernd Kuhls
  0 siblings, 0 replies; 28+ messages in thread
From: Bernd Kuhls @ 2017-09-24  9:16 UTC (permalink / raw)
  To: buildroot

Am Sat, 23 Sep 2017 23:24:06 +0200 schrieb Romain Naour:

> -GLIBC_VERSION = 2.25
> +GLIBC_VERSION = 2.26

Hi,

Tested-by: Bernd Kuhls <bernd.kuhls@t-online.de>

Build-tested using these defconfigs:

BR2_x86_64=y
BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_PACKAGE_KODI=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_DRI_DRIVER_I965=y
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_PY_ONLY=y

BR2_powerpc64le=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_PACKAGE_KODI=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST=y
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_PY_ONLY=y

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
@ 2017-09-27 20:29   ` Yann E. MORIN
  0 siblings, 0 replies; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 20:29 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> In file included from ../../../libgcc/unwind-dw2.c:403:0:
> ./md-unwind-support.h: In function ??aarch64_fallback_frame_state??:
> ./md-unwind-support.h:58:21: error: field ??uc??  has incomplete type
>      struct ucontext uc;
>                      ^~
> 
> The fix is already included in gcc 7.2 release [1]. We have to backport it to
> all older gcc release since it's not included in any stable release yet.
> 
> [1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=14c2f22a1877f6b60a2f7c2f83ffb032759456a6
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> ---
> v3: use upstream commit for gcc 5 and 6. (Yann)
> ---
>  ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 190 ++++++++++++++++++++
>  ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
>  ...t_t-not-struct-ucontext-in-linux-unwind.h.patch | 192 +++++++++++++++++++++
>  3 files changed, 574 insertions(+)
>  create mode 100644 package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
>  create mode 100644 package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
>  create mode 100644 package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> 
> diff --git a/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> new file mode 100644
> index 0000000..526346c
> --- /dev/null
> +++ b/package/gcc/4.9.4/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> @@ -0,0 +1,190 @@
> +From b7e85069238c40eae54d0ca03ab6d5470d1815f9 Mon Sep 17 00:00:00 2001
> +From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Tue, 4 Jul 2017 10:25:10 +0000
> +Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
> +
> +Current glibc no longer gives the ucontext_t type the tag struct
> +ucontext, to conform with POSIX namespace rules.  This requires
> +various linux-unwind.h files in libgcc, that were previously using
> +struct ucontext, to be fixed to use ucontext_t instead.  This is
> +similar to the removal of the struct siginfo tag from siginfo_t some
> +years ago.
> +
> +This patch changes those files to use ucontext_t instead.  As the
> +standard name that should be unconditionally safe, so this is not
> +restricted to architectures supported by glibc, or conditioned on the
> +glibc version.
> +
> +Tested compilation together with current glibc with glibc's
> +build-many-glibcs.py.
> +
> +	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
> +	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
> +	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
> +	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
> +	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
> +	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
> +	config/pa/linux-unwind.h (pa32_fallback_frame_state),
> +	config/sh/linux-unwind.h (sh_fallback_frame_state),
> +	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
> +	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
> +	ucontext_t instead of struct ucontext.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
> +[Romain backport from gcc-5-branch]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libgcc/config/aarch64/linux-unwind.h | 2 +-
> + libgcc/config/alpha/linux-unwind.h   | 2 +-
> + libgcc/config/bfin/linux-unwind.h    | 2 +-
> + libgcc/config/i386/linux-unwind.h    | 4 ++--
> + libgcc/config/m68k/linux-unwind.h    | 2 +-
> + libgcc/config/nios2/linux-unwind.h   | 2 +-
> + libgcc/config/pa/linux-unwind.h      | 2 +-
> + libgcc/config/sh/linux-unwind.h      | 2 +-
> + libgcc/config/tilepro/linux-unwind.h | 2 +-
> + libgcc/config/xtensa/linux-unwind.h  | 2 +-
> + 10 files changed, 11 insertions(+), 11 deletions(-)
> +
> +diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
> +index 6b5b3cd..d13dc34 100644
> +--- a/libgcc/config/aarch64/linux-unwind.h
> ++++ b/libgcc/config/aarch64/linux-unwind.h
> +@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe
> +   {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   };
> + 
> +   struct rt_sigframe *rt_;
> +diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
> +index b5bfd1c..166d3d2 100644
> +--- a/libgcc/config/alpha/linux-unwind.h
> ++++ b/libgcc/config/alpha/linux-unwind.h
> +@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       sc = &rt_->uc.uc_mcontext;
> +     }
> +diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
> +index dc58f0a..8b94568 100644
> +--- a/libgcc/config/bfin/linux-unwind.h
> ++++ b/libgcc/config/bfin/linux-unwind.h
> +@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
> + 	void *puc;
> + 	char retcode[8];
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> + 
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
> +index 7986928..a9d621c 100644
> +--- a/libgcc/config/i386/linux-unwind.h
> ++++ b/libgcc/config/i386/linux-unwind.h
> +@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
> +   if (*(unsigned char *)(pc+0) == 0x48
> +       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
> +     {
> +-      struct ucontext *uc_ = context->cfa;
> ++      ucontext_t *uc_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +          because it does not alias anything.  */
> +@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
> + 	siginfo_t *pinfo;
> + 	void *puc;
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
> +index 1ba2a0c4..d67767e 100644
> +--- a/libgcc/config/m68k/linux-unwind.h
> ++++ b/libgcc/config/m68k/linux-unwind.h
> +@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> + /* <sys/ucontext.h> is unfortunately broken right now.  */
> + struct uw_ucontext {
> + 	unsigned long	  uc_flags;
> +-	struct ucontext  *uc_link;
> ++	ucontext_t	 *uc_link;
> + 	stack_t		  uc_stack;
> + 	mcontext_t	  uc_mcontext;
> + 	unsigned long	  uc_filler[80];
> +diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
> +index ba4bd80..8978868 100644
> +--- a/libgcc/config/nios2/linux-unwind.h
> ++++ b/libgcc/config/nios2/linux-unwind.h
> +@@ -38,7 +38,7 @@ struct nios2_mcontext {
> + 
> + struct nios2_ucontext {
> +   unsigned long uc_flags;
> +-  struct ucontext *uc_link;
> ++  ucontext_t *uc_link;
> +   stack_t uc_stack;
> +   struct nios2_mcontext uc_mcontext;
> +   sigset_t uc_sigmask;	/* mask last for extensibility */
> +diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
> +index 4a3cfff..d2ac437 100644
> +--- a/libgcc/config/pa/linux-unwind.h
> ++++ b/libgcc/config/pa/linux-unwind.h
> +@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
> +   struct sigcontext *sc;
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *frame;
> + 
> +   /* rt_sigreturn trampoline:
> +diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
> +index 4875706..671bde7 100644
> +--- a/libgcc/config/sh/linux-unwind.h
> ++++ b/libgcc/config/sh/linux-unwind.h
> +@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
> +index 27481cf..c24d58c 100644
> +--- a/libgcc/config/tilepro/linux-unwind.h
> ++++ b/libgcc/config/tilepro/linux-unwind.h
> +@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe {
> +     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* Return if this is not a signal handler.  */
> +diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
> +index 6832d0b..cb15b4c 100644
> +--- a/libgcc/config/xtensa/linux-unwind.h
> ++++ b/libgcc/config/xtensa/linux-unwind.h
> +@@ -63,7 +63,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
> + 
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* movi a2, __NR_rt_sigreturn; syscall */
> +-- 
> +2.9.5
> +
> diff --git a/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> new file mode 100644
> index 0000000..4c3385d
> --- /dev/null
> +++ b/package/gcc/5.4.0/943-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> @@ -0,0 +1,192 @@
> +From c287e88cc3743bfa7e5719bc4dee327aa3950051 Mon Sep 17 00:00:00 2001
> +From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Tue, 4 Jul 2017 10:25:10 +0000
> +Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
> +
> +Current glibc no longer gives the ucontext_t type the tag struct
> +ucontext, to conform with POSIX namespace rules.  This requires
> +various linux-unwind.h files in libgcc, that were previously using
> +struct ucontext, to be fixed to use ucontext_t instead.  This is
> +similar to the removal of the struct siginfo tag from siginfo_t some
> +years ago.
> +
> +This patch changes those files to use ucontext_t instead.  As the
> +standard name that should be unconditionally safe, so this is not
> +restricted to architectures supported by glibc, or conditioned on the
> +glibc version.
> +
> +Tested compilation together with current glibc with glibc's
> +build-many-glibcs.py.
> +
> +	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
> +	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
> +	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
> +	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
> +	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
> +	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
> +	config/pa/linux-unwind.h (pa32_fallback_frame_state),
> +	config/sh/linux-unwind.h (sh_fallback_frame_state),
> +	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
> +	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
> +	ucontext_t instead of struct ucontext.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 249958 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +(cherry picked from commit ecf0d1a107133c715763940c2b197aa814710e1b)
> +[Romain rebase on 5.4]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libgcc/config/aarch64/linux-unwind.h | 2 +-
> + libgcc/config/alpha/linux-unwind.h   | 2 +-
> + libgcc/config/bfin/linux-unwind.h    | 2 +-
> + libgcc/config/i386/linux-unwind.h    | 4 ++--
> + libgcc/config/m68k/linux-unwind.h    | 2 +-
> + libgcc/config/nios2/linux-unwind.h   | 2 +-
> + libgcc/config/pa/linux-unwind.h      | 2 +-
> + libgcc/config/sh/linux-unwind.h      | 2 +-
> + libgcc/config/tilepro/linux-unwind.h | 2 +-
> + libgcc/config/xtensa/linux-unwind.h  | 2 +-
> + 10 files changed, 11 insertions(+), 11 deletions(-)
> +
> +diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
> +index 86d17b1..909f68f 100644
> +--- a/libgcc/config/aarch64/linux-unwind.h
> ++++ b/libgcc/config/aarch64/linux-unwind.h
> +@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe
> +   {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   };
> + 
> +   struct rt_sigframe *rt_;
> +diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
> +index d65474f..9a226b1 100644
> +--- a/libgcc/config/alpha/linux-unwind.h
> ++++ b/libgcc/config/alpha/linux-unwind.h
> +@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       sc = &rt_->uc.uc_mcontext;
> +     }
> +diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
> +index 0c270e4..7fa95d2 100644
> +--- a/libgcc/config/bfin/linux-unwind.h
> ++++ b/libgcc/config/bfin/linux-unwind.h
> +@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
> + 	void *puc;
> + 	char retcode[8];
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> + 
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
> +index e54bf73..d35fc45 100644
> +--- a/libgcc/config/i386/linux-unwind.h
> ++++ b/libgcc/config/i386/linux-unwind.h
> +@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
> +   if (*(unsigned char *)(pc+0) == 0x48
> +       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
> +     {
> +-      struct ucontext *uc_ = context->cfa;
> ++      ucontext_t *uc_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +          because it does not alias anything.  */
> +@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
> + 	siginfo_t *pinfo;
> + 	void *puc;
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
> +index fb79a4d..b2f5ea4 100644
> +--- a/libgcc/config/m68k/linux-unwind.h
> ++++ b/libgcc/config/m68k/linux-unwind.h
> +@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> + /* <sys/ucontext.h> is unfortunately broken right now.  */
> + struct uw_ucontext {
> + 	unsigned long	  uc_flags;
> +-	struct ucontext  *uc_link;
> ++	ucontext_t	 *uc_link;
> + 	stack_t		  uc_stack;
> + 	mcontext_t	  uc_mcontext;
> + 	unsigned long	  uc_filler[80];
> +diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
> +index dff1c20..1d88afe 100644
> +--- a/libgcc/config/nios2/linux-unwind.h
> ++++ b/libgcc/config/nios2/linux-unwind.h
> +@@ -38,7 +38,7 @@ struct nios2_mcontext {
> + 
> + struct nios2_ucontext {
> +   unsigned long uc_flags;
> +-  struct ucontext *uc_link;
> ++  ucontext_t *uc_link;
> +   stack_t uc_stack;
> +   struct nios2_mcontext uc_mcontext;
> +   sigset_t uc_sigmask;	/* mask last for extensibility */
> +diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
> +index 0149468..9157535 100644
> +--- a/libgcc/config/pa/linux-unwind.h
> ++++ b/libgcc/config/pa/linux-unwind.h
> +@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
> +   struct sigcontext *sc;
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *frame;
> + 
> +   /* rt_sigreturn trampoline:
> +diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
> +index e63091f..67033f0 100644
> +--- a/libgcc/config/sh/linux-unwind.h
> ++++ b/libgcc/config/sh/linux-unwind.h
> +@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
> +index fd83ba7..e3c9ef0 100644
> +--- a/libgcc/config/tilepro/linux-unwind.h
> ++++ b/libgcc/config/tilepro/linux-unwind.h
> +@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe {
> +     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* Return if this is not a signal handler.  */
> +diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
> +index 9daf738..ff6b663 100644
> +--- a/libgcc/config/xtensa/linux-unwind.h
> ++++ b/libgcc/config/xtensa/linux-unwind.h
> +@@ -64,7 +64,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
> + 
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* movi a2, __NR_rt_sigreturn; syscall */
> +-- 
> +2.9.5
> +
> diff --git a/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> new file mode 100644
> index 0000000..a2a2ea0
> --- /dev/null
> +++ b/package/gcc/6.4.0/942-Use-ucontext_t-not-struct-ucontext-in-linux-unwind.h.patch
> @@ -0,0 +1,192 @@
> +From 35d8ca22047f101a700abb29cffbf03b81278a2b Mon Sep 17 00:00:00 2001
> +From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Tue, 4 Jul 2017 10:23:57 +0000
> +Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
> +
> +Current glibc no longer gives the ucontext_t type the tag struct
> +ucontext, to conform with POSIX namespace rules.  This requires
> +various linux-unwind.h files in libgcc, that were previously using
> +struct ucontext, to be fixed to use ucontext_t instead.  This is
> +similar to the removal of the struct siginfo tag from siginfo_t some
> +years ago.
> +
> +This patch changes those files to use ucontext_t instead.  As the
> +standard name that should be unconditionally safe, so this is not
> +restricted to architectures supported by glibc, or conditioned on the
> +glibc version.
> +
> +Tested compilation together with current glibc with glibc's
> +build-many-glibcs.py.
> +
> +	* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
> +	config/alpha/linux-unwind.h (alpha_fallback_frame_state),
> +	config/bfin/linux-unwind.h (bfin_fallback_frame_state),
> +	config/i386/linux-unwind.h (x86_64_fallback_frame_state,
> +	x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
> +	uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
> +	config/pa/linux-unwind.h (pa32_fallback_frame_state),
> +	config/sh/linux-unwind.h (sh_fallback_frame_state),
> +	config/tilepro/linux-unwind.h (tile_fallback_frame_state),
> +	config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
> +	ucontext_t instead of struct ucontext.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 249957 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +(cherry picked from commit b685411208e0aaa79190d54faf945763514706b8)
> +[Romain rebase on gcc 6.4]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libgcc/config/aarch64/linux-unwind.h | 2 +-
> + libgcc/config/alpha/linux-unwind.h   | 2 +-
> + libgcc/config/bfin/linux-unwind.h    | 2 +-
> + libgcc/config/i386/linux-unwind.h    | 4 ++--
> + libgcc/config/m68k/linux-unwind.h    | 2 +-
> + libgcc/config/nios2/linux-unwind.h   | 2 +-
> + libgcc/config/pa/linux-unwind.h      | 2 +-
> + libgcc/config/sh/linux-unwind.h      | 2 +-
> + libgcc/config/tilepro/linux-unwind.h | 2 +-
> + libgcc/config/xtensa/linux-unwind.h  | 2 +-
> + 10 files changed, 11 insertions(+), 11 deletions(-)
> +
> +diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
> +index 4512efb..06de45a 100644
> +--- a/libgcc/config/aarch64/linux-unwind.h
> ++++ b/libgcc/config/aarch64/linux-unwind.h
> +@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe
> +   {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   };
> + 
> +   struct rt_sigframe *rt_;
> +diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
> +index bdbba4a..e84812e 100644
> +--- a/libgcc/config/alpha/linux-unwind.h
> ++++ b/libgcc/config/alpha/linux-unwind.h
> +@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       sc = &rt_->uc.uc_mcontext;
> +     }
> +diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
> +index 77b7c23..8bf5e82 100644
> +--- a/libgcc/config/bfin/linux-unwind.h
> ++++ b/libgcc/config/bfin/linux-unwind.h
> +@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
> + 	void *puc;
> + 	char retcode[8];
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> + 
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
> +index 540a0a2..29efbe3 100644
> +--- a/libgcc/config/i386/linux-unwind.h
> ++++ b/libgcc/config/i386/linux-unwind.h
> +@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
> +   if (*(unsigned char *)(pc+0) == 0x48
> +       && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
> +     {
> +-      struct ucontext *uc_ = context->cfa;
> ++      ucontext_t *uc_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +          because it does not alias anything.  */
> +@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
> + 	siginfo_t *pinfo;
> + 	void *puc;
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
> +index 75b7cf7..f964e24 100644
> +--- a/libgcc/config/m68k/linux-unwind.h
> ++++ b/libgcc/config/m68k/linux-unwind.h
> +@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> + /* <sys/ucontext.h> is unfortunately broken right now.  */
> + struct uw_ucontext {
> + 	unsigned long	  uc_flags;
> +-	struct ucontext  *uc_link;
> ++	ucontext_t	 *uc_link;
> + 	stack_t		  uc_stack;
> + 	mcontext_t	  uc_mcontext;
> + 	unsigned long	  uc_filler[80];
> +diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
> +index 2304142..30f25ea 100644
> +--- a/libgcc/config/nios2/linux-unwind.h
> ++++ b/libgcc/config/nios2/linux-unwind.h
> +@@ -38,7 +38,7 @@ struct nios2_mcontext {
> + 
> + struct nios2_ucontext {
> +   unsigned long uc_flags;
> +-  struct ucontext *uc_link;
> ++  ucontext_t *uc_link;
> +   stack_t uc_stack;
> +   struct nios2_mcontext uc_mcontext;
> +   sigset_t uc_sigmask;	/* mask last for extensibility */
> +diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
> +index 9a2657f..e47493d 100644
> +--- a/libgcc/config/pa/linux-unwind.h
> ++++ b/libgcc/config/pa/linux-unwind.h
> +@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
> +   struct sigcontext *sc;
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *frame;
> + 
> +   /* rt_sigreturn trampoline:
> +diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
> +index e389cac..0bf43ba 100644
> +--- a/libgcc/config/sh/linux-unwind.h
> ++++ b/libgcc/config/sh/linux-unwind.h
> +@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
> +     {
> +       struct rt_sigframe {
> + 	siginfo_t info;
> +-	struct ucontext uc;
> ++	ucontext_t uc;
> +       } *rt_ = context->cfa;
> +       /* The void * cast is necessary to avoid an aliasing warning.
> +          The aliasing warning is correct, but should not be a problem
> +diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
> +index 796e976..75f8890 100644
> +--- a/libgcc/config/tilepro/linux-unwind.h
> ++++ b/libgcc/config/tilepro/linux-unwind.h
> +@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
> +   struct rt_sigframe {
> +     unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* Return if this is not a signal handler.  */
> +diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
> +index 9872492..586a9d4 100644
> +--- a/libgcc/config/xtensa/linux-unwind.h
> ++++ b/libgcc/config/xtensa/linux-unwind.h
> +@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
> + 
> +   struct rt_sigframe {
> +     siginfo_t info;
> +-    struct ucontext uc;
> ++    ucontext_t uc;
> +   } *rt_;
> + 
> +   /* movi a2, __NR_rt_sigreturn; syscall */
> +-- 
> +2.9.5
> +
> -- 
> 2.9.5
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 2/7] package/gcc: fix build issue with glibc 2.26
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
@ 2017-09-27 20:29   ` Yann E. MORIN
  0 siblings, 0 replies; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 20:29 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> ../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
> ../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:241:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
>    struct sigaltstack handler_stack;
> 
> ../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ?int __sanitizer::TracerThread(void*)?:
> ../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:276:22: error: aggregate ?sigaltstack handler_stack? has incomplete type and cannot be defined
>    struct sigaltstack handler_stack;
>                       ^~~~~~~~~~~~~
> 
> The fix is already included in gcc 7.2 release [1]. We have to backport it to
> all older gcc release since it's not included in any stable release yet.
> 
> [1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=72edc2c02f8b4768ad660f46a1c7e2400c0a8e06
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> ---
> v3: use upstream commit for gcc 5 and 6. (Yann)
> ---
>  package/gcc/4.9.4/944-sanitizer-linux.patch | 88 ++++++++++++++++++++++++++++
>  package/gcc/5.4.0/944-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
>  package/gcc/6.4.0/943-sanitizer-linux.patch | 91 +++++++++++++++++++++++++++++
>  3 files changed, 270 insertions(+)
>  create mode 100644 package/gcc/4.9.4/944-sanitizer-linux.patch
>  create mode 100644 package/gcc/5.4.0/944-sanitizer-linux.patch
>  create mode 100644 package/gcc/6.4.0/943-sanitizer-linux.patch
> 
> diff --git a/package/gcc/4.9.4/944-sanitizer-linux.patch b/package/gcc/4.9.4/944-sanitizer-linux.patch
> new file mode 100644
> index 0000000..caadf2d
> --- /dev/null
> +++ b/package/gcc/4.9.4/944-sanitizer-linux.patch
> @@ -0,0 +1,88 @@
> +From f9a35ba5c150da2e381c4cab01f8f12bcd6af5d2 Mon Sep 17 00:00:00 2001
> +From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Mon, 17 Jul 2017 19:41:08 +0000
> +Subject: [PATCH] 	Backported from mainline 	2017-07-14  Jakub
> + Jelinek  <jakub@redhat.com>
> +
> +	PR sanitizer/81066
> +	* sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
> +	* sanitizer_common/sanitizer_linux.cc: Likewise.
> +	* sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
> +	* tsan/tsan_platform_linux.cc: Likewise.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch at 250287 138bc75d-0d04-0410-961f-82ee72b054a4
> +(cherry picked from commit 72edc2c02f8b4768ad660f46a1c7e2400c0a8e06)
> +[Romain backport to 4.9.4]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
> + libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
> + libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
> + libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
> + 4 files changed, 4 insertions(+), 7 deletions(-)
> +
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +index 69c9c10..8e53673 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +@@ -599,8 +599,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
> +   return internal_syscall(__NR_prctl, option, arg2, arg3, arg4, arg5);
> + }
> + 
> +-uptr internal_sigaltstack(const struct sigaltstack *ss,
> +-                         struct sigaltstack *oss) {
> ++uptr internal_sigaltstack(const void *ss, void *oss) {
> +   return internal_syscall(__NR_sigaltstack, (uptr)ss, (uptr)oss);
> + }
> + 
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +index 6422df1..8e111d1 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +@@ -18,7 +18,6 @@
> + #include "sanitizer_platform_limits_posix.h"
> + 
> + struct link_map;  // Opaque type returned by dlopen().
> +-struct sigaltstack;
> + 
> + namespace __sanitizer {
> + // Dirent structure for getdents(). Note that this structure is different from
> +@@ -28,8 +27,7 @@ struct linux_dirent;
> + // Syscall wrappers.
> + uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
> + uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);
> +-uptr internal_sigaltstack(const struct sigaltstack* ss,
> +-                          struct sigaltstack* oss);
> ++uptr internal_sigaltstack(const void* ss, void* oss);
> + uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,
> +     __sanitizer_kernel_sigaction_t *oldact);
> + uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +index 6ee63ec..50c21a3 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +@@ -238,7 +238,7 @@ static int TracerThread(void* argument) {
> + 
> +   // Alternate stack for signal handling.
> +   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
> +-  struct sigaltstack handler_stack;
> ++  stack_t handler_stack;
> +   internal_memset(&handler_stack, 0, sizeof(handler_stack));
> +   handler_stack.ss_sp = handler_stack_memory.data();
> +   handler_stack.ss_size = kHandlerStackSize;
> +diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
> +index fe69430..49f5270 100644
> +--- a/libsanitizer/tsan/tsan_platform_linux.cc
> ++++ b/libsanitizer/tsan/tsan_platform_linux.cc
> +@@ -351,7 +351,7 @@ bool IsGlobalVar(uptr addr) {
> + // closes within glibc. The code is a pure hack.
> + int ExtractResolvFDs(void *state, int *fds, int nfd) {
> +   int cnt = 0;
> +-  __res_state *statp = (__res_state*)state;
> ++  struct __res_state *statp = (struct __res_state*)state;
> +   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
> +     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
> +       fds[cnt++] = statp->_u._ext.nssocks[i];
> +-- 
> +2.9.5
> +
> diff --git a/package/gcc/5.4.0/944-sanitizer-linux.patch b/package/gcc/5.4.0/944-sanitizer-linux.patch
> new file mode 100644
> index 0000000..a2602b7
> --- /dev/null
> +++ b/package/gcc/5.4.0/944-sanitizer-linux.patch
> @@ -0,0 +1,91 @@
> +From cf796eadff0f2ff0f6e4565373d54d10dff276e1 Mon Sep 17 00:00:00 2001
> +From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Thu, 7 Sep 2017 07:17:17 +0000
> +Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
> +
> +        Backported from mainline
> +        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
> +
> +        PR sanitizer/81066
> +        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
> +        * sanitizer_common/sanitizer_linux.cc: Likewise.
> +        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
> +        * tsan/tsan_platform_linux.cc: Likewise.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch at 251829 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +(cherry picked from commit 833e00c01e96f61e24cd7ec97b93fad212dc914b)
> +[Romain rebase on gcc 5.4]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
> + libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
> + libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
> + libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
> + 4 files changed, 4 insertions(+), 7 deletions(-)
> +
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +index 9feb307..821b26d 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +@@ -514,8 +514,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
> + }
> + #endif
> + 
> +-uptr internal_sigaltstack(const struct sigaltstack *ss,
> +-                         struct sigaltstack *oss) {
> ++uptr internal_sigaltstack(const void *ss, void *oss) {
> +   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
> + }
> + 
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +index 086834c..3a6f4cd 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +@@ -18,7 +18,6 @@
> + #include "sanitizer_platform_limits_posix.h"
> + 
> + struct link_map;  // Opaque type returned by dlopen().
> +-struct sigaltstack;
> + 
> + namespace __sanitizer {
> + // Dirent structure for getdents(). Note that this structure is different from
> +@@ -27,8 +26,7 @@ struct linux_dirent;
> + 
> + // Syscall wrappers.
> + uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
> +-uptr internal_sigaltstack(const struct sigaltstack* ss,
> +-                          struct sigaltstack* oss);
> ++uptr internal_sigaltstack(const void* ss, void* oss);
> + uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
> +     __sanitizer_sigset_t *oldset);
> + void internal_sigfillset(__sanitizer_sigset_t *set);
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +index 5881202..c54894d 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +@@ -234,7 +234,7 @@ static int TracerThread(void* argument) {
> + 
> +   // Alternate stack for signal handling.
> +   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
> +-  struct sigaltstack handler_stack;
> ++  stack_t handler_stack;
> +   internal_memset(&handler_stack, 0, sizeof(handler_stack));
> +   handler_stack.ss_sp = handler_stack_memory.data();
> +   handler_stack.ss_size = kHandlerStackSize;
> +diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
> +index 3259131..b8e9078 100644
> +--- a/libsanitizer/tsan/tsan_platform_linux.cc
> ++++ b/libsanitizer/tsan/tsan_platform_linux.cc
> +@@ -377,7 +377,7 @@ bool IsGlobalVar(uptr addr) {
> + int ExtractResolvFDs(void *state, int *fds, int nfd) {
> + #if SANITIZER_LINUX
> +   int cnt = 0;
> +-  __res_state *statp = (__res_state*)state;
> ++  struct __res_state *statp = (struct __res_state*)state;
> +   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
> +     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
> +       fds[cnt++] = statp->_u._ext.nssocks[i];
> +-- 
> +2.9.5
> +
> diff --git a/package/gcc/6.4.0/943-sanitizer-linux.patch b/package/gcc/6.4.0/943-sanitizer-linux.patch
> new file mode 100644
> index 0000000..640d68c
> --- /dev/null
> +++ b/package/gcc/6.4.0/943-sanitizer-linux.patch
> @@ -0,0 +1,91 @@
> +From a3e3d1b5f73380a99126c4937a95225ba3bd214b Mon Sep 17 00:00:00 2001
> +From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
> +Date: Thu, 7 Sep 2017 07:15:24 +0000
> +Subject: [PATCH] 2017-09-07  Matthias Klose  <doko@ubuntu.com>
> +
> +        Backported from mainline
> +        2017-07-14  Jakub Jelinek  <jakub@redhat.com>
> +
> +        PR sanitizer/81066
> +        * sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
> +        * sanitizer_common/sanitizer_linux.cc: Likewise.
> +        * sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
> +        * tsan/tsan_platform_linux.cc: Likewise.
> +
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch at 251828 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +(cherry picked from commit 8937b94d1a643fd9760714642296d034a45254a8)
> +[Romain rebase on gcc 6.4]
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + libsanitizer/sanitizer_common/sanitizer_linux.cc                      | 3 +--
> + libsanitizer/sanitizer_common/sanitizer_linux.h                       | 4 +---
> + libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +-
> + libsanitizer/tsan/tsan_platform_linux.cc                              | 2 +-
> + 4 files changed, 4 insertions(+), 7 deletions(-)
> +
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +index 2cefa20..223d9c6 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
> +@@ -546,8 +546,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
> + }
> + #endif
> + 
> +-uptr internal_sigaltstack(const struct sigaltstack *ss,
> +-                         struct sigaltstack *oss) {
> ++uptr internal_sigaltstack(const void *ss, void *oss) {
> +   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
> + }
> + 
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +index 4497702..1594058 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
> ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
> +@@ -19,7 +19,6 @@
> + #include "sanitizer_platform_limits_posix.h"
> + 
> + struct link_map;  // Opaque type returned by dlopen().
> +-struct sigaltstack;
> + 
> + namespace __sanitizer {
> + // Dirent structure for getdents(). Note that this structure is different from
> +@@ -28,8 +27,7 @@ struct linux_dirent;
> + 
> + // Syscall wrappers.
> + uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
> +-uptr internal_sigaltstack(const struct sigaltstack* ss,
> +-                          struct sigaltstack* oss);
> ++uptr internal_sigaltstack(const void* ss, void* oss);
> + uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
> +     __sanitizer_sigset_t *oldset);
> + void internal_sigfillset(__sanitizer_sigset_t *set);
> +diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +index c919e4f..014162af 100644
> +--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> ++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
> +@@ -267,7 +267,7 @@ static int TracerThread(void* argument) {
> + 
> +   // Alternate stack for signal handling.
> +   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
> +-  struct sigaltstack handler_stack;
> ++  stack_t handler_stack;
> +   internal_memset(&handler_stack, 0, sizeof(handler_stack));
> +   handler_stack.ss_sp = handler_stack_memory.data();
> +   handler_stack.ss_size = kHandlerStackSize;
> +diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
> +index 09cec5f..908f4fe 100644
> +--- a/libsanitizer/tsan/tsan_platform_linux.cc
> ++++ b/libsanitizer/tsan/tsan_platform_linux.cc
> +@@ -291,7 +291,7 @@ bool IsGlobalVar(uptr addr) {
> + int ExtractResolvFDs(void *state, int *fds, int nfd) {
> + #if SANITIZER_LINUX
> +   int cnt = 0;
> +-  __res_state *statp = (__res_state*)state;
> ++  struct __res_state *statp = (struct __res_state*)state;
> +   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
> +     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
> +       fds[cnt++] = statp->_u._ext.nssocks[i];
> +-- 
> +2.9.5
> +
> -- 
> 2.9.5
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
@ 2017-09-27 20:32   ` Yann E. MORIN
  0 siblings, 0 replies; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 20:32 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> Since glibc 2.26, kernel headers >= 3.10 are needed on powerpc64le [1].
> In order to prepare the glibc bump to this version, we don't allow to
> build a Buildroot toolchain with kernel headers older than 3.10.
> 
> [1] https://sourceware.org/git/?p=glibc.git;a=commit;h=c2ff5ec13fca1bdd1cd646a0260808386d7bd7ff
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: "Yann E. MORIN" <yann.morin.1998@free.fr>

Ideally, this should have been part of the patch that does the bump to
2.26, but it is OK to have it just before to have smaller-to-review
patches.

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> ---
> v3: move the dependency outside of architectures section. (Yann)
> ---
>  toolchain/toolchain-buildroot/Config.in | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/toolchain/toolchain-buildroot/Config.in b/toolchain/toolchain-buildroot/Config.in
> index f47001f..ac6017f 100644
> --- a/toolchain/toolchain-buildroot/Config.in
> +++ b/toolchain/toolchain-buildroot/Config.in
> @@ -51,6 +51,7 @@ config BR2_TOOLCHAIN_BUILDROOT_GLIBC
>  	depends on BR2_USE_MMU
>  	depends on !BR2_STATIC_LIBS
>  	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
> +	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || !BR2_powerpc64le
>  	depends on !BR2_powerpc_SPE
>  	select BR2_TOOLCHAIN_USES_GLIBC
>  	# our glibc.mk enables RPC support
> @@ -65,6 +66,11 @@ comment "glibc needs a toolchain w/ dynamic library, kernel headers >= 3.2"
>  	depends on BR2_USE_MMU
>  	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
>  
> +# glibc >= 2.26 require kernel headers >= 3.10 on powerpc64le.
> +comment "glibc on powerpc64le needs a toolchain w/ headers >= 3.10"
> +	depends on BR2_powerpc64le
> +	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
> +
>  config BR2_TOOLCHAIN_BUILDROOT_MUSL
>  	bool "musl"
>  	depends on BR2_aarch64	  || BR2_arm     || BR2_armeb     || BR2_i386 || \
> -- 
> 2.9.5
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
@ 2017-09-27 20:40   ` Yann E. MORIN
  2017-09-27 21:14     ` Arnout Vandecappelle
  0 siblings, 1 reply; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 20:40 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> float128 is now required on powerpc64le with glibc >= 2.26 toolchains.
> 
> Fixes:
> running configure fragment for sysdeps/gnu
> running configure fragment for sysdeps/powerpc/powerpc64le
> checking if [...]powerpc64le-buildroot-linux-gnu-gcc supports binary128 floating point type... no
> checking if the target machine is at least POWER8... yes
> configure: error: ***  binary128 floating point type (GCC >= 6.2) is required on powerpc64le.
> 
> In order to prepare the glibc bump to this version, we enable
> binary128 floating point in gcc. This require at least gcc >= 6.2.
> 
> Disable gcc 4.x and 5.x for internal toolchain.
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>

Small nit below...

> ---
> v2: Disable gcc 4.x and 5.x for internal toolchain.
> ---
>  package/gcc/Config.in.host | 4 ++++
>  package/gcc/gcc.mk         | 8 ++++++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
> index ec7b692..0926560 100644
> --- a/package/gcc/Config.in.host
> +++ b/package/gcc/Config.in.host
> @@ -39,6 +39,8 @@ config BR2_GCC_VERSION_4_9_X
>  	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_powerpc64 || BR2_powerpc64le))
>  	# musl mips64 unsupported
>  	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
> +	# glibc >= 2.26 needs gcc >= 6.2
> +	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
>  	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
>  
>  config BR2_GCC_VERSION_5_X
> @@ -53,6 +55,8 @@ config BR2_GCC_VERSION_5_X
>  	depends on !BR2_mips_interaptiv && !BR2_mips_m5150 && !BR2_mips_i6400
>  	# musl mips64 unsupported
>  	depends on !(BR2_TOOLCHAIN_USES_MUSL && (BR2_mips64 || BR2_mips64el))
> +	# glibc >= 2.26 needs gcc >= 6.2
> +	depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_powerpc64le)
>  	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
>  
>  config BR2_GCC_VERSION_6_X
> diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
> index 49ccccf..54ef70c 100644
> --- a/package/gcc/gcc.mk
> +++ b/package/gcc/gcc.mk
> @@ -254,6 +254,14 @@ HOST_GCC_COMMON_CONF_OPTS += \
>  	--without-long-double-128
>  endif
>  
> +# Since glibc >= 2.26, poerpc64le requires double/long double which
> +# requires at least gcc 6.2.
> +# See sysdeps/powerpc/powerpc64le/configure.ac
> +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6)$(BR2_powerpc64le),yyy)
> +HOST_GCC_COMMON_CONF_OPTS += \
> +	--with-long-double-128

Could very well have been on a single line.

Otherwise:

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> +endif
> +
>  HOST_GCC_COMMON_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"'
>  ifeq ($(BR2_GCC_ARCH_HAS_CONFIGURABLE_DEFAULTS),)
>  ifeq ($(call qstrip,$(BR2_GCC_TARGET_CPU_REVISION)),)
> -- 
> 2.9.5
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
@ 2017-09-27 21:01   ` Yann E. MORIN
  0 siblings, 0 replies; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 21:01 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> Since glibc >= 2.26, don't try to use getopt_long replacement bundled
> with diffutils. It will conflict with the one from glibc.
> The getopt copy bundled in glibc has been updated with the one from gnulib.

Yeah, because gnulib was such a bright idea... ;-)

> After a lot of warnings...
> Fixes:
> xstrtol-error.c: In function 'xstrtol_error':
> xstrtol-error.c:84:26: error: invalid use of undefined type 'struct rpl_option'
>      option = long_options[opt_idx].name;
>                           ^
> xstrtol-error.c:84:26: error: dereferencing pointer to incomplete type 'const struct rpl_option'
> 
> [...]
> 
> xstrtol-error.c:92:1: error: conflicting types for 'xstrtol_fatal'
>  xstrtol_fatal (enum strtol_error err,
>  ^~~~~~~~~~~~~
> In file included from xstrtol-error.c:20:0:
> xstrtol.h:69:16: note: previous declaration of 'xstrtol_fatal' was here
>  _Noreturn void xstrtol_fatal (enum strtol_error,
>                 ^~~~~~~~~~~~~
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> ---
>  package/diffutils/diffutils.mk | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/package/diffutils/diffutils.mk b/package/diffutils/diffutils.mk
> index 6e5b9b6..79785d6 100644
> --- a/package/diffutils/diffutils.mk
> +++ b/package/diffutils/diffutils.mk
> @@ -11,6 +11,12 @@ DIFFUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES)
>  DIFFUTILS_LICENSE = GPL-3.0+
>  DIFFUTILS_LICENSE_FILES = COPYING
>  
> +# Since glibc >= 2.26, don't try to use getopt_long replacement bundled
> +# with diffutils. It will conflict with the one from glibc.
> +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
> +DIFFUTILS_CONF_ENV += gl_cv_func_getopt_gnu=yes
> +endif
> +
>  ifeq ($(BR2_PACKAGE_BUSYBOX),y)
>  DIFFUTILS_DEPENDENCIES += busybox
>  endif
> -- 
> 2.9.5
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
@ 2017-09-27 21:05   ` Yann E. MORIN
  2017-09-27 21:11     ` Romain Naour
  0 siblings, 1 reply; 28+ messages in thread
From: Yann E. MORIN @ 2017-09-27 21:05 UTC (permalink / raw)
  To: buildroot

Romain, All,

On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
> This doesn't compile with glibc 2.26 where reallocarray() as been introduced.
> 
> It's a nasty issue, when reallocarray() is available for the target, flex will
> build a small tool called stage1flex for the host (using _FOR_BUILD) but with
> the config.h generated for the target.
> 
> When the host doesn't have a glibc >= 2.26, reallocarray() is never defined
> while building stage1flex:
> 
> misc.c:147:8: warning : implicit declaration of function ? reallocarray ?
> [-Wimplicit-function-declaration]
>   mem = reallocarray(NULL, (size_t) size, element_size);
>         ^~~~~~~~~~~~
> misc.c:147:6: warning : assignment makes pointer from integer without a cast
> [-Wint-conversion]
>   mem = reallocarray(NULL, (size_t) size, element_size);
>       ^
> 
> Disable reallocarray for now, reallocarray() support may be
> enabled in a followup patch.

What about https://patchwork.ozlabs.org/patch/813474/ which just
backports a fix from upstream (or I'm mislead)?

Regards,
Yann E. MORIN.

> Fixes:
> stage1flex-misc.o: In function `allocate_array':
> misc.c:(.text+0x38f): undefined reference to `reallocarray'
> stage1flex-misc.o: In function `reallocate_array':
> misc.c:(.text+0xc8a): undefined reference to `reallocarray'
> collect2: error: ld returned 1 exit status
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> ---
>  package/flex/flex.mk | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/package/flex/flex.mk b/package/flex/flex.mk
> index b782699..0196624 100644
> --- a/package/flex/flex.mk
> +++ b/package/flex/flex.mk
> @@ -10,7 +10,8 @@ FLEX_INSTALL_STAGING = YES
>  FLEX_LICENSE = FLEX
>  FLEX_LICENSE_FILES = COPYING
>  FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4
> -FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4
> +FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \
> +	ac_cv_func_reallocarray=no
>  HOST_FLEX_DEPENDENCIES = host-m4
>  
>  define FLEX_DISABLE_PROGRAM
> -- 
> 2.9.5
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray
  2017-09-27 21:05   ` Yann E. MORIN
@ 2017-09-27 21:11     ` Romain Naour
  0 siblings, 0 replies; 28+ messages in thread
From: Romain Naour @ 2017-09-27 21:11 UTC (permalink / raw)
  To: buildroot

Le 27/09/2017 ? 23:05, Yann E. MORIN a ?crit?:
> Romain, All,
> 
> On 2017-09-23 23:24 +0200, Romain Naour spake thusly:
>> This doesn't compile with glibc 2.26 where reallocarray() as been introduced.
>>
>> It's a nasty issue, when reallocarray() is available for the target, flex will
>> build a small tool called stage1flex for the host (using _FOR_BUILD) but with
>> the config.h generated for the target.
>>
>> When the host doesn't have a glibc >= 2.26, reallocarray() is never defined
>> while building stage1flex:
>>
>> misc.c:147:8: warning : implicit declaration of function ? reallocarray ?
>> [-Wimplicit-function-declaration]
>>   mem = reallocarray(NULL, (size_t) size, element_size);
>>         ^~~~~~~~~~~~
>> misc.c:147:6: warning : assignment makes pointer from integer without a cast
>> [-Wint-conversion]
>>   mem = reallocarray(NULL, (size_t) size, element_size);
>>       ^
>>
>> Disable reallocarray for now, reallocarray() support may be
>> enabled in a followup patch.
> 
> What about https://patchwork.ozlabs.org/patch/813474/ which just
> backports a fix from upstream (or I'm mislead)?

No, this patch is fixing host-flex (segfault). not flex (link issue).

I haven't had the time to investigate further but stage1flex seems using the
config result for the target while building a host tool. So the reallocarray()
code is used on a host machine where it is not in the host glibc.

Best regards,
Romain

> 
> Regards,
> Yann E. MORIN.
> 
>> Fixes:
>> stage1flex-misc.o: In function `allocate_array':
>> misc.c:(.text+0x38f): undefined reference to `reallocarray'
>> stage1flex-misc.o: In function `reallocate_array':
>> misc.c:(.text+0xc8a): undefined reference to `reallocarray'
>> collect2: error: ld returned 1 exit status
>>
>> Signed-off-by: Romain Naour <romain.naour@gmail.com>
>> ---
>>  package/flex/flex.mk | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/package/flex/flex.mk b/package/flex/flex.mk
>> index b782699..0196624 100644
>> --- a/package/flex/flex.mk
>> +++ b/package/flex/flex.mk
>> @@ -10,7 +10,8 @@ FLEX_INSTALL_STAGING = YES
>>  FLEX_LICENSE = FLEX
>>  FLEX_LICENSE_FILES = COPYING
>>  FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4
>> -FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4
>> +FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 \
>> +	ac_cv_func_reallocarray=no
>>  HOST_FLEX_DEPENDENCIES = host-m4
>>  
>>  define FLEX_DISABLE_PROGRAM
>> -- 
>> 2.9.5
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
> 

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26
  2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
                   ` (14 preceding siblings ...)
  2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
@ 2017-09-27 21:12 ` Arnout Vandecappelle
  2017-10-16 16:25   ` Yann E. MORIN
  15 siblings, 1 reply; 28+ messages in thread
From: Arnout Vandecappelle @ 2017-09-27 21:12 UTC (permalink / raw)
  To: buildroot



On 23-09-17 23:23, Romain Naour wrote:
> This series bump glibc to the latest release and allow to remove all
> patches required for the previous version! But glibc come with some
> new issue that are hopefully already fixed in the 2.26.x stable branch.

 Applied the series to master, thanks.


> While testing this new version, some build issues has been dicovered.
> Two gcc patch are needed to build a toolchain with older compiler
> (gcc 4.9 to 6.4), gcc 7.2 contain already the fix.
> 
> Backport a series related to bug 21930 and 22146.
> Without them the float128 support break the C++ build for some
> packages.
> 
> https://sourceware.org/bugzilla/show_bug.cgi?id=21930
> https://sourceware.org/bugzilla/show_bug.cgi?id=22146
> 
> This third series is for testing and review.
> Let's hope that glibc 2.26.1 will be released soon :)

 As discussed on IRC:

 Apparently there won't be a glibc 2.26.1. It's up to distros to pick a git
commit to release. So we have the choice to either keep a lot of patches in
Buildroot, or use a git download instead of a tarball. The latter has the
disadvantage of having a silly version "number" (the sha1), and that git
downloads are generally much slower.

 For now, we have those 6 patches in Buildroot. This may change in the future.

 Regards,
 Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains
  2017-09-27 20:40   ` Yann E. MORIN
@ 2017-09-27 21:14     ` Arnout Vandecappelle
  0 siblings, 0 replies; 28+ messages in thread
From: Arnout Vandecappelle @ 2017-09-27 21:14 UTC (permalink / raw)
  To: buildroot



On 27-09-17 22:40, Yann E. MORIN wrote:
> Romain, All,
> 
> On 2017-09-23 23:24 +0200, Romain Naour spake thusly:

[snip]
>> @@ -254,6 +254,14 @@ HOST_GCC_COMMON_CONF_OPTS += \
>>  	--without-long-double-128
>>  endif
>>  
>> +# Since glibc >= 2.26, poerpc64le requires double/long double which
>> +# requires at least gcc 6.2.
>> +# See sysdeps/powerpc/powerpc64le/configure.ac
>> +ifeq ($(BR2_TOOLCHAIN_USES_GLIBC)$(BR2_TOOLCHAIN_GCC_AT_LEAST_6)$(BR2_powerpc64le),yyy)
>> +HOST_GCC_COMMON_CONF_OPTS += \
>> +	--with-long-double-128
> 
> Could very well have been on a single line.

 I didn't change this, because the way it is now it's similar to the other 3
instances of --with-long-double-128 which makes it easier to spot the repetition.

 Regards,
 Arnout


[snip]

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26
  2017-09-27 21:12 ` [Buildroot] [PATCH v3 0/7] glibc: " Arnout Vandecappelle
@ 2017-10-16 16:25   ` Yann E. MORIN
  0 siblings, 0 replies; 28+ messages in thread
From: Yann E. MORIN @ 2017-10-16 16:25 UTC (permalink / raw)
  To: buildroot

Arnout, All,

On 2017-09-27 23:12 +0200, Arnout Vandecappelle spake thusly:
> On 23-09-17 23:23, Romain Naour wrote:
> > Let's hope that glibc 2.26.1 will be released soon :)
> 
>  As discussed on IRC:
> 
>  Apparently there won't be a glibc 2.26.1. It's up to distros to pick a git
> commit to release.

Yep, this is just silly... :-(

> So we have the choice to either keep a lot of patches in
> Buildroot, or use a git download instead of a tarball. The latter has the
> disadvantage of having a silly version "number" (the sha1), and that git
> downloads are generally much slower.

If we want a slightly less-silly-looking version, we could use something
like:

    glibc-2.26-43-gfdf58eb

whichh means the sha1 'fdf58eb' that is '43' commits after the 'glibc-2.26'
tag. But we have to be careful about shortening the sha1, to avoid
collisions. I would say that we stay with the full sha1.

It is pretty easy to generate such a version string:

    git describe --match 'glibc-*' --abbrev=12 origin/release/2.26/master

>  For now, we have those 6 patches in Buildroot. This may change in the future.

I would say that we should switch to using the 2.26/master branch from
upstream, because we don;t have the bandwidth to assess whether we
need/want to backport individual patches.

If upstream commits on the maintenance branch, it means that it is a
fix. And we want fixes, whatever they fix: functionality or security.

So I'd say we should switch to git. The repo is even accessible through
https (although it is not documented): https://sourceware.org/git/glibc.git

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2017-10-16 16:25 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-23 21:23 [Buildroot] [PATCH v3 0/7] glibc: bump to 2.26 Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
2017-09-27 20:29   ` Yann E. MORIN
2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
2017-09-27 20:29   ` Yann E. MORIN
2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
2017-09-27 20:32   ` Yann E. MORIN
2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
2017-09-27 20:40   ` Yann E. MORIN
2017-09-27 21:14     ` Arnout Vandecappelle
2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
2017-09-27 21:01   ` Yann E. MORIN
2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
2017-09-27 21:05   ` Yann E. MORIN
2017-09-27 21:11     ` Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
2017-09-24  9:16   ` Bernd Kuhls
2017-09-23 21:24 ` [Buildroot] [PATCH v3 0/7] glibc: " Romain Naour
2017-09-23 21:28   ` Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 1/7] package/gcc: fix build issue with glibc 2.26 Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 2/7] " Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 3/7] package/glibc: needs kernel headers >= 3.10 on powerpc64le Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 4/7] package/gcc: enable float128 on powerpc64le with glibc >= 2.26 toolchains Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 5/7] package/diffutils: disable getopt_long replacement with glibc Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 6/7] package/flex: disable reallocarray Romain Naour
2017-09-23 21:24 ` [Buildroot] [PATCH v3 7/7] package/glibc: bump to 2.26 Romain Naour
2017-09-27 21:12 ` [Buildroot] [PATCH v3 0/7] glibc: " Arnout Vandecappelle
2017-10-16 16:25   ` Yann E. MORIN

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.