summaryrefslogtreecommitdiff
path: root/packages/glibc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/glibc')
-rw-r--r--packages/glibc/2.12.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.12.1/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.12.1/104-unused-variables.patch165
-rw-r--r--packages/glibc/2.12.1/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.12.1/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.12.1/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.12.1/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.12.1/900-march-i686.patch34
-rw-r--r--packages/glibc/2.12.1/910-typedef-caddr.patch28
-rw-r--r--packages/glibc/2.12.1/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.12.1/920-make-382.patch15
-rw-r--r--packages/glibc/2.12.1/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.12.1/999-new-tools.patch69
-rw-r--r--packages/glibc/2.12.1/version.desc1
-rw-r--r--packages/glibc/2.12.2/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.12.2/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.12.2/900-march-i686.patch34
-rw-r--r--packages/glibc/2.12.2/910-typedef-caddr.patch28
-rw-r--r--packages/glibc/2.12.2/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.12.2/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.12.2/999-new-tools.patch69
-rw-r--r--packages/glibc/2.12.2/version.desc1
-rw-r--r--packages/glibc/2.13/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.13/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.13/104-unused-variables.patch165
-rw-r--r--packages/glibc/2.13/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.13/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.13/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.13/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.13/900-march-i686.patch34
-rw-r--r--packages/glibc/2.13/910-typedef-caddr.patch28
-rw-r--r--packages/glibc/2.13/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.13/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.13/950-initfini-ppc64.patch20
-rw-r--r--packages/glibc/2.13/999-new-tools.patch69
-rw-r--r--packages/glibc/2.13/version.desc1
-rw-r--r--packages/glibc/2.14.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.14.1/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.14.1/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.14.1/104-unused-variables.patch165
-rw-r--r--packages/glibc/2.14.1/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.14.1/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.14.1/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.14.1/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.14.1/900-cpuid-include.patch628
-rw-r--r--packages/glibc/2.14.1/910-asm-i686.patch50
-rw-r--r--packages/glibc/2.14.1/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.14.1/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.14.1/950-initfini-ppc64.patch20
-rw-r--r--packages/glibc/2.14.1/999-new-tools.patch69
-rw-r--r--packages/glibc/2.14.1/version.desc1
-rw-r--r--packages/glibc/2.14/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.14/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.14/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.14/104-unused-variables.patch165
-rw-r--r--packages/glibc/2.14/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.14/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.14/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.14/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.14/900-cpuid-include.patch628
-rw-r--r--packages/glibc/2.14/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.14/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.14/950-initfini-ppc64.patch20
-rw-r--r--packages/glibc/2.14/999-new-tools.patch69
-rw-r--r--packages/glibc/2.14/version.desc1
-rw-r--r--packages/glibc/2.15/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.15/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.15/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.15/104-unused-variables.patch161
-rw-r--r--packages/glibc/2.15/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.15/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.15/140-Fix-combreloc-test-BSD-grep.patch44
-rw-r--r--packages/glibc/2.15/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.15/900-cpuid-include.patch548
-rw-r--r--packages/glibc/2.15/910-asm-i686.patch50
-rw-r--r--packages/glibc/2.15/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.15/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.15/990-try-link-static.patch171
-rw-r--r--packages/glibc/2.15/991-builtin_expect.patch82
-rw-r--r--packages/glibc/2.15/992-gcc_s-suffix.patch108
-rw-r--r--packages/glibc/2.15/999-new-tools.patch69
-rw-r--r--packages/glibc/2.15/version.desc1
-rw-r--r--packages/glibc/2.16.0/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.16.0/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.16.0/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.16.0/104-unused-variables.patch157
-rw-r--r--packages/glibc/2.16.0/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.16.0/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.16.0/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.16.0/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.16.0/500-fix-parsing-of-numeric-hosts-in-gethostbyname_r.patch222
-rw-r--r--packages/glibc/2.16.0/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.16.0/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.16.0/999-new-tools.patch33
-rw-r--r--packages/glibc/2.16.0/version.desc1
-rw-r--r--packages/glibc/2.17/100-Fix-ARM-build-with-GCC-trunk.patch54
-rw-r--r--packages/glibc/2.17/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.17/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.17/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.17/104-unused-variables.patch157
-rw-r--r--packages/glibc/2.17/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.17/106-dl-open-array-bounds.patch27
-rw-r--r--packages/glibc/2.17/120-support-make4.patch38
-rw-r--r--packages/glibc/2.17/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.17/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.17/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.17/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.17/version.desc1
-rw-r--r--packages/glibc/2.18/100-4f2bcda-ARM-Fix-clone-code-when-built-for-Thumb.patch65
-rw-r--r--packages/glibc/2.18/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.18/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.18/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.18/104-unused-variables.patch157
-rw-r--r--packages/glibc/2.18/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.18/106-dl-open-array-bounds.patch36
-rw-r--r--packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch78
-rw-r--r--packages/glibc/2.18/120-support-make4.patch38
-rw-r--r--packages/glibc/2.18/130-arm-unwind.patch48
-rw-r--r--packages/glibc/2.18/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.18/300-macos-cross-rpcgen.patch32
-rw-r--r--packages/glibc/2.18/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.18/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.18/version.desc1
-rw-r--r--packages/glibc/2.19/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.19/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.19/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.19/104-unused-variables.patch178
-rw-r--r--packages/glibc/2.19/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.19/106-dl-open-array-bounds.patch36
-rw-r--r--packages/glibc/2.19/130-arm-unwind.patch48
-rw-r--r--packages/glibc/2.19/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.19/910-typedef-caddr.patch28
-rw-r--r--packages/glibc/2.19/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.19/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.19/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.19/version.desc1
-rw-r--r--packages/glibc/2.20/100-sparc-nptl.patch14
-rw-r--r--packages/glibc/2.20/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.20/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.20/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.20/104-unused-variables.patch178
-rw-r--r--packages/glibc/2.20/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.20/106-dl-open-array-bounds.patch36
-rw-r--r--packages/glibc/2.20/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.20/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.20/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.20/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.20/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.20/version.desc1
-rw-r--r--packages/glibc/2.21/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.21/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.21/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.21/104-unused-variables.patch178
-rw-r--r--packages/glibc/2.21/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.21/106-dl-open-array-bounds.patch36
-rw-r--r--packages/glibc/2.21/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.21/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.21/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.21/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.21/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.21/950-dlclose-assert.patch40
-rw-r--r--packages/glibc/2.21/version.desc1
-rw-r--r--packages/glibc/2.22/100-sparc32-sem_open-missing-include.patch21
-rw-r--r--packages/glibc/2.22/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.22/102-fix-signed-shift-overlow.patch98
-rw-r--r--packages/glibc/2.22/103-dl-openat64-variadic.patch195
-rw-r--r--packages/glibc/2.22/104-unused-variables.patch178
-rw-r--r--packages/glibc/2.22/105-misleading-indentation.patch24
-rw-r--r--packages/glibc/2.22/120-cve-2105-7547-getaddrinfo-stack.patch551
-rw-r--r--packages/glibc/2.22/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.22/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.22/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.22/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.22/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.22/version.desc1
-rw-r--r--packages/glibc/2.23/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch84
-rw-r--r--packages/glibc/2.23/120-Fix-build-with-enable-static-nss.patch30
-rw-r--r--packages/glibc/2.23/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.23/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.23/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.23/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.23/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.23/version.desc1
-rw-r--r--packages/glibc/2.24/110-sh-fix-gcc6.patch28
-rw-r--r--packages/glibc/2.24/120-Fix-build-with-enable-static-nss.patch30
-rw-r--r--packages/glibc/2.24/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.24/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.24/920-fix-rpc_parse-format.patch60
-rw-r--r--packages/glibc/2.24/930-explicit-boolean.patch33
-rw-r--r--packages/glibc/2.24/940-nis-bogus-conditional.patch62
-rw-r--r--packages/glibc/2.24/version.desc0
-rw-r--r--packages/glibc/2.25/110-sh-fix-gcc6.patch28
-rw-r--r--packages/glibc/2.25/120-Fix-build-with-enable-static-nss.patch30
-rw-r--r--packages/glibc/2.25/140-Fix-combreloc-test-BSD-grep.patch49
-rw-r--r--packages/glibc/2.25/910-typedef-caddr.patch15
-rw-r--r--packages/glibc/2.25/960-sh4-trap-divdi3.patch340
-rw-r--r--packages/glibc/2.25/961-sparc-extra-plt-call.patch65
-rw-r--r--packages/glibc/2.25/version.desc0
-rw-r--r--packages/glibc/package.desc4
199 files changed, 14790 insertions, 0 deletions
diff --git a/packages/glibc/2.12.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.12.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.12.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.12.1/102-fix-signed-shift-overlow.patch b/packages/glibc/2.12.1/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.12.1/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.12.1/104-unused-variables.patch b/packages/glibc/2.12.1/104-unused-variables.patch
new file mode 100644
index 0000000..e063675
--- /dev/null
+++ b/packages/glibc/2.12.1/104-unused-variables.patch
@@ -0,0 +1,165 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,12 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-#ifdef __STDC__
+-static const float zero = 0.0;
+-#else
+-static float zero = 0.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __ieee754_log10f(float x)
+ #else
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,12 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include "math.h"
+ #include "math_private.h"
+
+-#ifdef __STDC__
+-static const float one=1.0;
+-#else
+-static float one=1.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __cosf(float x)
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+ static long double
+ #endif
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.12.1/105-misleading-indentation.patch b/packages/glibc/2.12.1/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.12.1/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.12.1/106-dl-open-array-bounds.patch b/packages/glibc/2.12.1/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..bdb5c19
--- /dev/null
+++ b/packages/glibc/2.12.1/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if ((nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && ((nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.12.1/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.12.1/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..530d4ff
--- /dev/null
+++ b/packages/glibc/2.12.1/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.12.2.orig/configure glibc-2.12.2/configure
+--- glibc-2.12.2.orig/configure 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure 2017-03-08 21:18:07.000000000 -0800
+@@ -6710,7 +6710,7 @@ EOF
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }
+ then
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.12.2.orig/configure.in glibc-2.12.2/configure.in
+--- glibc-2.12.2.orig/configure.in 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure.in 2017-03-08 21:18:17.000000000 -0800
+@@ -1671,7 +1671,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.12.1/300-macos-cross-rpcgen.patch b/packages/glibc/2.12.1/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.12.1/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.12.1/900-march-i686.patch b/packages/glibc/2.12.1/900-march-i686.patch
new file mode 100644
index 0000000..7f5b1ce
--- /dev/null
+++ b/packages/glibc/2.12.1/900-march-i686.patch
@@ -0,0 +1,34 @@
+2007-02-15 Khem Raj <kraj@xxxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
+ * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
+
+diff -urN glibc-2.12.1.orig/nptl/sysdeps/pthread/pt-initfini.c glibc-2.12.1/nptl/sysdeps/pthread/pt-initfini.c
+--- glibc-2.12.1.orig/nptl/sysdeps/pthread/pt-initfini.c 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.1/nptl/sysdeps/pthread/pt-initfini.c 2010-12-30 11:36:19.858708534 +0100
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+
+diff -urN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.12.1/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.1/sysdeps/unix/sysv/linux/i386/sysdep.h 2010-12-30 11:36:19.858708534 +0100
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
diff --git a/packages/glibc/2.12.1/910-typedef-caddr.patch b/packages/glibc/2.12.1/910-typedef-caddr.patch
new file mode 100644
index 0000000..e29e810
--- /dev/null
+++ b/packages/glibc/2.12.1/910-typedef-caddr.patch
@@ -0,0 +1,28 @@
+diff -urN glibc-2.12.1-orig/posix/sys/types.h glibc-2.12.1/posix/sys/types.h
+--- glibc-2.12.1-orig/posix/sys/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/posix/sys/types.h 2011-03-29 14:16:00.374064708 +0200
+@@ -114,7 +114,10 @@
+ #ifdef __USE_BSD
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+diff -urN glibc-2.12.1-orig/sunrpc/rpc/types.h glibc-2.12.1/sunrpc/rpc/types.h
+--- glibc-2.12.1-orig/sunrpc/rpc/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/sunrpc/rpc/types.h 2011-03-29 14:16:32.988910439 +0200
+@@ -80,7 +80,10 @@
+ #endif
+ #ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ #endif
+
diff --git a/packages/glibc/2.12.1/920-fix-rpc_parse-format.patch b/packages/glibc/2.12.1/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.12.1/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.12.1/920-make-382.patch b/packages/glibc/2.12.1/920-make-382.patch
new file mode 100644
index 0000000..28be2fe
--- /dev/null
+++ b/packages/glibc/2.12.1/920-make-382.patch
@@ -0,0 +1,15 @@
+http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=blob_plain;f=source/base/glibc/make-3.82-fix.patch;hb=8217c32ecc2e14962847ba3d8a272eb64a3dba4f
+
+--- glibc-2.10.1.OLD/manual/Makefile
++++ glibc-2.10.1.NEW/manual/Makefile
+@@ -232,7 +232,9 @@
+ .PHONY: stubs
+ stubs: $(objpfx)stubs
+ endif
+-$(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
++$(objpfx)stubs ../po/manual.pot:
++ touch $@
++$(objpfx)stamp%:
+ $(make-target-directory)
+ touch $@
+
diff --git a/packages/glibc/2.12.1/940-nis-bogus-conditional.patch b/packages/glibc/2.12.1/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.12.1/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.12.1/999-new-tools.patch b/packages/glibc/2.12.1/999-new-tools.patch
new file mode 100644
index 0000000..d600b58
--- /dev/null
+++ b/packages/glibc/2.12.1/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.12.1.orig/configure glibc-2.12.1/configure
+--- glibc-2.12.1.orig/configure 2010-07-27 04:34:39.000000000 -0700
++++ glibc-2.12.1/configure 2017-02-08 00:37:58.117495908 -0800
+@@ -5079,7 +5079,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5142,7 +5142,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5269,7 +5269,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5329,7 +5329,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:$LINENO: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.12.1.orig/configure.in glibc-2.12.1/configure.in
+--- glibc-2.12.1.orig/configure.in 2010-07-27 04:34:39.000000000 -0700
++++ glibc-2.12.1/configure.in 2017-02-08 00:28:47.131374866 -0800
+@@ -960,11 +960,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -972,10 +972,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.12.1/version.desc b/packages/glibc/2.12.1/version.desc
new file mode 100644
index 0000000..fb988b5
--- /dev/null
+++ b/packages/glibc/2.12.1/version.desc
@@ -0,0 +1 @@
+# Not obsolete (CentOS 6, EOL 11/2020)
diff --git a/packages/glibc/2.12.2/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.12.2/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..530d4ff
--- /dev/null
+++ b/packages/glibc/2.12.2/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.12.2.orig/configure glibc-2.12.2/configure
+--- glibc-2.12.2.orig/configure 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure 2017-03-08 21:18:07.000000000 -0800
+@@ -6710,7 +6710,7 @@ EOF
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }
+ then
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.12.2.orig/configure.in glibc-2.12.2/configure.in
+--- glibc-2.12.2.orig/configure.in 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure.in 2017-03-08 21:18:17.000000000 -0800
+@@ -1671,7 +1671,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.12.2/300-macos-cross-rpcgen.patch b/packages/glibc/2.12.2/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.12.2/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.12.2/900-march-i686.patch b/packages/glibc/2.12.2/900-march-i686.patch
new file mode 100644
index 0000000..6030de9
--- /dev/null
+++ b/packages/glibc/2.12.2/900-march-i686.patch
@@ -0,0 +1,34 @@
+2007-02-15 Khem Raj <kraj@xxxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
+ * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
+
+diff -urN glibc-2.12.2.orig/nptl/sysdeps/pthread/pt-initfini.c glibc-2.12.2/nptl/sysdeps/pthread/pt-initfini.c
+--- glibc-2.12.2.orig/nptl/sysdeps/pthread/pt-initfini.c 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.2/nptl/sysdeps/pthread/pt-initfini.c 2010-12-30 11:36:19.858708534 +0100
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+
+diff -urN glibc-2.12.2.orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.12.2/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.12.2.orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.2/sysdeps/unix/sysv/linux/i386/sysdep.h 2010-12-30 11:36:19.858708534 +0100
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
diff --git a/packages/glibc/2.12.2/910-typedef-caddr.patch b/packages/glibc/2.12.2/910-typedef-caddr.patch
new file mode 100644
index 0000000..4bc75cb
--- /dev/null
+++ b/packages/glibc/2.12.2/910-typedef-caddr.patch
@@ -0,0 +1,28 @@
+diff -urN glibc-2.12.2-orig/posix/sys/types.h glibc-2.12.2/posix/sys/types.h
+--- glibc-2.12.2-orig/posix/sys/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.2/posix/sys/types.h 2011-03-29 14:16:00.374064708 +0200
+@@ -114,7 +114,10 @@
+ #ifdef __USE_BSD
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+diff -urN glibc-2.12.2-orig/sunrpc/rpc/types.h glibc-2.12.2/sunrpc/rpc/types.h
+--- glibc-2.12.2-orig/sunrpc/rpc/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.2/sunrpc/rpc/types.h 2011-03-29 14:16:32.988910439 +0200
+@@ -80,7 +80,10 @@
+ #endif
+ #ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ #endif
+
diff --git a/packages/glibc/2.12.2/920-fix-rpc_parse-format.patch b/packages/glibc/2.12.2/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.12.2/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.12.2/940-nis-bogus-conditional.patch b/packages/glibc/2.12.2/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.12.2/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.12.2/999-new-tools.patch b/packages/glibc/2.12.2/999-new-tools.patch
new file mode 100644
index 0000000..e2f7b1d
--- /dev/null
+++ b/packages/glibc/2.12.2/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.12.2.orig/configure glibc-2.12.2/configure
+--- glibc-2.12.2.orig/configure 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure 2017-02-08 00:38:10.249617723 -0800
+@@ -5189,7 +5189,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5252,7 +5252,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5379,7 +5379,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5439,7 +5439,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:$LINENO: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.12.2.orig/configure.in glibc-2.12.2/configure.in
+--- glibc-2.12.2.orig/configure.in 2010-12-13 02:47:26.000000000 -0800
++++ glibc-2.12.2/configure.in 2017-02-08 00:29:52.484183611 -0800
+@@ -1026,11 +1026,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -1038,10 +1038,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.12.2/version.desc b/packages/glibc/2.12.2/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.12.2/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.13/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.13/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.13/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.13/102-fix-signed-shift-overlow.patch b/packages/glibc/2.13/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.13/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.13/104-unused-variables.patch b/packages/glibc/2.13/104-unused-variables.patch
new file mode 100644
index 0000000..e063675
--- /dev/null
+++ b/packages/glibc/2.13/104-unused-variables.patch
@@ -0,0 +1,165 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,12 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-#ifdef __STDC__
+-static const float zero = 0.0;
+-#else
+-static float zero = 0.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __ieee754_log10f(float x)
+ #else
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,12 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include "math.h"
+ #include "math_private.h"
+
+-#ifdef __STDC__
+-static const float one=1.0;
+-#else
+-static float one=1.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __cosf(float x)
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+ static long double
+ #endif
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.13/105-misleading-indentation.patch b/packages/glibc/2.13/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.13/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.13/106-dl-open-array-bounds.patch b/packages/glibc/2.13/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..bdb5c19
--- /dev/null
+++ b/packages/glibc/2.13/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if ((nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && ((nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.13/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.13/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..da21d9e
--- /dev/null
+++ b/packages/glibc/2.13/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.13.orig/configure glibc-2.13/configure
+--- glibc-2.13.orig/configure 2011-01-17 20:34:07.000000000 -0800
++++ glibc-2.13/configure 2017-03-08 21:11:09.000000000 -0800
+@@ -6504,7 +6504,7 @@ EOF
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.13.orig/configure.in glibc-2.13/configure.in
+--- glibc-2.13.orig/configure.in 2011-01-17 20:34:07.000000000 -0800
++++ glibc-2.13/configure.in 2017-03-08 21:11:22.000000000 -0800
+@@ -1673,7 +1673,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.13/300-macos-cross-rpcgen.patch b/packages/glibc/2.13/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.13/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.13/900-march-i686.patch b/packages/glibc/2.13/900-march-i686.patch
new file mode 100644
index 0000000..7f5b1ce
--- /dev/null
+++ b/packages/glibc/2.13/900-march-i686.patch
@@ -0,0 +1,34 @@
+2007-02-15 Khem Raj <kraj@xxxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
+ * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
+
+diff -urN glibc-2.12.1.orig/nptl/sysdeps/pthread/pt-initfini.c glibc-2.12.1/nptl/sysdeps/pthread/pt-initfini.c
+--- glibc-2.12.1.orig/nptl/sysdeps/pthread/pt-initfini.c 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.1/nptl/sysdeps/pthread/pt-initfini.c 2010-12-30 11:36:19.858708534 +0100
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+
+diff -urN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.12.1/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2009-10-30 18:17:08.000000000 +0100
++++ glibc-2.12.1/sysdeps/unix/sysv/linux/i386/sysdep.h 2010-12-30 11:36:19.858708534 +0100
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
diff --git a/packages/glibc/2.13/910-typedef-caddr.patch b/packages/glibc/2.13/910-typedef-caddr.patch
new file mode 100644
index 0000000..e29e810
--- /dev/null
+++ b/packages/glibc/2.13/910-typedef-caddr.patch
@@ -0,0 +1,28 @@
+diff -urN glibc-2.12.1-orig/posix/sys/types.h glibc-2.12.1/posix/sys/types.h
+--- glibc-2.12.1-orig/posix/sys/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/posix/sys/types.h 2011-03-29 14:16:00.374064708 +0200
+@@ -114,7 +114,10 @@
+ #ifdef __USE_BSD
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+diff -urN glibc-2.12.1-orig/sunrpc/rpc/types.h glibc-2.12.1/sunrpc/rpc/types.h
+--- glibc-2.12.1-orig/sunrpc/rpc/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/sunrpc/rpc/types.h 2011-03-29 14:16:32.988910439 +0200
+@@ -80,7 +80,10 @@
+ #endif
+ #ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ #endif
+
diff --git a/packages/glibc/2.13/920-fix-rpc_parse-format.patch b/packages/glibc/2.13/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.13/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.13/940-nis-bogus-conditional.patch b/packages/glibc/2.13/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.13/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.13/950-initfini-ppc64.patch b/packages/glibc/2.13/950-initfini-ppc64.patch
new file mode 100644
index 0000000..87f8d23
--- /dev/null
+++ b/packages/glibc/2.13/950-initfini-ppc64.patch
@@ -0,0 +1,20 @@
+Prevent erroneous inline optimization of initfini.s on PowerPC64.
+
+The problem and the fix was reported there:
+http://sourceware.org/ml/libc-alpha/2012-01/msg00195.html
+Git commit:
+commit 1fe05ea95e1460e5e1cf1568a8ce3982f0f02de6
+Author: Ryan S. Arnold <rsa@us.ibm.com>
+Date: Tue May 3 17:26:17 2011 -0500
+
+--- glibc.orig/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:06.713568781 -0800
++++ glibc/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:50.318605517 -0800
+@@ -31,7 +31,7 @@
+ ifneq ($(elf),no)
+ # The initfini generation code doesn't work in the presence of -fPIC, so
+ # we use -fpic instead which is much better.
+-CFLAGS-initfini.s += -fpic -O1
++CFLAGS-initfini.s += -fpic -O1 -fno-inline
+ endif
+ endif
+
diff --git a/packages/glibc/2.13/999-new-tools.patch b/packages/glibc/2.13/999-new-tools.patch
new file mode 100644
index 0000000..d2d498a
--- /dev/null
+++ b/packages/glibc/2.13/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.13.orig/configure glibc-2.13/configure
+--- glibc-2.13.orig/configure 2011-01-17 20:34:07.000000000 -0800
++++ glibc-2.13/configure 2017-02-08 00:38:22.017735530 -0800
+@@ -5041,7 +5041,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5104,7 +5104,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5231,7 +5231,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5291,7 +5291,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.13.orig/configure.in glibc-2.13/configure.in
+--- glibc-2.13.orig/configure.in 2011-01-17 20:34:07.000000000 -0800
++++ glibc-2.13/configure.in 2017-02-08 00:30:01.720295526 -0800
+@@ -1026,11 +1026,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -1038,10 +1038,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.13/version.desc b/packages/glibc/2.13/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.13/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.14.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.14.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.14.1/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.14.1/102-fix-signed-shift-overlow.patch b/packages/glibc/2.14.1/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.14.1/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.14.1/103-dl-openat64-variadic.patch b/packages/glibc/2.14.1/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.14.1/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.14.1/104-unused-variables.patch b/packages/glibc/2.14.1/104-unused-variables.patch
new file mode 100644
index 0000000..e063675
--- /dev/null
+++ b/packages/glibc/2.14.1/104-unused-variables.patch
@@ -0,0 +1,165 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,12 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-#ifdef __STDC__
+-static const float zero = 0.0;
+-#else
+-static float zero = 0.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __ieee754_log10f(float x)
+ #else
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,12 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include "math.h"
+ #include "math_private.h"
+
+-#ifdef __STDC__
+-static const float one=1.0;
+-#else
+-static float one=1.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __cosf(float x)
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+ static long double
+ #endif
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.14.1/105-misleading-indentation.patch b/packages/glibc/2.14.1/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.14.1/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.14.1/106-dl-open-array-bounds.patch b/packages/glibc/2.14.1/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..bdb5c19
--- /dev/null
+++ b/packages/glibc/2.14.1/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if ((nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && ((nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.14.1/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.14.1/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..d720d39
--- /dev/null
+++ b/packages/glibc/2.14.1/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.14.1.orig/configure glibc-2.14.1/configure
+--- glibc-2.14.1.orig/configure 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure 2017-03-08 21:06:36.000000000 -0800
+@@ -6377,7 +6377,7 @@ EOF
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.14.1.orig/configure.in glibc-2.14.1/configure.in
+--- glibc-2.14.1.orig/configure.in 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure.in 2017-03-08 21:06:50.000000000 -0800
+@@ -1655,7 +1655,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.14.1/300-macos-cross-rpcgen.patch b/packages/glibc/2.14.1/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.14.1/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.14.1/900-cpuid-include.patch b/packages/glibc/2.14.1/900-cpuid-include.patch
new file mode 100644
index 0000000..0b8db71
--- /dev/null
+++ b/packages/glibc/2.14.1/900-cpuid-include.patch
@@ -0,0 +1,628 @@
+This patch fixes another configure test issue when bootstrapping.
+sysdeps/i386/configure.in uses the obsolete AC_HEADER_CHECK macro to
+test for cpuid.h, and that macro tries to include various other
+standard headers (which come from the library, unlike cpuid.h which
+comes from the compiler, so aren't available when bootstrapping) in
+the test code it compiles. This patch changes the code to use
+AC_CHECK_HEADER, with the fourth argument used to prevent any default
+includes being used in the test.
+
+Tested x86_64 (native).
+
+2012-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/i386/configure.in (cpuid.h): Use AC_CHECK_HEADER with no
+ default includes instead of AC_HEADER_CHECK.
+ * sysdeps/i386/configure: Regenerated.
+
+Origin: http://sourceware.org/ml/libc-alpha/2012-03/msg00177.html
+
+diff -Nur glibc-2.14.1.orig/sysdeps/i386/configure glibc-2.14.1/sysdeps/i386/configure
+--- glibc-2.14.1.orig/sysdeps/i386/configure 2011-10-07 20:48:55.000000000 +1100
++++ glibc-2.14.1/sysdeps/i386/configure 2012-07-25 01:23:11.799118927 +1000
+@@ -16,23 +16,6 @@
+ as_fn_set_status $1
+ exit $1
+ } # as_fn_exit
+-# as_fn_arith ARG...
+-# ------------------
+-# Perform arithmetic evaluation on the ARGs, and store the result in the
+-# global $as_val. Take advantage of shells that can avoid forks. The arguments
+-# must be portable across $(()) and expr.
+-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+- eval 'as_fn_arith ()
+- {
+- as_val=$(( $* ))
+- }'
+-else
+- as_fn_arith ()
+- {
+- as_val=`expr "$@" || test $? -eq 1`
+- }
+-fi # as_fn_arith
+-
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+@@ -89,6 +72,10 @@
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
++ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
++ # already done that, so ensure we don't try to do so again and fall
++ # in an infinite loop. This has already happened in practice.
++ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+@@ -97,42 +84,6 @@
+ exit
+ }
+
+-# Factoring default headers for most tests.
+-ac_includes_default="\
+-#include <stdio.h>
+-#ifdef HAVE_SYS_TYPES_H
+-# include <sys/types.h>
+-#endif
+-#ifdef HAVE_SYS_STAT_H
+-# include <sys/stat.h>
+-#endif
+-#ifdef STDC_HEADERS
+-# include <stdlib.h>
+-# include <stddef.h>
+-#else
+-# ifdef HAVE_STDLIB_H
+-# include <stdlib.h>
+-# endif
+-#endif
+-#ifdef HAVE_STRING_H
+-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+-# include <memory.h>
+-# endif
+-# include <string.h>
+-#endif
+-#ifdef HAVE_STRINGS_H
+-# include <strings.h>
+-#endif
+-#ifdef HAVE_INTTYPES_H
+-# include <inttypes.h>
+-#endif
+-#ifdef HAVE_STDINT_H
+-# include <stdint.h>
+-#endif
+-#ifdef HAVE_UNISTD_H
+-# include <unistd.h>
+-#endif"
+-
+
+ # ac_fn_c_try_compile LINENO
+ # --------------------------
+@@ -167,177 +118,11 @@
+
+ ac_retval=1
+ fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+ } # ac_fn_c_try_compile
+
+-# ac_fn_c_try_cpp LINENO
+-# ----------------------
+-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+-ac_fn_c_try_cpp ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+- ac_status=$?
+- if test -s conftest.err; then
+- grep -v '^ *+' conftest.err >conftest.er1
+- cat conftest.er1 >&5
+- mv -f conftest.er1 conftest.err
+- fi
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=1
+-fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_cpp
+-
+-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+-# -------------------------------------------------------
+-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+-# the include files in INCLUDES and setting the cache variable VAR
+-# accordingly.
+-ac_fn_c_check_header_mongrel ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if eval "test \"\${$3+set}\"" = set; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
+- $as_echo_n "(cached) " >&6
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+-$as_echo_n "checking $2 usability... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-$4
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_header_compiler=yes
+-else
+- ac_header_compiler=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+-
+-# Is the header present?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+-$as_echo_n "checking $2 presence... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_cpp "$LINENO"; then :
+- ac_header_preproc=yes
+-else
+- ac_header_preproc=no
+-fi
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+-
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+- yes:no: )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+-esac
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- eval "$3=\$ac_header_compiler"
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+-
+-} # ac_fn_c_check_header_mongrel
+-
+-# ac_fn_c_try_run LINENO
+-# ----------------------
+-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+-# that executables *can* be run.
+-ac_fn_c_try_run ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+- { { case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=$ac_status
+-fi
+- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_run
+-
+ # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists and can be compiled using the include files in
+@@ -347,7 +132,7 @@
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
++if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -365,275 +150,16 @@
+ eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+ } # ac_fn_c_check_header_compile
+ # This file is generated from configure.in by Autoconf. DO NOT EDIT!
+ # Local configure fragment for sysdeps/i386.
+
+
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if test "${ac_cv_path_GREP+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if test -z "$GREP"; then
+- ac_path_GREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in grep ggrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+-# Check for GNU ac_path_GREP and select it if it is found.
+- # Check for GNU $ac_path_GREP
+-case `"$ac_path_GREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'GREP' >> "conftest.nl"
+- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_GREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_GREP="$ac_path_GREP"
+- ac_path_GREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_GREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_GREP"; then
+- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_GREP=$GREP
+-fi
+-
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+-$as_echo "$ac_cv_path_GREP" >&6; }
+- GREP="$ac_cv_path_GREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+-$as_echo_n "checking for egrep... " >&6; }
+-if test "${ac_cv_path_EGREP+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+- then ac_cv_path_EGREP="$GREP -E"
+- else
+- if test -z "$EGREP"; then
+- ac_path_EGREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in egrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+-# Check for GNU ac_path_EGREP and select it if it is found.
+- # Check for GNU $ac_path_EGREP
+-case `"$ac_path_EGREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'EGREP' >> "conftest.nl"
+- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_EGREP="$ac_path_EGREP"
+- ac_path_EGREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_EGREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_EGREP"; then
+- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_EGREP=$EGREP
+-fi
+-
+- fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+-$as_echo "$ac_cv_path_EGREP" >&6; }
+- EGREP="$ac_cv_path_EGREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+-$as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <string.h>
+-#include <float.h>
+-
+-int
+-main ()
+-{
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_cv_header_stdc=yes
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-
+-if test $ac_cv_header_stdc = yes; then
+- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <string.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "memchr" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "free" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+- if test "$cross_compiling" = yes; then :
+- :
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <ctype.h>
+-#include <stdlib.h>
+-#if ((' ' & 0x0FF) == 0x020)
+-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+-#else
+-# define ISLOWER(c) \
+- (('a' <= (c) && (c) <= 'i') \
+- || ('j' <= (c) && (c) <= 'r') \
+- || ('s' <= (c) && (c) <= 'z'))
+-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+-#endif
+-
+-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+-int
+-main ()
+-{
+- int i;
+- for (i = 0; i < 256; i++)
+- if (XOR (islower (i), ISLOWER (i))
+- || toupper (i) != TOUPPER (i))
+- return 2;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+-fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+-$as_echo "$ac_cv_header_stdc" >&6; }
+-if test $ac_cv_header_stdc = yes; then
+-
+-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+-
+-fi
+-
+-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+- inttypes.h stdint.h unistd.h
+-do :
+- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
+ "
+-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+-
+-fi
+-
+-done
+-
+-
+-ac_fn_c_check_header_mongrel "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default"
+-if test "x$ac_cv_header_cpuid_h" = x""yes; then :
++if test "x$ac_cv_header_cpuid_h" = xyes; then :
+
+ else
+ as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
+@@ -643,7 +169,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -g produces usable source locations for assembler-with-cpp" >&5
+ $as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
+-if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then :
++if ${libc_cv_cpp_asm_debuginfo+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ cat > conftest.S <<EOF
+@@ -693,7 +219,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
+ $as_echo_n "checking for SSE4 support... " >&6; }
+-if test "${libc_cv_cc_sse4+set}" = set; then :
++if ${libc_cv_cc_sse4+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
+@@ -716,7 +242,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler -mtune=i686 support" >&5
+ $as_echo_n "checking for assembler -mtune=i686 support... " >&6; }
+-if test "${libc_cv_as_i686+set}" = set; then :
++if ${libc_cv_as_i686+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null'
+@@ -735,7 +261,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5
+ $as_echo_n "checking for AVX support... " >&6; }
+-if test "${libc_cv_cc_avx+set}" = set; then :
++if ${libc_cv_cc_avx+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null'
+@@ -758,7 +284,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5
+ $as_echo_n "checking for -mno-vzeroupper support... " >&6; }
+-if test "${libc_cv_cc_novzeroupper+set}" = set; then :
++if ${libc_cv_cc_novzeroupper+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null'
+diff -Nur glibc-2.14.1.orig/sysdeps/i386/configure.in glibc-2.14.1/sysdeps/i386/configure.in
+--- glibc-2.14.1.orig/sysdeps/i386/configure.in 2011-10-07 20:48:55.000000000 +1100
++++ glibc-2.14.1/sysdeps/i386/configure.in 2012-07-25 01:00:49.345025022 +1000
+@@ -1,8 +1,9 @@
+ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+ # Local configure fragment for sysdeps/i386.
+
+-AC_HEADER_CHECK([cpuid.h], ,
+- [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])])
++AC_CHECK_HEADER([cpuid.h], ,
++ [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
++ [/* No default includes. */])
+
+ AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
+ libc_cv_cpp_asm_debuginfo, [dnl
+
diff --git a/packages/glibc/2.14.1/910-asm-i686.patch b/packages/glibc/2.14.1/910-asm-i686.patch
new file mode 100644
index 0000000..b049887
--- /dev/null
+++ b/packages/glibc/2.14.1/910-asm-i686.patch
@@ -0,0 +1,50 @@
+Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org>
+Date: 2010-04-18
+Initial Package Version: 2.11.1
+Upstream Status: Not Submitted
+Origin: http://www.eglibc.org/archives/patches/msg00073.html
+Description: Fixes the following build problem with GCC-4.5.0:
+
+/mnt/lfs/sources/libc-build/math/s_frexp.os.dt -MT /mnt/lfs/sources/libc-build/math/s_frexp.os
+./sysdeps/i386/fpu/s_frexp.S: Assembler messages:
+./sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef"
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `.'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: expected comma after name `' in .size directive
+./sysdeps/i386/fpu/s_frexp.S:66: Error: ".endif" without ".if"
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk `.get_pc_thunk.dx' after expression
+make[2]: *** [/mnt/lfs/sources/libc-build/math/s_frexp.os] Error 1
+
+diff -Naur glibc-2.11.1.orig/nptl/sysdeps/pthread/pt-initfini.c glibc-2.11.1/nptl/sysdeps/pthread/pt-initfini.c
+--- glibc-2.11.1.orig/nptl/sysdeps/pthread/pt-initfini.c 2009-12-08 20:10:20.000000000 +0000
++++ glibc-2.11.1/nptl/sysdeps/pthread/pt-initfini.c 2010-04-17 11:34:06.882681001 +0000
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+
+diff -Naur glibc-2.11.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.11.1/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.11.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2009-12-08 20:10:20.000000000 +0000
++++ glibc-2.11.1/sysdeps/unix/sysv/linux/i386/sysdep.h 2010-04-17 11:34:06.882681001 +0000
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
+
diff --git a/packages/glibc/2.14.1/920-fix-rpc_parse-format.patch b/packages/glibc/2.14.1/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.14.1/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.14.1/940-nis-bogus-conditional.patch b/packages/glibc/2.14.1/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.14.1/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.14.1/950-initfini-ppc64.patch b/packages/glibc/2.14.1/950-initfini-ppc64.patch
new file mode 100644
index 0000000..87f8d23
--- /dev/null
+++ b/packages/glibc/2.14.1/950-initfini-ppc64.patch
@@ -0,0 +1,20 @@
+Prevent erroneous inline optimization of initfini.s on PowerPC64.
+
+The problem and the fix was reported there:
+http://sourceware.org/ml/libc-alpha/2012-01/msg00195.html
+Git commit:
+commit 1fe05ea95e1460e5e1cf1568a8ce3982f0f02de6
+Author: Ryan S. Arnold <rsa@us.ibm.com>
+Date: Tue May 3 17:26:17 2011 -0500
+
+--- glibc.orig/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:06.713568781 -0800
++++ glibc/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:50.318605517 -0800
+@@ -31,7 +31,7 @@
+ ifneq ($(elf),no)
+ # The initfini generation code doesn't work in the presence of -fPIC, so
+ # we use -fpic instead which is much better.
+-CFLAGS-initfini.s += -fpic -O1
++CFLAGS-initfini.s += -fpic -O1 -fno-inline
+ endif
+ endif
+
diff --git a/packages/glibc/2.14.1/999-new-tools.patch b/packages/glibc/2.14.1/999-new-tools.patch
new file mode 100644
index 0000000..f335a54
--- /dev/null
+++ b/packages/glibc/2.14.1/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.14.1.orig/configure glibc-2.14.1/configure
+--- glibc-2.14.1.orig/configure 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure 2017-02-08 00:38:43.765952352 -0800
+@@ -4939,7 +4939,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5002,7 +5002,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5129,7 +5129,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5189,7 +5189,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.14.1.orig/configure.in glibc-2.14.1/configure.in
+--- glibc-2.14.1.orig/configure.in 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure.in 2017-02-08 00:30:13.660439376 -0800
+@@ -1026,11 +1026,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -1038,10 +1038,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.14.1/version.desc b/packages/glibc/2.14.1/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.14.1/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.14/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.14/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.14/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.14/102-fix-signed-shift-overlow.patch b/packages/glibc/2.14/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.14/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.14/103-dl-openat64-variadic.patch b/packages/glibc/2.14/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.14/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.14/104-unused-variables.patch b/packages/glibc/2.14/104-unused-variables.patch
new file mode 100644
index 0000000..e063675
--- /dev/null
+++ b/packages/glibc/2.14/104-unused-variables.patch
@@ -0,0 +1,165 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,12 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-#ifdef __STDC__
+-static const float zero = 0.0;
+-#else
+-static float zero = 0.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __ieee754_log10f(float x)
+ #else
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,12 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include "math.h"
+ #include "math_private.h"
+
+-#ifdef __STDC__
+-static const float one=1.0;
+-#else
+-static float one=1.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __cosf(float x)
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+ static long double
+ #endif
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.14/105-misleading-indentation.patch b/packages/glibc/2.14/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.14/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.14/106-dl-open-array-bounds.patch b/packages/glibc/2.14/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..bdb5c19
--- /dev/null
+++ b/packages/glibc/2.14/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if ((nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && ((nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.14/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.14/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..d720d39
--- /dev/null
+++ b/packages/glibc/2.14/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.14.1.orig/configure glibc-2.14.1/configure
+--- glibc-2.14.1.orig/configure 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure 2017-03-08 21:06:36.000000000 -0800
+@@ -6377,7 +6377,7 @@ EOF
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.14.1.orig/configure.in glibc-2.14.1/configure.in
+--- glibc-2.14.1.orig/configure.in 2011-10-07 02:48:55.000000000 -0700
++++ glibc-2.14.1/configure.in 2017-03-08 21:06:50.000000000 -0800
+@@ -1655,7 +1655,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if readelf -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.14/300-macos-cross-rpcgen.patch b/packages/glibc/2.14/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.14/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.14/900-cpuid-include.patch b/packages/glibc/2.14/900-cpuid-include.patch
new file mode 100644
index 0000000..0b8db71
--- /dev/null
+++ b/packages/glibc/2.14/900-cpuid-include.patch
@@ -0,0 +1,628 @@
+This patch fixes another configure test issue when bootstrapping.
+sysdeps/i386/configure.in uses the obsolete AC_HEADER_CHECK macro to
+test for cpuid.h, and that macro tries to include various other
+standard headers (which come from the library, unlike cpuid.h which
+comes from the compiler, so aren't available when bootstrapping) in
+the test code it compiles. This patch changes the code to use
+AC_CHECK_HEADER, with the fourth argument used to prevent any default
+includes being used in the test.
+
+Tested x86_64 (native).
+
+2012-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/i386/configure.in (cpuid.h): Use AC_CHECK_HEADER with no
+ default includes instead of AC_HEADER_CHECK.
+ * sysdeps/i386/configure: Regenerated.
+
+Origin: http://sourceware.org/ml/libc-alpha/2012-03/msg00177.html
+
+diff -Nur glibc-2.14.1.orig/sysdeps/i386/configure glibc-2.14.1/sysdeps/i386/configure
+--- glibc-2.14.1.orig/sysdeps/i386/configure 2011-10-07 20:48:55.000000000 +1100
++++ glibc-2.14.1/sysdeps/i386/configure 2012-07-25 01:23:11.799118927 +1000
+@@ -16,23 +16,6 @@
+ as_fn_set_status $1
+ exit $1
+ } # as_fn_exit
+-# as_fn_arith ARG...
+-# ------------------
+-# Perform arithmetic evaluation on the ARGs, and store the result in the
+-# global $as_val. Take advantage of shells that can avoid forks. The arguments
+-# must be portable across $(()) and expr.
+-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+- eval 'as_fn_arith ()
+- {
+- as_val=$(( $* ))
+- }'
+-else
+- as_fn_arith ()
+- {
+- as_val=`expr "$@" || test $? -eq 1`
+- }
+-fi # as_fn_arith
+-
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+@@ -89,6 +72,10 @@
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
++ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
++ # already done that, so ensure we don't try to do so again and fall
++ # in an infinite loop. This has already happened in practice.
++ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+@@ -97,42 +84,6 @@
+ exit
+ }
+
+-# Factoring default headers for most tests.
+-ac_includes_default="\
+-#include <stdio.h>
+-#ifdef HAVE_SYS_TYPES_H
+-# include <sys/types.h>
+-#endif
+-#ifdef HAVE_SYS_STAT_H
+-# include <sys/stat.h>
+-#endif
+-#ifdef STDC_HEADERS
+-# include <stdlib.h>
+-# include <stddef.h>
+-#else
+-# ifdef HAVE_STDLIB_H
+-# include <stdlib.h>
+-# endif
+-#endif
+-#ifdef HAVE_STRING_H
+-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+-# include <memory.h>
+-# endif
+-# include <string.h>
+-#endif
+-#ifdef HAVE_STRINGS_H
+-# include <strings.h>
+-#endif
+-#ifdef HAVE_INTTYPES_H
+-# include <inttypes.h>
+-#endif
+-#ifdef HAVE_STDINT_H
+-# include <stdint.h>
+-#endif
+-#ifdef HAVE_UNISTD_H
+-# include <unistd.h>
+-#endif"
+-
+
+ # ac_fn_c_try_compile LINENO
+ # --------------------------
+@@ -167,177 +118,11 @@
+
+ ac_retval=1
+ fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+ } # ac_fn_c_try_compile
+
+-# ac_fn_c_try_cpp LINENO
+-# ----------------------
+-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+-ac_fn_c_try_cpp ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+- ac_status=$?
+- if test -s conftest.err; then
+- grep -v '^ *+' conftest.err >conftest.er1
+- cat conftest.er1 >&5
+- mv -f conftest.er1 conftest.err
+- fi
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } >/dev/null && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=1
+-fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_cpp
+-
+-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+-# -------------------------------------------------------
+-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+-# the include files in INCLUDES and setting the cache variable VAR
+-# accordingly.
+-ac_fn_c_check_header_mongrel ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if eval "test \"\${$3+set}\"" = set; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
+- $as_echo_n "(cached) " >&6
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+-$as_echo_n "checking $2 usability... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-$4
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_header_compiler=yes
+-else
+- ac_header_compiler=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+-
+-# Is the header present?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+-$as_echo_n "checking $2 presence... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_cpp "$LINENO"; then :
+- ac_header_preproc=yes
+-else
+- ac_header_preproc=no
+-fi
+-rm -f conftest.err conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+-
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+- yes:no: )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+-esac
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- eval "$3=\$ac_header_compiler"
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-fi
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+-
+-} # ac_fn_c_check_header_mongrel
+-
+-# ac_fn_c_try_run LINENO
+-# ----------------------
+-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+-# that executables *can* be run.
+-ac_fn_c_try_run ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+- { { case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=$ac_status
+-fi
+- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_run
+-
+ # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists and can be compiled using the include files in
+@@ -347,7 +132,7 @@
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if eval "test \"\${$3+set}\"" = set; then :
++if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -365,275 +150,16 @@
+ eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+ } # ac_fn_c_check_header_compile
+ # This file is generated from configure.in by Autoconf. DO NOT EDIT!
+ # Local configure fragment for sysdeps/i386.
+
+
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if test "${ac_cv_path_GREP+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if test -z "$GREP"; then
+- ac_path_GREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in grep ggrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+-# Check for GNU ac_path_GREP and select it if it is found.
+- # Check for GNU $ac_path_GREP
+-case `"$ac_path_GREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'GREP' >> "conftest.nl"
+- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_GREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_GREP="$ac_path_GREP"
+- ac_path_GREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_GREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_GREP"; then
+- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_GREP=$GREP
+-fi
+-
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+-$as_echo "$ac_cv_path_GREP" >&6; }
+- GREP="$ac_cv_path_GREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+-$as_echo_n "checking for egrep... " >&6; }
+-if test "${ac_cv_path_EGREP+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+- then ac_cv_path_EGREP="$GREP -E"
+- else
+- if test -z "$EGREP"; then
+- ac_path_EGREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in egrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+-# Check for GNU ac_path_EGREP and select it if it is found.
+- # Check for GNU $ac_path_EGREP
+-case `"$ac_path_EGREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'EGREP' >> "conftest.nl"
+- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_EGREP="$ac_path_EGREP"
+- ac_path_EGREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_EGREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_EGREP"; then
+- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_EGREP=$EGREP
+-fi
+-
+- fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+-$as_echo "$ac_cv_path_EGREP" >&6; }
+- EGREP="$ac_cv_path_EGREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+-$as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then :
+- $as_echo_n "(cached) " >&6
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <string.h>
+-#include <float.h>
+-
+-int
+-main ()
+-{
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_cv_header_stdc=yes
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-
+-if test $ac_cv_header_stdc = yes; then
+- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <string.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "memchr" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "free" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+- if test "$cross_compiling" = yes; then :
+- :
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <ctype.h>
+-#include <stdlib.h>
+-#if ((' ' & 0x0FF) == 0x020)
+-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+-#else
+-# define ISLOWER(c) \
+- (('a' <= (c) && (c) <= 'i') \
+- || ('j' <= (c) && (c) <= 'r') \
+- || ('s' <= (c) && (c) <= 'z'))
+-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+-#endif
+-
+-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+-int
+-main ()
+-{
+- int i;
+- for (i = 0; i < 256; i++)
+- if (XOR (islower (i), ISLOWER (i))
+- || toupper (i) != TOUPPER (i))
+- return 2;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+-fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+-$as_echo "$ac_cv_header_stdc" >&6; }
+-if test $ac_cv_header_stdc = yes; then
+-
+-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+-
+-fi
+-
+-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+- inttypes.h stdint.h unistd.h
+-do :
+- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
+ "
+-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+-
+-fi
+-
+-done
+-
+-
+-ac_fn_c_check_header_mongrel "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default"
+-if test "x$ac_cv_header_cpuid_h" = x""yes; then :
++if test "x$ac_cv_header_cpuid_h" = xyes; then :
+
+ else
+ as_fn_error $? "gcc must provide the <cpuid.h> header" "$LINENO" 5
+@@ -643,7 +169,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -g produces usable source locations for assembler-with-cpp" >&5
+ $as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
+-if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then :
++if ${libc_cv_cpp_asm_debuginfo+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ cat > conftest.S <<EOF
+@@ -693,7 +219,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSE4 support" >&5
+ $as_echo_n "checking for SSE4 support... " >&6; }
+-if test "${libc_cv_cc_sse4+set}" = set; then :
++if ${libc_cv_cc_sse4+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -msse4 -xc /dev/null -S -o /dev/null'
+@@ -716,7 +242,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler -mtune=i686 support" >&5
+ $as_echo_n "checking for assembler -mtune=i686 support... " >&6; }
+-if test "${libc_cv_as_i686+set}" = set; then :
++if ${libc_cv_as_i686+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null'
+@@ -735,7 +261,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX support" >&5
+ $as_echo_n "checking for AVX support... " >&6; }
+-if test "${libc_cv_cc_avx+set}" = set; then :
++if ${libc_cv_cc_avx+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -mavx -xc /dev/null -S -o /dev/null'
+@@ -758,7 +284,7 @@
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mno-vzeroupper support" >&5
+ $as_echo_n "checking for -mno-vzeroupper support... " >&6; }
+-if test "${libc_cv_cc_novzeroupper+set}" = set; then :
++if ${libc_cv_cc_novzeroupper+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+ if { ac_try='${CC-cc} -mno-vzeroupper -xc /dev/null -S -o /dev/null'
+diff -Nur glibc-2.14.1.orig/sysdeps/i386/configure.in glibc-2.14.1/sysdeps/i386/configure.in
+--- glibc-2.14.1.orig/sysdeps/i386/configure.in 2011-10-07 20:48:55.000000000 +1100
++++ glibc-2.14.1/sysdeps/i386/configure.in 2012-07-25 01:00:49.345025022 +1000
+@@ -1,8 +1,9 @@
+ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+ # Local configure fragment for sysdeps/i386.
+
+-AC_HEADER_CHECK([cpuid.h], ,
+- [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])])
++AC_CHECK_HEADER([cpuid.h], ,
++ [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
++ [/* No default includes. */])
+
+ AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
+ libc_cv_cpp_asm_debuginfo, [dnl
+
diff --git a/packages/glibc/2.14/920-fix-rpc_parse-format.patch b/packages/glibc/2.14/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.14/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.14/940-nis-bogus-conditional.patch b/packages/glibc/2.14/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.14/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.14/950-initfini-ppc64.patch b/packages/glibc/2.14/950-initfini-ppc64.patch
new file mode 100644
index 0000000..87f8d23
--- /dev/null
+++ b/packages/glibc/2.14/950-initfini-ppc64.patch
@@ -0,0 +1,20 @@
+Prevent erroneous inline optimization of initfini.s on PowerPC64.
+
+The problem and the fix was reported there:
+http://sourceware.org/ml/libc-alpha/2012-01/msg00195.html
+Git commit:
+commit 1fe05ea95e1460e5e1cf1568a8ce3982f0f02de6
+Author: Ryan S. Arnold <rsa@us.ibm.com>
+Date: Tue May 3 17:26:17 2011 -0500
+
+--- glibc.orig/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:06.713568781 -0800
++++ glibc/sysdeps/powerpc/powerpc64/Makefile 2012-12-22 19:10:50.318605517 -0800
+@@ -31,7 +31,7 @@
+ ifneq ($(elf),no)
+ # The initfini generation code doesn't work in the presence of -fPIC, so
+ # we use -fpic instead which is much better.
+-CFLAGS-initfini.s += -fpic -O1
++CFLAGS-initfini.s += -fpic -O1 -fno-inline
+ endif
+ endif
+
diff --git a/packages/glibc/2.14/999-new-tools.patch b/packages/glibc/2.14/999-new-tools.patch
new file mode 100644
index 0000000..7d115fd
--- /dev/null
+++ b/packages/glibc/2.14/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.14.orig/configure glibc-2.14/configure
+--- glibc-2.14.orig/configure 2011-05-30 21:12:33.000000000 -0700
++++ glibc-2.14/configure 2017-02-08 00:38:34.469859812 -0800
+@@ -4939,7 +4939,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5002,7 +5002,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5129,7 +5129,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5189,7 +5189,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.14.orig/configure.in glibc-2.14/configure.in
+--- glibc-2.14.orig/configure.in 2011-05-30 21:12:33.000000000 -0700
++++ glibc-2.14/configure.in 2017-02-08 00:30:32.232661325 -0800
+@@ -1026,11 +1026,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -1038,10 +1038,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.14/version.desc b/packages/glibc/2.14/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.14/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.15/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.15/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.15/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.15/102-fix-signed-shift-overlow.patch b/packages/glibc/2.15/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.15/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.15/103-dl-openat64-variadic.patch b/packages/glibc/2.15/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.15/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.15/104-unused-variables.patch b/packages/glibc/2.15/104-unused-variables.patch
new file mode 100644
index 0000000..63e4a40
--- /dev/null
+++ b/packages/glibc/2.15/104-unused-variables.patch
@@ -0,0 +1,161 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,12 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include "math.h"
+ #include "math_private.h"
+
+-#ifdef __STDC__
+-static const float one=1.0;
+-#else
+-static float one=1.0;
+-#endif
+-
+ #ifdef __STDC__
+ float __cosf(float x)
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+ static long double
+ #endif
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.15/105-misleading-indentation.patch b/packages/glibc/2.15/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.15/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.15/106-dl-open-array-bounds.patch b/packages/glibc/2.15/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..bdb5c19
--- /dev/null
+++ b/packages/glibc/2.15/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if ((nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && ((nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.15/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.15/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..c36cdf4
--- /dev/null
+++ b/packages/glibc/2.15/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,44 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff -urpN glibc-2.15.orig/configure glibc-2.15/configure
+--- glibc-2.15.orig/configure 2012-03-19 07:56:58.000000000 -0700
++++ glibc-2.15/configure 2017-03-08 21:02:21.000000000 -0800
+@@ -6566,7 +6566,7 @@ EOF
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff -urpN glibc-2.15.orig/configure.in glibc-2.15/configure.in
+--- glibc-2.15.orig/configure.in 2012-01-01 04:16:32.000000000 -0800
++++ glibc-2.15/configure.in 2017-03-08 21:01:54.000000000 -0800
+@@ -1716,7 +1716,7 @@ dnl cross-platform since the gcc used ca
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
diff --git a/packages/glibc/2.15/300-macos-cross-rpcgen.patch b/packages/glibc/2.15/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.15/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.15/900-cpuid-include.patch b/packages/glibc/2.15/900-cpuid-include.patch
new file mode 100644
index 0000000..29edf7b
--- /dev/null
+++ b/packages/glibc/2.15/900-cpuid-include.patch
@@ -0,0 +1,548 @@
+[As applied to 2.15]
+
+This patch fixes another configure test issue when bootstrapping.
+sysdeps/i386/configure.in uses the obsolete AC_HEADER_CHECK macro to
+test for cpuid.h, and that macro tries to include various other
+standard headers (which come from the library, unlike cpuid.h which
+comes from the compiler, so aren't available when bootstrapping) in
+the test code it compiles. This patch changes the code to use
+AC_CHECK_HEADER, with the fourth argument used to prevent any default
+includes being used in the test.
+
+Tested x86_64 (native).
+
+2012-03-07 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/i386/configure.in (cpuid.h): Use AC_CHECK_HEADER with no
+ default includes instead of AC_HEADER_CHECK.
+ * sysdeps/i386/configure: Regenerated.
+
+Origin: http://sourceware.org/ml/libc-alpha/2012-03/msg00177.html
+
+diff -urpN '--exclude=autom4te.cache' glibc-2.15.orig/sysdeps/i386/configure glibc-2.15/sysdeps/i386/configure
+--- glibc-2.15.orig/sysdeps/i386/configure 2017-02-08 14:28:19.947516097 -0800
++++ glibc-2.15/sysdeps/i386/configure 2017-02-08 17:25:19.756462280 -0800
+@@ -16,23 +16,6 @@ as_fn_exit ()
+ as_fn_set_status $1
+ exit $1
+ } # as_fn_exit
+-# as_fn_arith ARG...
+-# ------------------
+-# Perform arithmetic evaluation on the ARGs, and store the result in the
+-# global $as_val. Take advantage of shells that can avoid forks. The arguments
+-# must be portable across $(()) and expr.
+-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+- eval 'as_fn_arith ()
+- {
+- as_val=$(( $* ))
+- }'
+-else
+- as_fn_arith ()
+- {
+- as_val=`expr "$@" || test $? -eq 1`
+- }
+-fi # as_fn_arith
+-
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+@@ -97,42 +80,6 @@ $as_echo X/"$0" |
+ exit
+ }
+
+-# Factoring default headers for most tests.
+-ac_includes_default="\
+-#include <stdio.h>
+-#ifdef HAVE_SYS_TYPES_H
+-# include <sys/types.h>
+-#endif
+-#ifdef HAVE_SYS_STAT_H
+-# include <sys/stat.h>
+-#endif
+-#ifdef STDC_HEADERS
+-# include <stdlib.h>
+-# include <stddef.h>
+-#else
+-# ifdef HAVE_STDLIB_H
+-# include <stdlib.h>
+-# endif
+-#endif
+-#ifdef HAVE_STRING_H
+-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+-# include <memory.h>
+-# endif
+-# include <string.h>
+-#endif
+-#ifdef HAVE_STRINGS_H
+-# include <strings.h>
+-#endif
+-#ifdef HAVE_INTTYPES_H
+-# include <inttypes.h>
+-#endif
+-#ifdef HAVE_STDINT_H
+-# include <stdint.h>
+-#endif
+-#ifdef HAVE_UNISTD_H
+-# include <unistd.h>
+-#endif"
+-
+
+ # ac_fn_c_try_compile LINENO
+ # --------------------------
+@@ -172,172 +119,6 @@ fi
+
+ } # ac_fn_c_try_compile
+
+-# ac_fn_c_try_cpp LINENO
+-# ----------------------
+-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+-ac_fn_c_try_cpp ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_cpp conftest.$ac_ext"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+- ac_status=$?
+- if test -s conftest.err; then
+- grep -v '^ *+' conftest.err >conftest.er1
+- cat conftest.er1 >&5
+- mv -f conftest.er1 conftest.err
+- fi
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } > conftest.i && {
+- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+- test ! -s conftest.err
+- }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=1
+-fi
+- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_cpp
+-
+-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+-# -------------------------------------------------------
+-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+-# the include files in INCLUDES and setting the cache variable VAR
+-# accordingly.
+-ac_fn_c_check_header_mongrel ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if eval \${$3+:} false; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval \${$3+:} false; then :
+- $as_echo_n "(cached) " >&6
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-else
+- # Is the header compilable?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+-$as_echo_n "checking $2 usability... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-$4
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_header_compiler=yes
+-else
+- ac_header_compiler=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+-$as_echo "$ac_header_compiler" >&6; }
+-
+-# Is the header present?
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+-$as_echo_n "checking $2 presence... " >&6; }
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <$2>
+-_ACEOF
+-if ac_fn_c_try_cpp "$LINENO"; then :
+- ac_header_preproc=yes
+-else
+- ac_header_preproc=no
+-fi
+-rm -f conftest.err conftest.i conftest.$ac_ext
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+-$as_echo "$ac_header_preproc" >&6; }
+-
+-# So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+- yes:no: )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+- no:yes:* )
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+- ;;
+-esac
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+-$as_echo_n "checking for $2... " >&6; }
+-if eval \${$3+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- eval "$3=\$ac_header_compiler"
+-fi
+-eval ac_res=\$$3
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+-$as_echo "$ac_res" >&6; }
+-fi
+- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+-
+-} # ac_fn_c_check_header_mongrel
+-
+-# ac_fn_c_try_run LINENO
+-# ----------------------
+-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+-# that executables *can* be run.
+-ac_fn_c_try_run ()
+-{
+- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+- if { { ac_try="$ac_link"
+-case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_link") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+- { { case "(($ac_try" in
+- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+- *) ac_try_echo=$ac_try;;
+-esac
+-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+-$as_echo "$ac_try_echo"; } >&5
+- (eval "$ac_try") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; }; then :
+- ac_retval=0
+-else
+- $as_echo "$as_me: program exited with status $ac_status" >&5
+- $as_echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+- ac_retval=$ac_status
+-fi
+- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+- as_fn_set_status $ac_retval
+-
+-} # ac_fn_c_try_run
+-
+ # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists and can be compiled using the include files in
+@@ -372,267 +153,8 @@ $as_echo "$ac_res" >&6; }
+ # Local configure fragment for sysdeps/i386.
+
+
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if ${ac_cv_path_GREP+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if test -z "$GREP"; then
+- ac_path_GREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in grep ggrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+-# Check for GNU ac_path_GREP and select it if it is found.
+- # Check for GNU $ac_path_GREP
+-case `"$ac_path_GREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'GREP' >> "conftest.nl"
+- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_GREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_GREP="$ac_path_GREP"
+- ac_path_GREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_GREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_GREP"; then
+- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_GREP=$GREP
+-fi
+-
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+-$as_echo "$ac_cv_path_GREP" >&6; }
+- GREP="$ac_cv_path_GREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+-$as_echo_n "checking for egrep... " >&6; }
+-if ${ac_cv_path_EGREP+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+- then ac_cv_path_EGREP="$GREP -E"
+- else
+- if test -z "$EGREP"; then
+- ac_path_EGREP_found=false
+- # Loop through the user's path and test for each of PROGNAME-LIST
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_prog in egrep; do
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+-# Check for GNU ac_path_EGREP and select it if it is found.
+- # Check for GNU $ac_path_EGREP
+-case `"$ac_path_EGREP" --version 2>&1` in
+-*GNU*)
+- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+-*)
+- ac_count=0
+- $as_echo_n 0123456789 >"conftest.in"
+- while :
+- do
+- cat "conftest.in" "conftest.in" >"conftest.tmp"
+- mv "conftest.tmp" "conftest.in"
+- cp "conftest.in" "conftest.nl"
+- $as_echo 'EGREP' >> "conftest.nl"
+- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+- as_fn_arith $ac_count + 1 && ac_count=$as_val
+- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+- # Best one so far, save it but keep looking for a better one
+- ac_cv_path_EGREP="$ac_path_EGREP"
+- ac_path_EGREP_max=$ac_count
+- fi
+- # 10*(2^10) chars as input seems more than enough
+- test $ac_count -gt 10 && break
+- done
+- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+-esac
+-
+- $ac_path_EGREP_found && break 3
+- done
+- done
+- done
+-IFS=$as_save_IFS
+- if test -z "$ac_cv_path_EGREP"; then
+- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+- fi
+-else
+- ac_cv_path_EGREP=$EGREP
+-fi
+-
+- fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+-$as_echo "$ac_cv_path_EGREP" >&6; }
+- EGREP="$ac_cv_path_EGREP"
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+-$as_echo_n "checking for ANSI C header files... " >&6; }
+-if ${ac_cv_header_stdc+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <string.h>
+-#include <float.h>
+-
+-int
+-main ()
+-{
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
+- ac_cv_header_stdc=yes
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-
+-if test $ac_cv_header_stdc = yes; then
+- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <string.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "memchr" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-
+-_ACEOF
+-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+- $EGREP "free" >/dev/null 2>&1; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f conftest*
+-
+-fi
+-
+-if test $ac_cv_header_stdc = yes; then
+- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+- if test "$cross_compiling" = yes; then :
+- :
+-else
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <ctype.h>
+-#include <stdlib.h>
+-#if ((' ' & 0x0FF) == 0x020)
+-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+-#else
+-# define ISLOWER(c) \
+- (('a' <= (c) && (c) <= 'i') \
+- || ('j' <= (c) && (c) <= 'r') \
+- || ('s' <= (c) && (c) <= 'z'))
+-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+-#endif
+-
+-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+-int
+-main ()
+-{
+- int i;
+- for (i = 0; i < 256; i++)
+- if (XOR (islower (i), ISLOWER (i))
+- || toupper (i) != TOUPPER (i))
+- return 2;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+-
+-else
+- ac_cv_header_stdc=no
+-fi
+-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+- conftest.$ac_objext conftest.beam conftest.$ac_ext
+-fi
+-
+-fi
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+-$as_echo "$ac_cv_header_stdc" >&6; }
+-if test $ac_cv_header_stdc = yes; then
+-
+-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+-
+-fi
+-
+-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+- inttypes.h stdint.h unistd.h
+-do :
+- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */
+ "
+-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+- cat >>confdefs.h <<_ACEOF
+-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+-_ACEOF
+-
+-fi
+-
+-done
+-
+-
+-ac_fn_c_check_header_mongrel "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "$ac_includes_default"
+ if test "x$ac_cv_header_cpuid_h" = xyes; then :
+
+ else
+diff -urpN '--exclude=autom4te.cache' glibc-2.15.orig/sysdeps/i386/configure.in glibc-2.15/sysdeps/i386/configure.in
+--- glibc-2.15.orig/sysdeps/i386/configure.in 2017-02-08 14:28:19.951516034 -0800
++++ glibc-2.15/sysdeps/i386/configure.in 2017-02-08 17:24:29.995973278 -0800
+@@ -1,8 +1,9 @@
+ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+ # Local configure fragment for sysdeps/i386.
+
+-AC_HEADER_CHECK([cpuid.h], ,
+- [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])])
++AC_CHECK_HEADER([cpuid.h], ,
++ [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])],
++ [/* No default includes. */])
+
+ AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
+ libc_cv_cpp_asm_debuginfo, [dnl
diff --git a/packages/glibc/2.15/910-asm-i686.patch b/packages/glibc/2.15/910-asm-i686.patch
new file mode 100644
index 0000000..b049887
--- /dev/null
+++ b/packages/glibc/2.15/910-asm-i686.patch
@@ -0,0 +1,50 @@
+Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org>
+Date: 2010-04-18
+Initial Package Version: 2.11.1
+Upstream Status: Not Submitted
+Origin: http://www.eglibc.org/archives/patches/msg00073.html
+Description: Fixes the following build problem with GCC-4.5.0:
+
+/mnt/lfs/sources/libc-build/math/s_frexp.os.dt -MT /mnt/lfs/sources/libc-build/math/s_frexp.os
+./sysdeps/i386/fpu/s_frexp.S: Assembler messages:
+./sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef"
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `.'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1'
+./sysdeps/i386/fpu/s_frexp.S:66: Error: expected comma after name `' in .size directive
+./sysdeps/i386/fpu/s_frexp.S:66: Error: ".endif" without ".if"
+./sysdeps/i386/fpu/s_frexp.S:66: Error: junk `.get_pc_thunk.dx' after expression
+make[2]: *** [/mnt/lfs/sources/libc-build/math/s_frexp.os] Error 1
+
+diff -Naur glibc-2.11.1.orig/nptl/sysdeps/pthread/pt-initfini.c glibc-2.11.1/nptl/sysdeps/pthread/pt-initfini.c
+--- glibc-2.11.1.orig/nptl/sysdeps/pthread/pt-initfini.c 2009-12-08 20:10:20.000000000 +0000
++++ glibc-2.11.1/nptl/sysdeps/pthread/pt-initfini.c 2010-04-17 11:34:06.882681001 +0000
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+
+diff -Naur glibc-2.11.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h glibc-2.11.1/sysdeps/unix/sysv/linux/i386/sysdep.h
+--- glibc-2.11.1.orig/sysdeps/unix/sysv/linux/i386/sysdep.h 2009-12-08 20:10:20.000000000 +0000
++++ glibc-2.11.1/sysdeps/unix/sysv/linux/i386/sysdep.h 2010-04-17 11:34:06.882681001 +0000
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
+
diff --git a/packages/glibc/2.15/920-fix-rpc_parse-format.patch b/packages/glibc/2.15/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.15/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.15/940-nis-bogus-conditional.patch b/packages/glibc/2.15/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.15/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.15/990-try-link-static.patch b/packages/glibc/2.15/990-try-link-static.patch
new file mode 100644
index 0000000..a0ffadd
--- /dev/null
+++ b/packages/glibc/2.15/990-try-link-static.patch
@@ -0,0 +1,171 @@
+[Patch modified to apply to 2.15]
+
+commit 07037eeb43ca1e0ac2802e3a1492cecf869c63c6
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Thu Mar 8 00:17:27 2012 +0000
+
+ Fix .ctors/.dtors header configure test for bootstrapping.
+
+diff -urpN glibc-2.15.orig/aclocal.m4 glibc-2.15/aclocal.m4
+--- glibc-2.15.orig/aclocal.m4 2017-02-08 11:27:28.445657746 -0800
++++ glibc-2.15/aclocal.m4 2017-02-08 11:37:25.818463475 -0800
+@@ -114,3 +114,17 @@ AC_CACHE_CHECK(whether $LD is GNU ld, li
+ [LIBC_PROG_FOO_GNU($LD, libc_cv_prog_ld_gnu=yes, libc_cv_prog_ld_gnu=no)])
+ gnu_ld=$libc_cv_prog_ld_gnu
+ ])
++
++dnl Run a static link test with -nostdlib -nostartfiles.
++dnl LIBC_TRY_LINK_STATIC([code], [action-if-true], [action-if-false])
++AC_DEFUN([LIBC_TRY_LINK_STATIC],
++[cat > conftest.c <<EOF
++int _start (void) { return 0; }
++int __start (void) { return 0; }
++$1
++EOF
++AS_IF([AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
++ conftest.c -static -nostartfiles -nostdlib
++ 1>&AS_MESSAGE_LOG_FD])],
++ [$2], [$3])
++rm -f conftest*])
+diff -urpN glibc-2.15.orig/configure glibc-2.15/configure
+--- glibc-2.15.orig/configure 2017-02-08 11:27:28.453657802 -0800
++++ glibc-2.15/configure 2017-02-08 11:47:36.184360147 -0800
+@@ -6147,29 +6147,32 @@ $as_echo_n "checking for .preinit_array/
+ if ${libc_cv_initfini_array+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- cat > conftest.c <<EOF
++ cat > conftest.c <<EOF
+ int _start (void) { return 0; }
+ int __start (void) { return 0; }
++
+ int foo (void) { return 1; }
+ int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
++
+ EOF
+- if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
+- -static -nostartfiles -nostdlib 1>&5'
++if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
++ conftest.c -static -nostartfiles -nostdlib
++ 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; }
+- then
+- if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
+- libc_cv_initfini_array=yes
+- else
+- libc_cv_initfini_array=no
+- fi
++ test $ac_status = 0; }; }; then :
++ if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
++ libc_cv_initfini_array=yes
+ else
+ libc_cv_initfini_array=no
+ fi
+- rm -f conftest*
++else
++ libc_cv_initfini_array=no
++fi
++rm -f conftest*
++
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_initfini_array" >&5
+ $as_echo "$libc_cv_initfini_array" >&6; }
+@@ -6183,21 +6186,22 @@ if ${libc_cv_ctors_header+:} false; then
+ $as_echo_n "(cached) " >&6
+ else
+ libc_cv_ctors_header=yes
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
++ cat > conftest.c <<EOF
++int _start (void) { return 0; }
++int __start (void) { return 0; }
++
++__attribute__ ((constructor)) void ctor (void) { asm (""); }
++__attribute__ ((destructor)) void dtor (void) { asm (""); }
+
+-int
+-main ()
+-{
+-
+-__attribute__ ((constructor)) void ctor (void) { puts("ctor"); }
+-__attribute__ ((destructor)) void dtor (void) { puts("dtor"); }
+-
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
++EOF
++if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest
++ conftest.c -static -nostartfiles -nostdlib
++ 1>&5'
++ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }; then :
+ if $READELF -WS conftest$ac_exeext | $AWK '
+ { gsub(/\[ */, "[") }
+ $2 == ".ctors" || $2 == ".dtors" {
+@@ -6219,8 +6223,7 @@ else
+ as_fn_error $? "missing __attribute__ ((constructor)) support??" "$LINENO" 5
+
+ fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
++rm -f conftest*
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ctors_header" >&5
+diff -urpN glibc-2.15.orig/configure.in glibc-2.15/configure.in
+--- glibc-2.15.orig/configure.in 2017-02-08 11:27:28.433657663 -0800
++++ glibc-2.15/configure.in 2017-02-08 11:46:58.994915812 -0800
+@@ -1439,24 +1439,17 @@ EOF
+
+ AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
+ libc_cv_initfini_array, [dnl
+- cat > conftest.c <<EOF
+-int _start (void) { return 0; }
+-int __start (void) { return 0; }
++LIBC_TRY_LINK_STATIC([
+ int foo (void) { return 1; }
+ int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
+-EOF
+- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
+- -static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD])
+- then
+- if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
+- libc_cv_initfini_array=yes
+- else
+- libc_cv_initfini_array=no
+- fi
++],
++ [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
++ libc_cv_initfini_array=yes
+ else
+ libc_cv_initfini_array=no
+- fi
+- rm -f conftest*])
++ fi],
++ [libc_cv_initfini_array=no])
++])
+ if test $libc_cv_initfini_array != yes; then
+ AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
+ fi
+@@ -1464,9 +1457,9 @@ EOF
+ AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
+ libc_cv_ctors_header, [dnl
+ libc_cv_ctors_header=yes
+- AC_TRY_LINK([], [
+-__attribute__ ((constructor)) void ctor (void) { puts("ctor"); }
+-__attribute__ ((destructor)) void dtor (void) { puts("dtor"); }
++ LIBC_TRY_LINK_STATIC([
++__attribute__ ((constructor)) void ctor (void) { asm (""); }
++__attribute__ ((destructor)) void dtor (void) { asm (""); }
+ ],
+ [dnl
+ AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
diff --git a/packages/glibc/2.15/991-builtin_expect.patch b/packages/glibc/2.15/991-builtin_expect.patch
new file mode 100644
index 0000000..8a327fa
--- /dev/null
+++ b/packages/glibc/2.15/991-builtin_expect.patch
@@ -0,0 +1,82 @@
+[As applied to 2.15]
+
+commit 3857022a761ea7251f8e5c0e45d382ebc3e34cf9
+Author: Ulrich Drepper <drepper@gmail.com>
+Date: Sun Jan 8 09:21:09 2012 -0500
+
+ No need for test for __builtin_expect
+
+diff -urpN glibc-2.15.orig/configure glibc-2.15/configure
+--- glibc-2.15.orig/configure 2017-02-08 12:47:52.580858002 -0800
++++ glibc-2.15/configure 2017-02-08 13:01:40.682870318 -0800
+@@ -7185,38 +7185,6 @@ if test "$libc_cv_c_asmcr0_bug" != 'no';
+ fi
+ fi
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5
+-$as_echo_n "checking for __builtin_expect... " >&6; }
+-if ${libc_cv_gcc_builtin_expect+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- cat > conftest.c <<EOF
+-#line $LINENO "configure"
+-int foo (int a)
+-{
+- a = __builtin_expect (a, 10);
+- return a == 10 ? 0 : 1;
+-}
+-EOF
+-if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles
+- -o conftest conftest.c -lgcc >&5'
+- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; }; then
+- libc_cv_gcc_builtin_expect=yes
+-else
+- libc_cv_gcc_builtin_expect=no
+-fi
+-rm -f conftest*
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_gcc_builtin_expect" >&5
+-$as_echo "$libc_cv_gcc_builtin_expect" >&6; }
+-if test "$libc_cv_gcc_builtin_expect" = no; then
+- as_fn_error $? "support for __builtin_expect needed" "$LINENO" 5
+-fi
+-
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_memset" >&5
+ $as_echo_n "checking for __builtin_memset... " >&6; }
+ if ${libc_cv_gcc_builtin_memset+:} false; then :
+diff -urpN glibc-2.15.orig/configure.in glibc-2.15/configure.in
+--- glibc-2.15.orig/configure.in 2017-02-08 12:47:52.580858002 -0800
++++ glibc-2.15/configure.in 2017-02-08 13:01:17.638580410 -0800
+@@ -2098,28 +2098,6 @@ if test "$libc_cv_c_asmcr0_bug" != 'no';
+ fi
+ fi
+
+-dnl Check whether compiler understands __builtin_expect.
+-AC_CACHE_CHECK(for __builtin_expect, libc_cv_gcc_builtin_expect,
+-[cat > conftest.c <<EOF
+-#line $LINENO "configure"
+-int foo (int a)
+-{
+- a = __builtin_expect (a, 10);
+- return a == 10 ? 0 : 1;
+-}
+-EOF
+-dnl No \ in command here because it ends up inside ''.
+-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles
+- -o conftest conftest.c -lgcc >&AS_MESSAGE_LOG_FD]); then
+- libc_cv_gcc_builtin_expect=yes
+-else
+- libc_cv_gcc_builtin_expect=no
+-fi
+-rm -f conftest*])
+-if test "$libc_cv_gcc_builtin_expect" = no; then
+- AC_MSG_ERROR([support for __builtin_expect needed])
+-fi
+-
+ AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
+ cat > conftest.c <<\EOF
+ void zero (void *x)
diff --git a/packages/glibc/2.15/992-gcc_s-suffix.patch b/packages/glibc/2.15/992-gcc_s-suffix.patch
new file mode 100644
index 0000000..6dbc70f
--- /dev/null
+++ b/packages/glibc/2.15/992-gcc_s-suffix.patch
@@ -0,0 +1,108 @@
+[As applied to 2.15]
+commit 3a533ca370725b68b516e6b74adf4727d17ed28a
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Apr 24 10:22:45 2012 +0000
+
+ Don't handle libgcc_s suffixes.
+
+diff -urpN glibc-2.15.orig/config.make.in glibc-2.15/config.make.in
+--- glibc-2.15.orig/config.make.in 2017-02-08 13:24:23.338055977 -0800
++++ glibc-2.15/config.make.in 2017-02-08 13:25:21.810625337 -0800
+@@ -50,7 +50,6 @@ have-z-execstack = @libc_cv_z_execstack@
+ have-initfini = @libc_cv_have_initfini@
+ have-Bgroup = @libc_cv_Bgroup@
+ have-as-needed = @libc_cv_as_needed@
+-libgcc_s_suffix = @libc_cv_libgcc_s_suffix@
+ need-nopic-initfini = @nopic_initfini@
+ with-fp = @with_fp@
+ old-glibc-headers = @old_glibc_headers@
+diff -urpN glibc-2.15.orig/configure glibc-2.15/configure
+--- glibc-2.15.orig/configure 2017-02-08 13:24:23.346056054 -0800
++++ glibc-2.15/configure 2017-02-08 13:27:07.327670602 -0800
+@@ -654,7 +654,6 @@ libc_cv_z_execstack
+ libc_cv_z_combreloc
+ ASFLAGS_config
+ libc_cv_as_needed
+-libc_cv_libgcc_s_suffix
+ libc_cv_Bgroup
+ libc_cv_cc_with_libunwind
+ VERSIONING
+@@ -6465,24 +6464,6 @@ fi
+ $as_echo "$libc_cv_Bgroup" >&6; }
+
+
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgcc_s suffix" >&5
+-$as_echo_n "checking for libgcc_s suffix... " >&6; }
+-if ${libc_cv_libgcc_s_suffix+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- cat > conftest.c <<EOF
+-int main (void) { return 0; }
+-EOF
+- libc_cv_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
+- -fPIC -shared -shared-libgcc -o conftest.so \
+- conftest.c -v 2>&1 >/dev/null \
+- | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
+- rm -f conftest*
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_libgcc_s_suffix" >&5
+-$as_echo "$libc_cv_libgcc_s_suffix" >&6; }
+-
+-
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --as-needed option" >&5
+ $as_echo_n "checking for --as-needed option... " >&6; }
+ if ${libc_cv_as_needed+:} false; then :
+@@ -6493,7 +6474,7 @@ int main (void) { return 0; }
+ EOF
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+- -lgcc_s$libc_cv_libgcc_s_suffix -Wl,--as-needed
++ -lgcc_s -Wl,--as-needed
+ -nostdlib 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+diff -urpN glibc-2.15.orig/configure.in glibc-2.15/configure.in
+--- glibc-2.15.orig/configure.in 2017-02-08 13:24:23.346056054 -0800
++++ glibc-2.15/configure.in 2017-02-08 13:26:44.383441535 -0800
+@@ -1639,20 +1639,6 @@ EOF
+ rm -f conftest*])
+ AC_SUBST(libc_cv_Bgroup)
+
+- AC_CACHE_CHECK(for libgcc_s suffix,
+- libc_cv_libgcc_s_suffix, [dnl
+- cat > conftest.c <<EOF
+-int main (void) { return 0; }
+-EOF
+-changequote(,)dnl
+- libc_cv_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
+- -fPIC -shared -shared-libgcc -o conftest.so \
+- conftest.c -v 2>&1 >/dev/null \
+- | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
+-changequote([,])dnl
+- rm -f conftest*])
+- AC_SUBST(libc_cv_libgcc_s_suffix)
+-
+ AC_CACHE_CHECK(for --as-needed option,
+ libc_cv_as_needed, [dnl
+ cat > conftest.c <<EOF
+@@ -1660,7 +1646,7 @@ int main (void) { return 0; }
+ EOF
+ if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+- -lgcc_s$libc_cv_libgcc_s_suffix -Wl,--as-needed
++ -lgcc_s -Wl,--as-needed
+ -nostdlib 1>&AS_MESSAGE_LOG_FD])
+ then
+ libc_cv_as_needed=yes
+diff -urpN glibc-2.15.orig/Makeconfig glibc-2.15/Makeconfig
+--- glibc-2.15.orig/Makeconfig 2017-02-08 13:24:23.338055977 -0800
++++ glibc-2.15/Makeconfig 2017-02-08 13:24:31.262132679 -0800
+@@ -565,7 +565,7 @@ endif
+ ifneq ($(have-as-needed),yes)
+ libgcc_eh := -lgcc_eh $(libunwind)
+ else
+- libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
++ libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
+ endif
+ gnulib := -lgcc $(libgcc_eh)
+ static-gnulib := -lgcc -lgcc_eh $(libunwind)
diff --git a/packages/glibc/2.15/999-new-tools.patch b/packages/glibc/2.15/999-new-tools.patch
new file mode 100644
index 0000000..e0632a3
--- /dev/null
+++ b/packages/glibc/2.15/999-new-tools.patch
@@ -0,0 +1,69 @@
+diff -urpN glibc-2.15.orig/configure glibc-2.15/configure
+--- glibc-2.15.orig/configure 2012-03-19 07:56:58.000000000 -0700
++++ glibc-2.15/configure 2017-02-08 00:38:53.578049806 -0800
+@@ -4922,7 +4922,7 @@ $as_echo_n "checking version of $CC... "
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.4* | 4.[0-9]* )
++ 3.4* | [4-9].* )
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -4985,7 +4985,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5112,7 +5112,7 @@ $as_echo_n "checking version of $MAKEINF
+ ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 4.*)
++ [4-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5172,7 +5172,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.15.orig/configure.in glibc-2.15/configure.in
+--- glibc-2.15.orig/configure.in 2012-01-01 04:16:32.000000000 -0800
++++ glibc-2.15/configure.in 2017-02-08 00:30:47.440841480 -0800
+@@ -1000,11 +1000,11 @@ fi
+ # These programs are version sensitive.
+ AC_CHECK_TOOL_PREFIX
+ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
++ [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | [4-9].* ],
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
+@@ -1012,10 +1012,10 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsg
+ MSGFMT=: aux_missing="$aux_missing msgfmt")
+ AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
+ [GNU texinfo.* \([0-9][0-9.]*\)],
+- [4.*],
++ [[4-9].*],
+ MAKEINFO=: aux_missing="$aux_missing makeinfo")
+ AC_CHECK_PROG_VER(SED, sed, --version,
+- [GNU sed version \([0-9]*\.[0-9.]*\)],
++ [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
+ [3.0[2-9]*|3.[1-9]*|[4-9]*],
+ SED=: aux_missing="$aux_missing sed")
+
diff --git a/packages/glibc/2.15/version.desc b/packages/glibc/2.15/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.15/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.16.0/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.16.0/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.16.0/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.16.0/102-fix-signed-shift-overlow.patch b/packages/glibc/2.16.0/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.16.0/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.16.0/103-dl-openat64-variadic.patch b/packages/glibc/2.16.0/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.16.0/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.16.0/104-unused-variables.patch b/packages/glibc/2.16.0/104-unused-variables.patch
new file mode 100644
index 0000000..2a85a0c
--- /dev/null
+++ b/packages/glibc/2.16.0/104-unused-variables.patch
@@ -0,0 +1,157 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ float __cosf(float x)
+ {
+ float y[2],z=0.0;
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.16.0/105-misleading-indentation.patch b/packages/glibc/2.16.0/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.16.0/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.16.0/106-dl-open-array-bounds.patch b/packages/glibc/2.16.0/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..a8efe9a
--- /dev/null
+++ b/packages/glibc/2.16.0/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.16.0/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.16.0/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..3c34e01
--- /dev/null
+++ b/packages/glibc/2.16.0/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.16.0/300-macos-cross-rpcgen.patch b/packages/glibc/2.16.0/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.16.0/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.16.0/500-fix-parsing-of-numeric-hosts-in-gethostbyname_r.patch b/packages/glibc/2.16.0/500-fix-parsing-of-numeric-hosts-in-gethostbyname_r.patch
new file mode 100644
index 0000000..803ac6f
--- /dev/null
+++ b/packages/glibc/2.16.0/500-fix-parsing-of-numeric-hosts-in-gethostbyname_r.patch
@@ -0,0 +1,222 @@
+From 536ae0651b015b1f6140ec01775d4deaacf12c0c Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Mon, 21 Jan 2013 17:41:28 +0100
+Subject: [PATCH] Fix parsing of numeric hosts in gethostbyname_r
+
+Ported from master, fixes CVE-2015-0235.
+---
+ nss/Makefile | 2 -
+ nss/digits_dots.c | 73 +++++++++++++------------------------------------
+ nss/getXXbyYY_r.c | 3 ++
+ nss/test-digits-dots.c | 38 +++++++++++++++++++++++++
+ 4 files changed, 62 insertions(+), 54 deletions(-)
+ create mode 100644 nss/test-digits-dots.c
+
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -38,7 +38,7 @@ install-bin := getent makedb
+ makedb-modules = xmalloc hash-string
+ extra-objs += $(makedb-modules:=.o)
+
+-tests = test-netdb tst-nss-test1
++tests = test-netdb tst-nss-test1 test-digits-dots
+ xtests = bug-erange
+
+ include ../Makeconfig
+--- a/nss/digits_dots.c
++++ b/nss/digits_dots.c
+@@ -46,7 +46,10 @@ __nss_hostname_digits_dots (const char *
+ {
+ if (h_errnop)
+ *h_errnop = NETDB_INTERNAL;
+- *result = NULL;
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_TRYAGAIN;
++ else
++ *result = NULL;
+ return -1;
+ }
+
+@@ -83,14 +86,16 @@ __nss_hostname_digits_dots (const char *
+ }
+
+ size_needed = (sizeof (*host_addr)
+- + sizeof (*h_addr_ptrs) + strlen (name) + 1);
++ + sizeof (*h_addr_ptrs)
++ + sizeof (*h_alias_ptr) + strlen (name) + 1);
+
+ if (buffer_size == NULL)
+ {
+ if (buflen < size_needed)
+ {
++ *status = NSS_STATUS_TRYAGAIN;
+ if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
++ *h_errnop = NETDB_INTERNAL;
+ __set_errno (ERANGE);
+ goto done;
+ }
+@@ -109,7 +114,7 @@ __nss_hostname_digits_dots (const char *
+ *buffer_size = 0;
+ __set_errno (save);
+ if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
++ *h_errnop = NETDB_INTERNAL;
+ *result = NULL;
+ goto done;
+ }
+@@ -149,7 +154,9 @@ __nss_hostname_digits_dots (const char *
+ if (! ok)
+ {
+ *h_errnop = HOST_NOT_FOUND;
+- if (buffer_size)
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
+ *result = NULL;
+ goto done;
+ }
+@@ -190,7 +197,7 @@ __nss_hostname_digits_dots (const char *
+ if (buffer_size == NULL)
+ *status = NSS_STATUS_SUCCESS;
+ else
+- *result = resbuf;
++ *result = resbuf;
+ goto done;
+ }
+
+@@ -201,15 +208,6 @@ __nss_hostname_digits_dots (const char *
+
+ if ((isxdigit (name[0]) && strchr (name, ':') != NULL) || name[0] == ':')
+ {
+- const char *cp;
+- char *hostname;
+- typedef unsigned char host_addr_t[16];
+- host_addr_t *host_addr;
+- typedef char *host_addr_list_t[2];
+- host_addr_list_t *h_addr_ptrs;
+- size_t size_needed;
+- int addr_size;
+-
+ switch (af)
+ {
+ default:
+@@ -225,7 +223,10 @@ __nss_hostname_digits_dots (const char *
+ /* This is not possible. We cannot represent an IPv6 address
+ in an `struct in_addr' variable. */
+ *h_errnop = HOST_NOT_FOUND;
+- *result = NULL;
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
++ *result = NULL;
+ goto done;
+
+ case AF_INET6:
+@@ -233,42 +234,6 @@ __nss_hostname_digits_dots (const char *
+ break;
+ }
+
+- size_needed = (sizeof (*host_addr)
+- + sizeof (*h_addr_ptrs) + strlen (name) + 1);
+-
+- if (buffer_size == NULL && buflen < size_needed)
+- {
+- if (h_errnop != NULL)
+- *h_errnop = TRY_AGAIN;
+- __set_errno (ERANGE);
+- goto done;
+- }
+- else if (buffer_size != NULL && *buffer_size < size_needed)
+- {
+- char *new_buf;
+- *buffer_size = size_needed;
+- new_buf = realloc (*buffer, *buffer_size);
+-
+- if (new_buf == NULL)
+- {
+- save = errno;
+- free (*buffer);
+- __set_errno (save);
+- *buffer = NULL;
+- *buffer_size = 0;
+- *result = NULL;
+- goto done;
+- }
+- *buffer = new_buf;
+- }
+-
+- memset (*buffer, '\0', size_needed);
+-
+- host_addr = (host_addr_t *) *buffer;
+- h_addr_ptrs = (host_addr_list_t *)
+- ((char *) host_addr + sizeof (*host_addr));
+- hostname = (char *) h_addr_ptrs + sizeof (*h_addr_ptrs);
+-
+ for (cp = name;; ++cp)
+ {
+ if (!*cp)
+@@ -281,7 +246,9 @@ __nss_hostname_digits_dots (const char *
+ if (inet_pton (AF_INET6, name, host_addr) <= 0)
+ {
+ *h_errnop = HOST_NOT_FOUND;
+- if (buffer_size)
++ if (buffer_size == NULL)
++ *status = NSS_STATUS_NOTFOUND;
++ else
+ *result = NULL;
+ goto done;
+ }
+--- /dev/null
++++ b/nss/test-digits-dots.c
+@@ -0,0 +1,38 @@
++/* Copyright (C) 2013 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/>. */
++
++/* Testcase for BZ #15014 */
++
++#include <stdlib.h>
++#include <netdb.h>
++#include <errno.h>
++
++static int
++do_test (void)
++{
++ char buf[32];
++ struct hostent *result = NULL;
++ struct hostent ret;
++ int h_err = 0;
++ int err;
++
++ err = gethostbyname_r ("1.2.3.4", &ret, buf, sizeof (buf), &result, &h_err);
++ return err == ERANGE && h_err == NETDB_INTERNAL ? EXIT_SUCCESS : EXIT_FAILURE;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+--- a/nss/getXXbyYY_r.c
++++ b/nss/getXXbyYY_r.c
+@@ -179,6 +179,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, L
+ case -1:
+ return errno;
+ case 1:
++#ifdef NEED_H_ERRNO
++ any_service = true;
++#endif
+ goto done;
+ }
+ #endif
diff --git a/packages/glibc/2.16.0/920-fix-rpc_parse-format.patch b/packages/glibc/2.16.0/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.16.0/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.16.0/940-nis-bogus-conditional.patch b/packages/glibc/2.16.0/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.16.0/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.16.0/999-new-tools.patch b/packages/glibc/2.16.0/999-new-tools.patch
new file mode 100644
index 0000000..e753365
--- /dev/null
+++ b/packages/glibc/2.16.0/999-new-tools.patch
@@ -0,0 +1,33 @@
+diff -urpN glibc-2.16.0.orig/configure glibc-2.16.0/configure
+--- glibc-2.16.0.orig/configure 2012-06-30 12:12:34.000000000 -0700
++++ glibc-2.16.0/configure 2017-02-08 00:39:03.778150878 -0800
+@@ -4845,7 +4845,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+@@ -5032,7 +5032,7 @@ else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $SED" >&5
+ $as_echo_n "checking version of $SED... " >&6; }
+- ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'`
++ ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed[^0-9]* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 3.0[2-9]*|3.[1-9]*|[4-9]*)
+diff -urpN glibc-2.16.0.orig/configure.in glibc-2.16.0/configure.in
+--- glibc-2.16.0.orig/configure.in 2012-06-30 12:12:34.000000000 -0700
++++ glibc-2.16.0/configure.in 2017-02-08 00:14:07.996446792 -0800
+@@ -940,7 +940,7 @@ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}g
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
diff --git a/packages/glibc/2.16.0/version.desc b/packages/glibc/2.16.0/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.16.0/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.17/100-Fix-ARM-build-with-GCC-trunk.patch b/packages/glibc/2.17/100-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..59f95aa
--- /dev/null
+++ b/packages/glibc/2.17/100-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,54 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c b/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+index 6ccd9b4..660d148 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -22,7 +22,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -20,7 +20,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+
+--
+1.9.4
+
diff --git a/packages/glibc/2.17/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.17/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.17/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.17/102-fix-signed-shift-overlow.patch b/packages/glibc/2.17/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.17/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.17/103-dl-openat64-variadic.patch b/packages/glibc/2.17/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.17/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.17/104-unused-variables.patch b/packages/glibc/2.17/104-unused-variables.patch
new file mode 100644
index 0000000..80e0ff2
--- /dev/null
+++ b/packages/glibc/2.17/104-unused-variables.patch
@@ -0,0 +1,157 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+ /**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+ /**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.17/105-misleading-indentation.patch b/packages/glibc/2.17/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.17/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.17/106-dl-open-array-bounds.patch b/packages/glibc/2.17/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..a8efe9a
--- /dev/null
+++ b/packages/glibc/2.17/106-dl-open-array-bounds.patch
@@ -0,0 +1,27 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.17/120-support-make4.patch b/packages/glibc/2.17/120-support-make4.patch
new file mode 100644
index 0000000..ca2bae0
--- /dev/null
+++ b/packages/glibc/2.17/120-support-make4.patch
@@ -0,0 +1,38 @@
+Original patch modified: Removed ChangeLog and NEWS sections, ajdust for configure.in
+KS
+
+From: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
+Date: Thu, 31 Oct 2013 02:37:50 +0000 (+1000)
+Subject: Accept make versions 4.0 and greater
+X-Git-Tag: glibc-2.19~556
+X-Git-Url: https://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=28d708c44bc47b56f6551ff285f78edcf61c208a;hp=a56ee40b176d0a3f47f2a7eb75208f2e3763c9fd
+
+Accept make versions 4.0 and greater
+---
+
+diff --git a/configure b/configure
+index f382138..5e61abd 100755
+--- a/configure
++++ b/configure
+@@ -4761,7 +4761,7 @@ $as_echo_n "checking version of $MAKE... " >&6; }
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+diff --git a/configure.in b/configure.in
+index 49b70fd..6da8efd 100644
+--- a/configure.in
++++ b/configure.in
+@@ -984,7 +984,7 @@ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
diff --git a/packages/glibc/2.17/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.17/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..3c34e01
--- /dev/null
+++ b/packages/glibc/2.17/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.17/300-macos-cross-rpcgen.patch b/packages/glibc/2.17/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.17/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.17/920-fix-rpc_parse-format.patch b/packages/glibc/2.17/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.17/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.17/940-nis-bogus-conditional.patch b/packages/glibc/2.17/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.17/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.17/version.desc b/packages/glibc/2.17/version.desc
new file mode 100644
index 0000000..9ac7dc2
--- /dev/null
+++ b/packages/glibc/2.17/version.desc
@@ -0,0 +1 @@
+# Not obsolete (CentOS 7, EOL 06/2024)
diff --git a/packages/glibc/2.18/100-4f2bcda-ARM-Fix-clone-code-when-built-for-Thumb.patch b/packages/glibc/2.18/100-4f2bcda-ARM-Fix-clone-code-when-built-for-Thumb.patch
new file mode 100644
index 0000000..40e3632
--- /dev/null
+++ b/packages/glibc/2.18/100-4f2bcda-ARM-Fix-clone-code-when-built-for-Thumb.patch
@@ -0,0 +1,65 @@
+commit 4f2bcda964d4fff56855e0c66198c9bcb682ea1e
+Author: Will Newton <will.newton@linaro.org>
+Date: Thu Aug 29 20:10:26 2013 +0100
+
+ ARM: Fix clone code when built for Thumb.
+
+ The mov lr, pc instruction will lose the Thumb bit from the return address
+ so use blx lr instead.
+
+ ports/ChangeLog.arm:
+
+ 2013-08-30 Will Newton <will.newton@linaro.org>
+
+ [BZ #15909]
+ * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
+ instead of mov lr, pc.
+
+ (cherry picked from commit 6b06ac56cdfc9293908724e51e827534e97819aa)
+
+diff --git a/NEWS b/NEWS
+index b023c30..f64fb82 100644
+--- a/NEWS
++++ b/NEWS
+@@ -5,6 +5,12 @@ See the end for copying conditions.
+ Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
+ using `glibc' in the "product" field.
+
++Version 2.18.1
++
++* The following bugs are resolved with this release:
++
++ 15909.
++
+ Version 2.18
+
+ * The following bugs are resolved with this release:
+diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
+index 1e7a35c..54debd7 100644
+--- a/ports/ChangeLog.arm
++++ b/ports/ChangeLog.arm
+@@ -1,3 +1,9 @@
++2013-08-30 Will Newton <will.newton@linaro.org>
++
++ [BZ #15909]
++ * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Use blx
++ instead of mov lr, pc.
++
+ 2013-07-03 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/arm/include/bits/setjmp.h [_ISOMAC] (JMP_BUF_REGLIST):
+diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S
+index ce9c2a5..6e74fa7 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/clone.S
++++ b/ports/sysdeps/unix/sysv/linux/arm/clone.S
+@@ -93,8 +93,8 @@ PSEUDO_END (__clone)
+ mov lr, pc
+ bx ip
+ #else
+- mov lr, pc
+- ldr pc, [sp], #8
++ ldr lr, [sp], #8
++ blx lr
+ #endif
+
+ @ and we are done, passing the return value through r0
diff --git a/packages/glibc/2.18/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.18/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.18/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.18/102-fix-signed-shift-overlow.patch b/packages/glibc/2.18/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.18/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.18/103-dl-openat64-variadic.patch b/packages/glibc/2.18/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.18/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.18/104-unused-variables.patch b/packages/glibc/2.18/104-unused-variables.patch
new file mode 100644
index 0000000..642edb1
--- /dev/null
+++ b/packages/glibc/2.18/104-unused-variables.patch
@@ -0,0 +1,157 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
diff --git a/packages/glibc/2.18/105-misleading-indentation.patch b/packages/glibc/2.18/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.18/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.18/106-dl-open-array-bounds.patch b/packages/glibc/2.18/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..08a9076
--- /dev/null
+++ b/packages/glibc/2.18/106-dl-open-array-bounds.patch
@@ -0,0 +1,36 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -211,7 +211,7 @@ dl_open_worker (void *a)
+ struct link_map *l = _dl_find_dso_for_object ((ElfW(Addr)) caller_dlopen);
+
+ if (l)
+- call_map = l;
++ call_map = l;
+
+ if (args->nsid == __LM_ID_CALLER)
+ args->nsid = call_map->l_ns;
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch b/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch
new file mode 100644
index 0000000..7ad9fdf
--- /dev/null
+++ b/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch
@@ -0,0 +1,78 @@
+commit 2770d15e7e880821fc586619c59eb45180628e16
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date: Thu Oct 3 08:26:21 2013 +0530
+
+ Fix PI mutex check in pthread_cond_broadcast and pthread_cond_signal
+
+ Fixes BZ #15996.
+
+ The check had a typo - it checked for PTHREAD_MUTEX_ROBUST_NP instead
+ of PTHREAD_MUTEX_ROBUST_NORMAL_NP. It has now been replaced by the
+ already existing convenience macro USE_REQUEUE_PI.
+
+diff --git a/NEWS b/NEWS
+index f64fb82..fb6069d 100644
+--- a/NEWS
++++ b/NEWS
+@@ -9,7 +9,7 @@ Version 2.18.1
+
+ * The following bugs are resolved with this release:
+
+- 15909.
++ 15909, 15996.
+
+ Version 2.18
+
+diff --git a/nptl/ChangeLog b/nptl/ChangeLog
+index eae5079..2d78490 100644
+--- a/nptl/ChangeLog
++++ b/nptl/ChangeLog
+@@ -1,3 +1,12 @@
++2013-10-03 Siddhesh Poyarekar <siddhesh@redhat.com>
++
++ [BZ #15996]
++ * pthread_cond_broadcast.c (__pthread_cond_broadcast)
++ [lll_futex_cmp_requeue_pi && __ASSUME_REQUEUE_PI]: Use
++ USE_REQUEUE_PI.
++ * pthread_cond_signal.c (__pthread_cond_signal)
++ [lll_futex_cmd_requeue_pi && __ASSUME_REQUEUE_PI]: Likewise.
++
+ 2013-07-23 David S. Miller <davem@davemloft.net>
+
+ * tst-cancel4.c (WRITE_BUFFER_SIZE): Adjust comment.
+diff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
+index 0702ec0..7ba9efa 100644
+--- a/nptl/pthread_cond_broadcast.c
++++ b/nptl/pthread_cond_broadcast.c
+@@ -63,10 +63,7 @@ __pthread_cond_broadcast (cond)
+
+ #if (defined lll_futex_cmp_requeue_pi \
+ && defined __ASSUME_REQUEUE_PI)
+- int pi_flag = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NP;
+- pi_flag &= mut->__data.__kind;
+-
+- if (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP)
++ if (USE_REQUEUE_PI (mut))
+ {
+ if (lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, INT_MAX,
+ &mut->__data.__lock, futex_val,
+diff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c
+index 102d0b3..ffc35dc 100644
+--- a/nptl/pthread_cond_signal.c
++++ b/nptl/pthread_cond_signal.c
+@@ -49,14 +49,9 @@ __pthread_cond_signal (cond)
+
+ #if (defined lll_futex_cmp_requeue_pi \
+ && defined __ASSUME_REQUEUE_PI)
+- int pi_flag = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NP;
+ pthread_mutex_t *mut = cond->__data.__mutex;
+
+- /* Do not use requeue for pshared condvars. */
+- if (mut != (void *) ~0l)
+- pi_flag &= mut->__data.__kind;
+-
+- if (__builtin_expect (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP, 0)
++ if (USE_REQUEUE_PI (mut)
+ /* This can only really fail with a ENOSYS, since nobody can modify
+ futex while we have the cond_lock. */
+ && lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, 0,
diff --git a/packages/glibc/2.18/120-support-make4.patch b/packages/glibc/2.18/120-support-make4.patch
new file mode 100644
index 0000000..ca2bae0
--- /dev/null
+++ b/packages/glibc/2.18/120-support-make4.patch
@@ -0,0 +1,38 @@
+Original patch modified: Removed ChangeLog and NEWS sections, ajdust for configure.in
+KS
+
+From: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
+Date: Thu, 31 Oct 2013 02:37:50 +0000 (+1000)
+Subject: Accept make versions 4.0 and greater
+X-Git-Tag: glibc-2.19~556
+X-Git-Url: https://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=28d708c44bc47b56f6551ff285f78edcf61c208a;hp=a56ee40b176d0a3f47f2a7eb75208f2e3763c9fd
+
+Accept make versions 4.0 and greater
+---
+
+diff --git a/configure b/configure
+index f382138..5e61abd 100755
+--- a/configure
++++ b/configure
+@@ -4761,7 +4761,7 @@ $as_echo_n "checking version of $MAKE... " >&6; }
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
+diff --git a/configure.in b/configure.in
+index 49b70fd..6da8efd 100644
+--- a/configure.in
++++ b/configure.in
+@@ -984,7 +984,7 @@ AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
+ critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+ [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+- [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++ [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+ [GNU gettext.* \([0-9]*\.[0-9.]*\)],
diff --git a/packages/glibc/2.18/130-arm-unwind.patch b/packages/glibc/2.18/130-arm-unwind.patch
new file mode 100644
index 0000000..69cc07a
--- /dev/null
+++ b/packages/glibc/2.18/130-arm-unwind.patch
@@ -0,0 +1,48 @@
+diff -urN glibc-2.18.orig/nptl/sysdeps/pthread/unwind-forcedunwind.c glibc-2.18/nptl/sysdeps/pthread/unwind-forcedunwind.c
+--- glibc-2.18.orig/nptl/sysdeps/pthread/unwind-forcedunwind.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/nptl/sysdeps/pthread/unwind-forcedunwind.c 2016-09-15 02:30:09.199939478 +0300
+@@ -24,7 +24,7 @@
+ #include <gnu/lib-names.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+diff -urN glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+--- glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c 2016-09-15 02:29:07.096945862 +0300
+@@ -22,7 +22,7 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff -urN glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+--- glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c 2016-09-15 02:29:37.352917115 +0300
+@@ -20,7 +20,7 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+
+diff -urN glibc-2.18.orig/sysdeps/gnu/unwind-resume.c glibc-2.18/sysdeps/gnu/unwind-resume.c
+--- glibc-2.18.orig/sysdeps/gnu/unwind-resume.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/sysdeps/gnu/unwind-resume.c 2016-09-15 02:29:53.376431503 +0300
+@@ -21,7 +21,7 @@
+ #include <unwind.h>
+ #include <gnu/lib-names.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
diff --git a/packages/glibc/2.18/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.18/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..3c34e01
--- /dev/null
+++ b/packages/glibc/2.18/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.18/300-macos-cross-rpcgen.patch b/packages/glibc/2.18/300-macos-cross-rpcgen.patch
new file mode 100644
index 0000000..e654644
--- /dev/null
+++ b/packages/glibc/2.18/300-macos-cross-rpcgen.patch
@@ -0,0 +1,32 @@
+commit ae7080d30c68cfa0c81ce3422dca948f64a94f50
+Author: Jia Liu <proljc@gmail.com>
+Date: Sat Sep 7 00:01:08 2013 +0800
+
+ sunrpc/rpc/types.h: fix OS X and FreeBSD build problems
+
+ When I build arm-linux-gcc on OS X, I find glibc will get a build error
+ in sunrpc/rpc/types.h, so I add __APPLE_CC__ to make OS X build OK.
+ For FreeBSD, Add __FreeBSD__ to make it build OK, too.
+
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00155.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00217.html
+ URL: http://sourceware.org/ml/libc-alpha/2013-09/msg00240.html
+ Signed-off-by: Jia Liu <proljc@gmail.com>
+ Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+diff --git a/sunrpc/rpc/types.h b/sunrpc/rpc/types.h
+index 3dca5c4..beded52 100644
+--- a/sunrpc/rpc/types.h
++++ b/sunrpc/rpc/types.h
+@@ -69,6 +69,11 @@ typedef unsigned long rpcport_t;
+ #include <sys/types.h>
+ #endif
+
++#if defined __APPLE_CC__ || defined __FreeBSD__
++# define __u_char_defined
++# define __daddr_t_defined
++#endif
++
+ #ifndef __u_char_defined
+ typedef __u_char u_char;
+ typedef __u_short u_short;
diff --git a/packages/glibc/2.18/920-fix-rpc_parse-format.patch b/packages/glibc/2.18/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.18/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.18/940-nis-bogus-conditional.patch b/packages/glibc/2.18/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.18/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.18/version.desc b/packages/glibc/2.18/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.18/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.19/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.19/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.19/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.19/102-fix-signed-shift-overlow.patch b/packages/glibc/2.19/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.19/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.19/103-dl-openat64-variadic.patch b/packages/glibc/2.19/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.19/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.19/104-unused-variables.patch b/packages/glibc/2.19/104-unused-variables.patch
new file mode 100644
index 0000000..889c9bb
--- /dev/null
+++ b/packages/glibc/2.19/104-unused-variables.patch
@@ -0,0 +1,178 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
+diff --git a/timezone/private.h b/timezone/private.h
+index 4e8f4ae..ed19e06 100644
+--- a/timezone/private.h
++++ b/timezone/private.h
+@@ -326,16 +326,6 @@ const char * scheck(const char * string, const char * format);
+ #define TYPE_SIGNED(type) (((type) -1) < 0)
+ #endif /* !defined TYPE_SIGNED */
+
+-/* The minimum and maximum finite time values. */
+-static time_t const time_t_min =
+- (TYPE_SIGNED(time_t)
+- ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)
+- : 0);
+-static time_t const time_t_max =
+- (TYPE_SIGNED(time_t)
+- ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
+- : -1);
+-
+ #ifndef INT_STRLEN_MAXIMUM
+ /*
+ ** 302 / 1000 is log10(2.0) rounded up.
diff --git a/packages/glibc/2.19/105-misleading-indentation.patch b/packages/glibc/2.19/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.19/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.19/106-dl-open-array-bounds.patch b/packages/glibc/2.19/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..08a9076
--- /dev/null
+++ b/packages/glibc/2.19/106-dl-open-array-bounds.patch
@@ -0,0 +1,36 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -211,7 +211,7 @@ dl_open_worker (void *a)
+ struct link_map *l = _dl_find_dso_for_object ((ElfW(Addr)) caller_dlopen);
+
+ if (l)
+- call_map = l;
++ call_map = l;
+
+ if (args->nsid == __LM_ID_CALLER)
+ args->nsid = call_map->l_ns;
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.19/130-arm-unwind.patch b/packages/glibc/2.19/130-arm-unwind.patch
new file mode 100644
index 0000000..69cc07a
--- /dev/null
+++ b/packages/glibc/2.19/130-arm-unwind.patch
@@ -0,0 +1,48 @@
+diff -urN glibc-2.18.orig/nptl/sysdeps/pthread/unwind-forcedunwind.c glibc-2.18/nptl/sysdeps/pthread/unwind-forcedunwind.c
+--- glibc-2.18.orig/nptl/sysdeps/pthread/unwind-forcedunwind.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/nptl/sysdeps/pthread/unwind-forcedunwind.c 2016-09-15 02:30:09.199939478 +0300
+@@ -24,7 +24,7 @@
+ #include <gnu/lib-names.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+diff -urN glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+--- glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c 2016-09-15 02:29:07.096945862 +0300
+@@ -22,7 +22,7 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff -urN glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+--- glibc-2.18.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c 2016-09-15 02:29:37.352917115 +0300
+@@ -20,7 +20,7 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+
+diff -urN glibc-2.18.orig/sysdeps/gnu/unwind-resume.c glibc-2.18/sysdeps/gnu/unwind-resume.c
+--- glibc-2.18.orig/sysdeps/gnu/unwind-resume.c 2013-08-11 02:52:55.000000000 +0400
++++ glibc-2.18/sysdeps/gnu/unwind-resume.c 2016-09-15 02:29:53.376431503 +0300
+@@ -21,7 +21,7 @@
+ #include <unwind.h>
+ #include <gnu/lib-names.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
diff --git a/packages/glibc/2.19/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.19/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.19/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.19/910-typedef-caddr.patch b/packages/glibc/2.19/910-typedef-caddr.patch
new file mode 100644
index 0000000..e29e810
--- /dev/null
+++ b/packages/glibc/2.19/910-typedef-caddr.patch
@@ -0,0 +1,28 @@
+diff -urN glibc-2.12.1-orig/posix/sys/types.h glibc-2.12.1/posix/sys/types.h
+--- glibc-2.12.1-orig/posix/sys/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/posix/sys/types.h 2011-03-29 14:16:00.374064708 +0200
+@@ -114,7 +114,10 @@
+ #ifdef __USE_BSD
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+diff -urN glibc-2.12.1-orig/sunrpc/rpc/types.h glibc-2.12.1/sunrpc/rpc/types.h
+--- glibc-2.12.1-orig/sunrpc/rpc/types.h 2010-12-13 11:47:26.000000000 +0100
++++ glibc-2.12.1/sunrpc/rpc/types.h 2011-03-29 14:16:32.988910439 +0200
+@@ -80,7 +80,10 @@
+ #endif
+ #ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ #endif
+
diff --git a/packages/glibc/2.19/920-fix-rpc_parse-format.patch b/packages/glibc/2.19/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.19/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.19/930-explicit-boolean.patch b/packages/glibc/2.19/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.19/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.19/940-nis-bogus-conditional.patch b/packages/glibc/2.19/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.19/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.19/version.desc b/packages/glibc/2.19/version.desc
new file mode 100644
index 0000000..f261ea8
--- /dev/null
+++ b/packages/glibc/2.19/version.desc
@@ -0,0 +1 @@
+# Not obsolete (Ubuntu 14.04, EOL 04/2019)
diff --git a/packages/glibc/2.20/100-sparc-nptl.patch b/packages/glibc/2.20/100-sparc-nptl.patch
new file mode 100644
index 0000000..21f0337
--- /dev/null
+++ b/packages/glibc/2.20/100-sparc-nptl.patch
@@ -0,0 +1,14 @@
+diff --git a/sysdeps/sparc/sparc32/sem_trywait.c b/sysdeps/sparc/sparc32/sem_trywait.c
+index 7d0fc55..ad9b4ad 100644
+--- a/sysdeps/sparc/sparc32/sem_trywait.c
++++ b/sysdeps/sparc/sparc32/sem_trywait.c
+@@ -22,6 +22,7 @@
+ #include <lowlevellock.h>
+ #include <internaltypes.h>
+ #include <semaphore.h>
++#include <sparc-nptl.h>
+
+ #include <shlib-compat.h>
+
+
+
diff --git a/packages/glibc/2.20/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.20/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.20/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.20/102-fix-signed-shift-overlow.patch b/packages/glibc/2.20/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.20/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.20/103-dl-openat64-variadic.patch b/packages/glibc/2.20/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.20/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.20/104-unused-variables.patch b/packages/glibc/2.20/104-unused-variables.patch
new file mode 100644
index 0000000..889c9bb
--- /dev/null
+++ b/packages/glibc/2.20/104-unused-variables.patch
@@ -0,0 +1,178 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double PIL = 3.1415926535897932384626433832795028841972E0L;
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = 1.0e4000L;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
+diff --git a/timezone/private.h b/timezone/private.h
+index 4e8f4ae..ed19e06 100644
+--- a/timezone/private.h
++++ b/timezone/private.h
+@@ -326,16 +326,6 @@ const char * scheck(const char * string, const char * format);
+ #define TYPE_SIGNED(type) (((type) -1) < 0)
+ #endif /* !defined TYPE_SIGNED */
+
+-/* The minimum and maximum finite time values. */
+-static time_t const time_t_min =
+- (TYPE_SIGNED(time_t)
+- ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)
+- : 0);
+-static time_t const time_t_max =
+- (TYPE_SIGNED(time_t)
+- ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
+- : -1);
+-
+ #ifndef INT_STRLEN_MAXIMUM
+ /*
+ ** 302 / 1000 is log10(2.0) rounded up.
diff --git a/packages/glibc/2.20/105-misleading-indentation.patch b/packages/glibc/2.20/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.20/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.20/106-dl-open-array-bounds.patch b/packages/glibc/2.20/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..08a9076
--- /dev/null
+++ b/packages/glibc/2.20/106-dl-open-array-bounds.patch
@@ -0,0 +1,36 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -211,7 +211,7 @@ dl_open_worker (void *a)
+ struct link_map *l = _dl_find_dso_for_object ((ElfW(Addr)) caller_dlopen);
+
+ if (l)
+- call_map = l;
++ call_map = l;
+
+ if (args->nsid == __LM_ID_CALLER)
+ args->nsid = call_map->l_ns;
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.20/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.20/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.20/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.20/910-typedef-caddr.patch b/packages/glibc/2.20/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.20/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.20/920-fix-rpc_parse-format.patch b/packages/glibc/2.20/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.20/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.20/930-explicit-boolean.patch b/packages/glibc/2.20/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.20/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.20/940-nis-bogus-conditional.patch b/packages/glibc/2.20/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.20/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.20/version.desc b/packages/glibc/2.20/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.20/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.21/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.21/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.21/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.21/102-fix-signed-shift-overlow.patch b/packages/glibc/2.21/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.21/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.21/103-dl-openat64-variadic.patch b/packages/glibc/2.21/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..fe94b96
--- /dev/null
+++ b/packages/glibc/2.21/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert ((oflag & O_CREAT) == 0);
+
diff --git a/packages/glibc/2.21/104-unused-variables.patch b/packages/glibc/2.21/104-unused-variables.patch
new file mode 100644
index 0000000..fd4def0
--- /dev/null
+++ b/packages/glibc/2.21/104-unused-variables.patch
@@ -0,0 +1,178 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ DIAG_POP_NEEDS_COMMENT;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = LDBL_MAX;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
+diff --git a/timezone/private.h b/timezone/private.h
+index 4e8f4ae..ed19e06 100644
+--- a/timezone/private.h
++++ b/timezone/private.h
+@@ -326,16 +326,6 @@ const char * scheck(const char * string, const char * format);
+ #define TYPE_SIGNED(type) (((type) -1) < 0)
+ #endif /* !defined TYPE_SIGNED */
+
+-/* The minimum and maximum finite time values. */
+-static time_t const time_t_min =
+- (TYPE_SIGNED(time_t)
+- ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)
+- : 0);
+-static time_t const time_t_max =
+- (TYPE_SIGNED(time_t)
+- ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
+- : -1);
+-
+ #ifndef INT_STRLEN_MAXIMUM
+ /*
+ ** 302 / 1000 is log10(2.0) rounded up.
diff --git a/packages/glibc/2.21/105-misleading-indentation.patch b/packages/glibc/2.21/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.21/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.21/106-dl-open-array-bounds.patch b/packages/glibc/2.21/106-dl-open-array-bounds.patch
new file mode 100644
index 0000000..08a9076
--- /dev/null
+++ b/packages/glibc/2.21/106-dl-open-array-bounds.patch
@@ -0,0 +1,36 @@
+commit 328c44c3670ebf6c1bd790acddce65a12998cd6c
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 12:11:58 2015 -0700
+
+ Fuller check for invalid NSID in _dl_open.
+
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index 0dbe07f..2d0e082 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -211,7 +211,7 @@ dl_open_worker (void *a)
+ struct link_map *l = _dl_find_dso_for_object ((ElfW(Addr)) caller_dlopen);
+
+ if (l)
+- call_map = l;
++ call_map = l;
+
+ if (args->nsid == __LM_ID_CALLER)
+ args->nsid = call_map->l_ns;
+@@ -619,8 +619,14 @@ no more namespaces available for dlmopen()"));
+ /* Never allow loading a DSO in a namespace which is empty. Such
+ direct placements is only causing problems. Also don't allow
+ loading into a namespace used for auditing. */
+- else if (__builtin_expect (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER, 0)
+- && (GL(dl_ns)[nsid]._ns_nloaded == 0
++ else if (__glibc_unlikely (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER)
++ && (__glibc_unlikely (nsid < 0 || nsid >= GL(dl_nns))
++ /* This prevents the [NSID] index expressions from being
++ evaluated, so the compiler won't think that we are
++ accessing an invalid index here in the !SHARED case where
++ DL_NNS is 1 and so any NSID != 0 is invalid. */
++ || DL_NNS == 1
++ || GL(dl_ns)[nsid]._ns_nloaded == 0
+ || GL(dl_ns)[nsid]._ns_loaded->l_auditing))
+ _dl_signal_error (EINVAL, file, NULL,
+ N_("invalid target namespace in dlmopen()"));
diff --git a/packages/glibc/2.21/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.21/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.21/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.21/910-typedef-caddr.patch b/packages/glibc/2.21/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.21/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.21/920-fix-rpc_parse-format.patch b/packages/glibc/2.21/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.21/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.21/930-explicit-boolean.patch b/packages/glibc/2.21/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.21/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.21/940-nis-bogus-conditional.patch b/packages/glibc/2.21/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.21/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.21/950-dlclose-assert.patch b/packages/glibc/2.21/950-dlclose-assert.patch
new file mode 100644
index 0000000..6e2fcff
--- /dev/null
+++ b/packages/glibc/2.21/950-dlclose-assert.patch
@@ -0,0 +1,40 @@
+commit 2bd2cad9e8a410643e80efa0b15f6f2882e1271b
+Author: Roland McGrath <roland@hack.frob.com>
+Date: Fri Apr 17 14:29:40 2015 -0700
+
+ Avoid confusing compiler with dynamically impossible statically invalid dereference in _dl_close_worker.
+
+diff --git a/elf/dl-close.c b/elf/dl-close.c
+index cf8f9e0465..412f71d70b 100644
+--- a/elf/dl-close.c
++++ b/elf/dl-close.c
+@@ -641,9 +641,16 @@ _dl_close_worker (struct link_map *map)
+ DL_UNMAP (imap);
+
+ /* Finally, unlink the data structure and free it. */
+- if (imap->l_prev != NULL)
+- imap->l_prev->l_next = imap->l_next;
+- else
++#if DL_NNS == 1
++ /* The assert in the (imap->l_prev == NULL) case gives
++ the compiler license to warn that NS points outside
++ the dl_ns array bounds in that case (as nsid != LM_ID_BASE
++ is tantamount to nsid >= DL_NNS). That should be impossible
++ in this configuration, so just assert about it instead. */
++ assert (nsid == LM_ID_BASE);
++ assert (imap->l_prev != NULL);
++#else
++ if (imap->l_prev == NULL)
+ {
+ assert (nsid != LM_ID_BASE);
+ ns->_ns_loaded = imap->l_next;
+@@ -652,6 +659,9 @@ _dl_close_worker (struct link_map *map)
+ we leave for debuggers to examine. */
+ r->r_map = (void *) ns->_ns_loaded;
+ }
++ else
++#endif
++ imap->l_prev->l_next = imap->l_next;
+
+ --ns->_ns_nloaded;
+ if (imap->l_next != NULL)
diff --git a/packages/glibc/2.21/version.desc b/packages/glibc/2.21/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.21/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.22/100-sparc32-sem_open-missing-include.patch b/packages/glibc/2.22/100-sparc32-sem_open-missing-include.patch
new file mode 100644
index 0000000..b481046
--- /dev/null
+++ b/packages/glibc/2.22/100-sparc32-sem_open-missing-include.patch
@@ -0,0 +1,21 @@
+commit 3f512ca79fda7854da188df0585e71467119206e
+Author: Brett Neumeier <brett@neumeier.us>
+Date: Mon Aug 31 15:27:21 2015 -0700
+
+ Fix non-v9 32-bit sparc build.
+
+ [BZ #18870]
+ * sysdeps/sparc/sparc32/sem_open.c: Add missing #include
+
+diff --git a/sysdeps/sparc/sparc32/sem_open.c b/sysdeps/sparc/sparc32/sem_open.c
+index 16cb9ad..59df2d7 100644
+--- a/sysdeps/sparc/sparc32/sem_open.c
++++ b/sysdeps/sparc/sparc32/sem_open.c
+@@ -29,6 +29,7 @@
+ #include <sys/mman.h>
+ #include <sys/stat.h>
+ #include "semaphoreP.h"
++#include <futex-internal.h>
+ #include <shm-directory.h>
+
+
diff --git a/packages/glibc/2.22/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.22/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.22/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.22/102-fix-signed-shift-overlow.patch b/packages/glibc/2.22/102-fix-signed-shift-overlow.patch
new file mode 100644
index 0000000..ef49f83
--- /dev/null
+++ b/packages/glibc/2.22/102-fix-signed-shift-overlow.patch
@@ -0,0 +1,98 @@
+commit 5542236837c5c41435f8282ec92799f480c36f18
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue Jul 21 22:50:29 2015 -0700
+
+ Port the 0x7efe...feff pattern to GCC 6.
+
+ See Steve Ellcey's bug report in:
+ https://sourceware.org/ml/libc-alpha/2015-07/msg00673.html
+ * string/memrchr.c (MEMRCHR):
+ * string/rawmemchr.c (RAWMEMCHR):
+ * string/strchr.c (strchr):
+ * string/strchrnul.c (STRCHRNUL):
+ Rewrite code to avoid issues with signed shift overflow.
+
+diff --git a/string/memrchr.c b/string/memrchr.c
+index 0c8fd84..86cd5b9 100644
+--- a/string/memrchr.c
++++ b/string/memrchr.c
+@@ -96,15 +96,8 @@ MEMRCHR
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/rawmemchr.c b/string/rawmemchr.c
+index 05b22be..228ca9d 100644
+--- a/string/rawmemchr.c
++++ b/string/rawmemchr.c
+@@ -86,15 +86,8 @@ RAWMEMCHR (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+-
+- if (sizeof (longword) != 4 && sizeof (longword) != 8)
+- abort ();
+-
+-#if LONG_MAX <= LONG_MAX_32_BITS
+- magic_bits = 0x7efefeff;
+-#else
+- magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
+-#endif
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchr.c b/string/strchr.c
+index 5f90075..f13b2b3 100644
+--- a/string/strchr.c
++++ b/string/strchr.c
+@@ -60,13 +60,8 @@ strchr (const char *s, int c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
+diff --git a/string/strchrnul.c b/string/strchrnul.c
+index 2678f1d..daf0b3f 100644
+--- a/string/strchrnul.c
++++ b/string/strchrnul.c
+@@ -66,13 +66,8 @@ STRCHRNUL (s, c_in)
+
+ The 1-bits make sure that carries propagate to the next 0-bit.
+ The 0-bits provide holes for carries to fall into. */
+- switch (sizeof (longword))
+- {
+- case 4: magic_bits = 0x7efefeffL; break;
+- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
+- default:
+- abort ();
+- }
++ magic_bits = -1;
++ magic_bits = magic_bits / 0xff * 0xfe << 1 >> 1 | 1;
+
+ /* Set up a longword, each of whose bytes is C. */
+ charmask = c | (c << 8);
diff --git a/packages/glibc/2.22/103-dl-openat64-variadic.patch b/packages/glibc/2.22/103-dl-openat64-variadic.patch
new file mode 100644
index 0000000..302088e
--- /dev/null
+++ b/packages/glibc/2.22/103-dl-openat64-variadic.patch
@@ -0,0 +1,195 @@
+commit 9dd346ff431fc761f1b748bd4da8bb59f7652094
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Oct 20 11:54:09 2015 +0000
+
+ Convert 113 more function definitions to prototype style (files with assertions).
+
+ This mostly automatically-generated patch converts 113 function
+ definitions in glibc from old-style K&R to prototype-style. Following
+ my other recent such patches, this one deals with the case of function
+ definitions in files that either contain assertions or where grep
+ suggested they might contain assertions - and thus where it isn't
+ possible to use a simple object code comparison as a sanity check on
+ the correctness of the patch, because line numbers are changed.
+
+ A few such automatically-generated changes needed to be supplemented
+ by manual changes for the result to compile. openat64 had a prototype
+ declaration with "..." but an old-style definition in
+ sysdeps/unix/sysv/linux/dl-openat64.c, and "..." needed adding to the
+ generated prototype in the definition (I've filed
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68024> for diagnosing
+ such cases in GCC; the old state was undefined behavior not requiring
+ a diagnostic, but one seems a good idea). In addition, as Florian has
+ noted regparm attribute mismatches between declaration and definition
+ are only diagnosed for prototype definitions, and five functions
+ needed internal_function added to their definitions (in the case of
+ __pthread_mutex_cond_lock, via the macro definition of
+ __pthread_mutex_lock) to compile on i386.
+
+ After this patch is in, remaining old-style definitions are probably
+ most readily fixed manually before we can turn on
+ -Wold-style-definition for all builds.
+
+ Tested for x86_64 and x86 (testsuite).
+
+ * crypt/md5-crypt.c (__md5_crypt_r): Convert to prototype-style
+ function definition.
+ * crypt/sha256-crypt.c (__sha256_crypt_r): Likewise.
+ * crypt/sha512-crypt.c (__sha512_crypt_r): Likewise.
+ * debug/backtracesyms.c (__backtrace_symbols): Likewise.
+ * elf/dl-minimal.c (_itoa): Likewise.
+ * hurd/hurdmalloc.c (malloc): Likewise.
+ (free): Likewise.
+ (realloc): Likewise.
+ * inet/inet6_option.c (inet6_option_space): Likewise.
+ (inet6_option_init): Likewise.
+ (inet6_option_append): Likewise.
+ (inet6_option_alloc): Likewise.
+ (inet6_option_next): Likewise.
+ (inet6_option_find): Likewise.
+ * io/ftw.c (FTW_NAME): Likewise.
+ (NFTW_NAME): Likewise.
+ (NFTW_NEW_NAME): Likewise.
+ (NFTW_OLD_NAME): Likewise.
+ * libio/iofwide.c (_IO_fwide): Likewise.
+ * libio/strops.c (_IO_str_init_static_internal): Likewise.
+ (_IO_str_init_static): Likewise.
+ (_IO_str_init_readonly): Likewise.
+ (_IO_str_overflow): Likewise.
+ (_IO_str_underflow): Likewise.
+ (_IO_str_count): Likewise.
+ (_IO_str_seekoff): Likewise.
+ (_IO_str_pbackfail): Likewise.
+ (_IO_str_finish): Likewise.
+ * libio/wstrops.c (_IO_wstr_init_static): Likewise.
+ (_IO_wstr_overflow): Likewise.
+ (_IO_wstr_underflow): Likewise.
+ (_IO_wstr_count): Likewise.
+ (_IO_wstr_seekoff): Likewise.
+ (_IO_wstr_pbackfail): Likewise.
+ (_IO_wstr_finish): Likewise.
+ * locale/programs/localedef.c (normalize_codeset): Likewise.
+ * locale/programs/locarchive.c (add_locale_to_archive): Likewise.
+ (add_locales_to_archive): Likewise.
+ (delete_locales_from_archive): Likewise.
+ * malloc/malloc.c (__libc_mallinfo): Likewise.
+ * math/gen-auto-libm-tests.c (init_fp_formats): Likewise.
+ * misc/tsearch.c (__tfind): Likewise.
+ * nptl/pthread_attr_destroy.c (__pthread_attr_destroy): Likewise.
+ * nptl/pthread_attr_getdetachstate.c
+ (__pthread_attr_getdetachstate): Likewise.
+ * nptl/pthread_attr_getguardsize.c (pthread_attr_getguardsize):
+ Likewise.
+ * nptl/pthread_attr_getinheritsched.c
+ (__pthread_attr_getinheritsched): Likewise.
+ * nptl/pthread_attr_getschedparam.c
+ (__pthread_attr_getschedparam): Likewise.
+ * nptl/pthread_attr_getschedpolicy.c
+ (__pthread_attr_getschedpolicy): Likewise.
+ * nptl/pthread_attr_getscope.c (__pthread_attr_getscope):
+ Likewise.
+ * nptl/pthread_attr_getstack.c (__pthread_attr_getstack):
+ Likewise.
+ * nptl/pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr):
+ Likewise.
+ * nptl/pthread_attr_getstacksize.c (__pthread_attr_getstacksize):
+ Likewise.
+ * nptl/pthread_attr_init.c (__pthread_attr_init_2_1): Likewise.
+ (__pthread_attr_init_2_0): Likewise.
+ * nptl/pthread_attr_setdetachstate.c
+ (__pthread_attr_setdetachstate): Likewise.
+ * nptl/pthread_attr_setguardsize.c (pthread_attr_setguardsize):
+ Likewise.
+ * nptl/pthread_attr_setinheritsched.c
+ (__pthread_attr_setinheritsched): Likewise.
+ * nptl/pthread_attr_setschedparam.c
+ (__pthread_attr_setschedparam): Likewise.
+ * nptl/pthread_attr_setschedpolicy.c
+ (__pthread_attr_setschedpolicy): Likewise.
+ * nptl/pthread_attr_setscope.c (__pthread_attr_setscope):
+ Likewise.
+ * nptl/pthread_attr_setstack.c (__pthread_attr_setstack):
+ Likewise.
+ * nptl/pthread_attr_setstackaddr.c (__pthread_attr_setstackaddr):
+ Likewise.
+ * nptl/pthread_attr_setstacksize.c (__pthread_attr_setstacksize):
+ Likewise.
+ * nptl/pthread_condattr_setclock.c (pthread_condattr_setclock):
+ Likewise.
+ * nptl/pthread_create.c (__find_in_stack_list): Likewise.
+ * nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+ * nptl/pthread_mutex_cond_lock.c (__pthread_mutex_lock): Define to
+ use internal_function.
+ * nptl/pthread_mutex_init.c (__pthread_mutex_init): Convert to
+ prototype-style function definition.
+ * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
+ (__pthread_mutex_cond_lock_adjust): Likewise. Use
+ internal_function.
+ * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock):
+ Convert to prototype-style function definition.
+ * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
+ Likewise.
+ * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt):
+ Likewise.
+ (__pthread_mutex_unlock): Likewise.
+ * nptl_db/td_ta_clear_event.c (td_ta_clear_event): Likewise.
+ * nptl_db/td_ta_set_event.c (td_ta_set_event): Likewise.
+ * nptl_db/td_thr_clear_event.c (td_thr_clear_event): Likewise.
+ * nptl_db/td_thr_event_enable.c (td_thr_event_enable): Likewise.
+ * nptl_db/td_thr_set_event.c (td_thr_set_event): Likewise.
+ * nss/makedb.c (process_input): Likewise.
+ * posix/fnmatch.c (__strchrnul): Likewise.
+ (__wcschrnul): Likewise.
+ (fnmatch): Likewise.
+ * posix/fnmatch_loop.c (FCT): Likewise.
+ * posix/glob.c (globfree): Likewise.
+ (__glob_pattern_type): Likewise.
+ (__glob_pattern_p): Likewise.
+ * posix/regcomp.c (re_compile_pattern): Likewise.
+ (re_set_syntax): Likewise.
+ (re_compile_fastmap): Likewise.
+ (regcomp): Likewise.
+ (regerror): Likewise.
+ (regfree): Likewise.
+ * posix/regexec.c (regexec): Likewise.
+ (re_match): Likewise.
+ (re_search): Likewise.
+ (re_match_2): Likewise.
+ (re_search_2): Likewise.
+ (re_search_stub): Likewise. Use internal_function
+ (re_copy_regs): Likewise.
+ (re_set_registers): Convert to prototype-style function
+ definition.
+ (prune_impossible_nodes): Likewise. Use internal_function.
+ * resolv/inet_net_pton.c (inet_net_pton): Convert to
+ prototype-style function definition.
+ (inet_net_pton_ipv4): Likewise.
+ * stdlib/strtod_l.c (____STRTOF_INTERNAL): Likewise.
+ * sysdeps/pthread/aio_cancel.c (aio_cancel): Likewise.
+ * sysdeps/pthread/aio_suspend.c (aio_suspend): Likewise.
+ * sysdeps/pthread/timer_delete.c (timer_delete): Likewise.
+ * sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
+ Make variadic.
+ * time/strptime_l.c (localtime_r): Convert to prototype-style
+ function definition.
+ * wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
+ * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
+ * wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
+ * wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c
+index 7d100bb..7eea0ca 100644
+--- a/sysdeps/unix/sysv/linux/dl-openat64.c
++++ b/sysdeps/unix/sysv/linux/dl-openat64.c
+@@ -23,10 +23,7 @@
+
+
+ int
+-openat64 (dfd, file, oflag)
+- int dfd;
+- const char *file;
+- int oflag;
++openat64 (int dfd, const char *file, int oflag, ...)
+ {
+ assert (!__OPEN_NEEDS_MODE (oflag));
+
diff --git a/packages/glibc/2.22/104-unused-variables.patch b/packages/glibc/2.22/104-unused-variables.patch
new file mode 100644
index 0000000..fd4def0
--- /dev/null
+++ b/packages/glibc/2.22/104-unused-variables.patch
@@ -0,0 +1,178 @@
+commit 6565fcb6e189d67b5a3f321453daebb805056d73
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date: Fri Sep 18 20:27:20 2015 +0100
+
+ Fix several build failures with GCC6 due to unused static variables.
+
+ 2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
+
+ * resolv/base64.c (rcsid): Remove unused static.
+ * sysdeps/ieee754/dbl-64/atnat2.h (qpi1): Remove unused
+ static. (tqpi1): Likewise.
+ * sysdeps/ieee754/dbl-64/uexp.h (one): Likewise.
+ * sysdeps/ieee754/dbl-64/upow.h (sqrt_2): Likewise.
+ * sysdeps/ieee754/flt-32/e_log10f.c (one): Likewise.
+ * sysdeps/ieee754/flt-32/s_cosf.c (one): Likewise.
+ * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (zero): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_erfl.c (half): Likewise.
+ * sysdeps/ieee754/ldbl-128/s_log1pl.c (maxlog): Likewise.
+ * timezone/private.h (time_t_min): Likewise. (time_t_max):
+ Likewise.
+
+diff --git a/resolv/base64.c b/resolv/base64.c
+index ea584ed..519e5d2 100644
+--- a/resolv/base64.c
++++ b/resolv/base64.c
+@@ -40,10 +40,6 @@
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+-#if !defined(LINT) && !defined(CODECENTER)
+-static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
+-#endif /* not lint */
+-
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h
+index e0d65af..82943f9 100644
+--- a/sysdeps/ieee754/dbl-64/atnat2.h
++++ b/sysdeps/ieee754/dbl-64/atnat2.h
+@@ -65,10 +65,8 @@
+ /**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */
+ /**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */
+ /**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */
+-/**/ qpi1 = {{0x3c81a626, 0x33145c07} }, /* pi/4-qpi */
+ /**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */
+ /**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x3c9a7939, 0x4c9e8a0a} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */
+ /**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */
+ /**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */
+@@ -129,10 +127,8 @@
+ /**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */
+ /**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */
+ /**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */
+-/**/ qpi1 = {{0x33145c07, 0x3c81a626} }, /* pi/4-qpi */
+ /**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */
+ /**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */
+-/**/ tqpi1 = {{0x4c9e8a0a, 0x3c9a7939} }, /* 3pi/4-tqpi */
+ /**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */
+ /**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */
+ /**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */
+diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h
+index 6817eaf..42b21f2 100644
+--- a/sysdeps/ieee754/dbl-64/uexp.h
++++ b/sysdeps/ieee754/dbl-64/uexp.h
+@@ -29,7 +29,7 @@
+
+ #include "mydefs.h"
+
+-const static double one = 1.0, zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
++const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300,
+ err_0 = 1.000014, err_1 = 0.000016;
+ const static int4 bigint = 0x40862002,
+ badint = 0x40876000,smallint = 0x3C8fffff;
+diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
+index c8569a9..b4911e5 100644
+--- a/sysdeps/ieee754/dbl-64/upow.h
++++ b/sysdeps/ieee754/dbl-64/upow.h
+@@ -34,7 +34,6 @@
+ /**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
+ /**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
+ /**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
+-/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
+ /**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */
+@@ -48,7 +47,6 @@
+ /**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
+ /**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
+ /**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
+-/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
+ /**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
+ /**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
+ /**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
+diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c
+index 96f0e81..1daeef7 100644
+--- a/sysdeps/ieee754/flt-32/e_log10f.c
++++ b/sysdeps/ieee754/flt-32/e_log10f.c
+@@ -22,8 +22,6 @@ ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
+ log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
+ log10_2lo = 7.9034151668e-07; /* 0x355427db */
+
+-static const float zero = 0.0;
+-
+ float
+ __ieee754_log10f(float x)
+ {
+diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c
+index 864ab27..0affd40 100644
+--- a/sysdeps/ieee754/flt-32/s_cosf.c
++++ b/sysdeps/ieee754/flt-32/s_cosf.c
+@@ -21,8 +21,6 @@ static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $";
+ #include <math.h>
+ #include <math_private.h>
+
+-static const float one=1.0;
+-
+ #ifndef COSF
+ # define COSF_FUNC __cosf
+ #else
+diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+index 500aacc..ab5a96e 100644
+--- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
++++ b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c
+@@ -82,7 +82,6 @@ DIAG_IGNORE_NEEDS_COMMENT (4.6, "-Woverflow");
+ static const long double MAXLGM = 1.0485738685148938358098967157129705071571E4928L;
+ DIAG_POP_NEEDS_COMMENT;
+ static const long double one = 1.0L;
+-static const long double zero = 0.0L;
+ static const long double huge = LDBL_MAX;
+
+ /* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2)
+diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c
+index fa4609f..08c80a3 100644
+--- a/sysdeps/ieee754/ldbl-128/s_erfl.c
++++ b/sysdeps/ieee754/ldbl-128/s_erfl.c
+@@ -140,7 +140,6 @@ deval (long double x, const long double *p, int n)
+
+ static const long double
+ tiny = 1e-4931L,
+- half = 0.5L,
+ one = 1.0L,
+ two = 2.0L,
+ /* 2/sqrt(pi) - 1 */
+diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+index ff759bc..9609550 100644
+--- a/sysdeps/ieee754/ldbl-128/s_log1pl.c
++++ b/sysdeps/ieee754/ldbl-128/s_log1pl.c
+@@ -117,7 +117,6 @@ static const long double C2 = 1.428606820309417232121458176568075500134E-6L;
+
+ static const long double sqrth = 0.7071067811865475244008443621048490392848L;
+ /* ln (2^16384 * (1 - 2^-113)) */
+-static const long double maxlog = 1.1356523406294143949491931077970764891253E4L;
+ static const long double zero = 0.0L;
+
+ long double
+diff --git a/timezone/private.h b/timezone/private.h
+index 4e8f4ae..ed19e06 100644
+--- a/timezone/private.h
++++ b/timezone/private.h
+@@ -326,16 +326,6 @@ const char * scheck(const char * string, const char * format);
+ #define TYPE_SIGNED(type) (((type) -1) < 0)
+ #endif /* !defined TYPE_SIGNED */
+
+-/* The minimum and maximum finite time values. */
+-static time_t const time_t_min =
+- (TYPE_SIGNED(time_t)
+- ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)
+- : 0);
+-static time_t const time_t_max =
+- (TYPE_SIGNED(time_t)
+- ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1))
+- : -1);
+-
+ #ifndef INT_STRLEN_MAXIMUM
+ /*
+ ** 302 / 1000 is log10(2.0) rounded up.
diff --git a/packages/glibc/2.22/105-misleading-indentation.patch b/packages/glibc/2.22/105-misleading-indentation.patch
new file mode 100644
index 0000000..1dd8d85
--- /dev/null
+++ b/packages/glibc/2.22/105-misleading-indentation.patch
@@ -0,0 +1,24 @@
+commit 976ef870542580cf5fed896c2c652b3e1a95f9da
+Author: Steve Ellcey <sellcey@mips.com>
+Date: Fri Dec 11 09:19:37 2015 -0800
+
+ Fix indentation.
+
+ * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f):
+ Fix indentation.
+
+diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+index 0c7685c..392afdb 100644
+--- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c
++++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c
+@@ -65,7 +65,9 @@ int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32
+
+ /* compute q[0],q[1],...q[jk] */
+ for (i=0;i<=jk;i++) {
+- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
++ for(j=0,fw=0.0;j<=jx;j++)
++ fw += x[j]*f[jx+i-j];
++ q[i] = fw;
+ }
+
+ jz = jk;
diff --git a/packages/glibc/2.22/120-cve-2105-7547-getaddrinfo-stack.patch b/packages/glibc/2.22/120-cve-2105-7547-getaddrinfo-stack.patch
new file mode 100644
index 0000000..257c5f2
--- /dev/null
+++ b/packages/glibc/2.22/120-cve-2105-7547-getaddrinfo-stack.patch
@@ -0,0 +1,551 @@
+diff -ruN glibc-2.22.orig/resolv/nss_dns/dns-host.c glibc-2.22/resolv/nss_dns/dns-host.c
+--- glibc-2.22.orig/resolv/nss_dns/dns-host.c 2015-08-04 23:42:21.000000000 -0700
++++ glibc-2.22/resolv/nss_dns/dns-host.c 2016-02-16 13:38:38.000000000 -0800
+@@ -1031,7 +1031,10 @@
+ int h_namelen = 0;
+
+ if (ancount == 0)
+- return NSS_STATUS_NOTFOUND;
++ {
++ *h_errnop = HOST_NOT_FOUND;
++ return NSS_STATUS_NOTFOUND;
++ }
+
+ while (ancount-- > 0 && cp < end_of_message && had_error == 0)
+ {
+@@ -1208,7 +1211,14 @@
+ /* Special case here: if the resolver sent a result but it only
+ contains a CNAME while we are looking for a T_A or T_AAAA record,
+ we fail with NOTFOUND instead of TRYAGAIN. */
+- return canon == NULL ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
++ if (canon != NULL)
++ {
++ *h_errnop = HOST_NOT_FOUND;
++ return NSS_STATUS_NOTFOUND;
++ }
++
++ *h_errnop = NETDB_INTERNAL;
++ return NSS_STATUS_TRYAGAIN;
+ }
+
+
+@@ -1222,11 +1232,101 @@
+
+ enum nss_status status = NSS_STATUS_NOTFOUND;
+
++ /* Combining the NSS status of two distinct queries requires some
++ compromise and attention to symmetry (A or AAAA queries can be
++ returned in any order). What follows is a breakdown of how this
++ code is expected to work and why. We discuss only SUCCESS,
++ TRYAGAIN, NOTFOUND and UNAVAIL, since they are the only returns
++ that apply (though RETURN and MERGE exist). We make a distinction
++ between TRYAGAIN (recoverable) and TRYAGAIN' (not-recoverable).
++ A recoverable TRYAGAIN is almost always due to buffer size issues
++ and returns ERANGE in errno and the caller is expected to retry
++ with a larger buffer.
++
++ Lastly, you may be tempted to make significant changes to the
++ conditions in this code to bring about symmetry between responses.
++ Please don't change anything without due consideration for
++ expected application behaviour. Some of the synthesized responses
++ aren't very well thought out and sometimes appear to imply that
++ IPv4 responses are always answer 1, and IPv6 responses are always
++ answer 2, but that's not true (see the implemetnation of send_dg
++ and send_vc to see response can arrive in any order, particlarly
++ for UDP). However, we expect it holds roughly enough of the time
++ that this code works, but certainly needs to be fixed to make this
++ a more robust implementation.
++
++ ----------------------------------------------
++ | Answer 1 Status / | Synthesized | Reason |
++ | Answer 2 Status | Status | |
++ |--------------------------------------------|
++ | SUCCESS/SUCCESS | SUCCESS | [1] |
++ | SUCCESS/TRYAGAIN | TRYAGAIN | [5] |
++ | SUCCESS/TRYAGAIN' | SUCCESS | [1] |
++ | SUCCESS/NOTFOUND | SUCCESS | [1] |
++ | SUCCESS/UNAVAIL | SUCCESS | [1] |
++ | TRYAGAIN/SUCCESS | TRYAGAIN | [2] |
++ | TRYAGAIN/TRYAGAIN | TRYAGAIN | [2] |
++ | TRYAGAIN/TRYAGAIN' | TRYAGAIN | [2] |
++ | TRYAGAIN/NOTFOUND | TRYAGAIN | [2] |
++ | TRYAGAIN/UNAVAIL | TRYAGAIN | [2] |
++ | TRYAGAIN'/SUCCESS | SUCCESS | [3] |
++ | TRYAGAIN'/TRYAGAIN | TRYAGAIN | [3] |
++ | TRYAGAIN'/TRYAGAIN' | TRYAGAIN' | [3] |
++ | TRYAGAIN'/NOTFOUND | TRYAGAIN' | [3] |
++ | TRYAGAIN'/UNAVAIL | UNAVAIL | [3] |
++ | NOTFOUND/SUCCESS | SUCCESS | [3] |
++ | NOTFOUND/TRYAGAIN | TRYAGAIN | [3] |
++ | NOTFOUND/TRYAGAIN' | TRYAGAIN' | [3] |
++ | NOTFOUND/NOTFOUND | NOTFOUND | [3] |
++ | NOTFOUND/UNAVAIL | UNAVAIL | [3] |
++ | UNAVAIL/SUCCESS | UNAVAIL | [4] |
++ | UNAVAIL/TRYAGAIN | UNAVAIL | [4] |
++ | UNAVAIL/TRYAGAIN' | UNAVAIL | [4] |
++ | UNAVAIL/NOTFOUND | UNAVAIL | [4] |
++ | UNAVAIL/UNAVAIL | UNAVAIL | [4] |
++ ----------------------------------------------
++
++ [1] If the first response is a success we return success.
++ This ignores the state of the second answer and in fact
++ incorrectly sets errno and h_errno to that of the second
++ answer. However because the response is a success we ignore
++ *errnop and *h_errnop (though that means you touched errno on
++ success). We are being conservative here and returning the
++ likely IPv4 response in the first answer as a success.
++
++ [2] If the first response is a recoverable TRYAGAIN we return
++ that instead of looking at the second response. The
++ expectation here is that we have failed to get an IPv4 response
++ and should retry both queries.
++
++ [3] If the first response was not a SUCCESS and the second
++ response is not NOTFOUND (had a SUCCESS, need to TRYAGAIN,
++ or failed entirely e.g. TRYAGAIN' and UNAVAIL) then use the
++ result from the second response, otherwise the first responses
++ status is used. Again we have some odd side-effects when the
++ second response is NOTFOUND because we overwrite *errnop and
++ *h_errnop that means that a first answer of NOTFOUND might see
++ its *errnop and *h_errnop values altered. Whether it matters
++ in practice that a first response NOTFOUND has the wrong
++ *errnop and *h_errnop is undecided.
++
++ [4] If the first response is UNAVAIL we return that instead of
++ looking at the second response. The expectation here is that
++ it will have failed similarly e.g. configuration failure.
++
++ [5] Testing this code is complicated by the fact that truncated
++ second response buffers might be returned as SUCCESS if the
++ first answer is a SUCCESS. To fix this we add symmetry to
++ TRYAGAIN with the second response. If the second response
++ is a recoverable error we now return TRYAGIN even if the first
++ response was SUCCESS. */
++
+ if (anslen1 > 0)
+ status = gaih_getanswer_slice(answer1, anslen1, qname,
+ &pat, &buffer, &buflen,
+ errnop, h_errnop, ttlp,
+ &first);
++
+ if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
+ || (status == NSS_STATUS_TRYAGAIN
+ /* We want to look at the second answer in case of an
+@@ -1242,8 +1342,15 @@
+ &pat, &buffer, &buflen,
+ errnop, h_errnop, ttlp,
+ &first);
++ /* Use the second response status in some cases. */
+ if (status != NSS_STATUS_SUCCESS && status2 != NSS_STATUS_NOTFOUND)
+ status = status2;
++ /* Do not return a truncated second response (unless it was
++ unavoidable e.g. unrecoverable TRYAGAIN). */
++ if (status == NSS_STATUS_SUCCESS
++ && (status2 == NSS_STATUS_TRYAGAIN
++ && *errnop == ERANGE && *h_errnop != NO_RECOVERY))
++ status = NSS_STATUS_TRYAGAIN;
+ }
+
+ return status;
+diff -ruN glibc-2.22.orig/resolv/res_query.c glibc-2.22/resolv/res_query.c
+--- glibc-2.22.orig/resolv/res_query.c 2015-08-04 23:42:21.000000000 -0700
++++ glibc-2.22/resolv/res_query.c 2016-02-16 13:38:38.000000000 -0800
+@@ -396,6 +396,7 @@
+ {
+ free (*answerp2);
+ *answerp2 = NULL;
++ *nanswerp2 = 0;
+ *answerp2_malloced = 0;
+ }
+ }
+@@ -447,6 +448,7 @@
+ {
+ free (*answerp2);
+ *answerp2 = NULL;
++ *nanswerp2 = 0;
+ *answerp2_malloced = 0;
+ }
+
+@@ -521,6 +523,7 @@
+ {
+ free (*answerp2);
+ *answerp2 = NULL;
++ *nanswerp2 = 0;
+ *answerp2_malloced = 0;
+ }
+ if (saved_herrno != -1)
+diff -ruN glibc-2.22.orig/resolv/res_send.c glibc-2.22/resolv/res_send.c
+--- glibc-2.22.orig/resolv/res_send.c 2015-08-04 23:42:21.000000000 -0700
++++ glibc-2.22/resolv/res_send.c 2016-02-16 13:43:59.000000000 -0800
+@@ -1,3 +1,20 @@
++/* Copyright (C) 2016 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, see
++ <http://www.gnu.org/licenses/>. */
++
+ /*
+ * Copyright (c) 1985, 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+@@ -363,6 +380,8 @@
+ #ifdef USE_HOOKS
+ if (__glibc_unlikely (statp->qhook || statp->rhook)) {
+ if (anssiz < MAXPACKET && ansp) {
++ /* Always allocate MAXPACKET, callers expect
++ this specific size. */
+ u_char *buf = malloc (MAXPACKET);
+ if (buf == NULL)
+ return (-1);
+@@ -638,6 +657,77 @@
+ return (struct sockaddr *) (void *) &statp->nsaddr_list[n];
+ }
+
++/* The send_vc function is responsible for sending a DNS query over TCP
++ to the nameserver numbered NS from the res_state STATP i.e.
++ EXT(statp).nssocks[ns]. The function supports sending both IPv4 and
++ IPv6 queries at the same serially on the same socket.
++
++ Please note that for TCP there is no way to disable sending both
++ queries, unlike UDP, which honours RES_SNGLKUP and RES_SNGLKUPREOP
++ and sends the queries serially and waits for the result after each
++ sent query. This implemetnation should be corrected to honour these
++ options.
++
++ Please also note that for TCP we send both queries over the same
++ socket one after another. This technically violates best practice
++ since the server is allowed to read the first query, respond, and
++ then close the socket (to service another client). If the server
++ does this, then the remaining second query in the socket data buffer
++ will cause the server to send the client an RST which will arrive
++ asynchronously and the client's OS will likely tear down the socket
++ receive buffer resulting in a potentially short read and lost
++ response data. This will force the client to retry the query again,
++ and this process may repeat until all servers and connection resets
++ are exhausted and then the query will fail. It's not known if this
++ happens with any frequency in real DNS server implementations. This
++ implementation should be corrected to use two sockets by default for
++ parallel queries.
++
++ The query stored in BUF of BUFLEN length is sent first followed by
++ the query stored in BUF2 of BUFLEN2 length. Queries are sent
++ serially on the same socket.
++
++ Answers to the query are stored firstly in *ANSP up to a max of
++ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
++ is non-NULL (to indicate that modifying the answer buffer is allowed)
++ then malloc is used to allocate a new response buffer and ANSCP and
++ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
++ are needed but ANSCP is NULL, then as much of the response as
++ possible is read into the buffer, but the results will be truncated.
++ When truncation happens because of a small answer buffer the DNS
++ packets header feild TC will bet set to 1, indicating a truncated
++ message and the rest of the socket data will be read and discarded.
++
++ Answers to the query are stored secondly in *ANSP2 up to a max of
++ *ANSSIZP2 bytes, with the actual response length stored in
++ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
++ is non-NULL (required for a second query) then malloc is used to
++ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
++ size and *ANSP2_MALLOCED is set to 1.
++
++ The ANSP2_MALLOCED argument will eventually be removed as the
++ change in buffer pointer can be used to detect the buffer has
++ changed and that the caller should use free on the new buffer.
++
++ Note that the answers may arrive in any order from the server and
++ therefore the first and second answer buffers may not correspond to
++ the first and second queries.
++
++ It is not supported to call this function with a non-NULL ANSP2
++ but a NULL ANSCP. Put another way, you can call send_vc with a
++ single unmodifiable buffer or two modifiable buffers, but no other
++ combination is supported.
++
++ It is the caller's responsibility to free the malloc allocated
++ buffers by detecting that the pointers have changed from their
++ original values i.e. *ANSCP or *ANSP2 has changed.
++
++ If errors are encountered then *TERRNO is set to an appropriate
++ errno value and a zero result is returned for a recoverable error,
++ and a less-than zero result is returned for a non-recoverable error.
++
++ If no errors are encountered then *TERRNO is left unmodified and
++ a the length of the first response in bytes is returned. */
+ static int
+ send_vc(res_state statp,
+ const u_char *buf, int buflen, const u_char *buf2, int buflen2,
+@@ -647,11 +737,7 @@
+ {
+ const HEADER *hp = (HEADER *) buf;
+ const HEADER *hp2 = (HEADER *) buf2;
+- u_char *ans = *ansp;
+- int orig_anssizp = *anssizp;
+- // XXX REMOVE
+- // int anssiz = *anssizp;
+- HEADER *anhp = (HEADER *) ans;
++ HEADER *anhp = (HEADER *) *ansp;
+ struct sockaddr *nsap = get_nsaddr (statp, ns);
+ int truncating, connreset, n;
+ /* On some architectures compiler might emit a warning indicating
+@@ -743,6 +829,8 @@
+ * Receive length & response
+ */
+ int recvresp1 = 0;
++ /* Skip the second response if there is no second query.
++ To do that we mark the second response as received. */
+ int recvresp2 = buf2 == NULL;
+ uint16_t rlen16;
+ read_len:
+@@ -779,40 +867,14 @@
+ u_char **thisansp;
+ int *thisresplenp;
+ if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
++ /* We have not received any responses
++ yet or we only have one response to
++ receive. */
+ thisanssizp = anssizp;
+ thisansp = anscp ?: ansp;
+ assert (anscp != NULL || ansp2 == NULL);
+ thisresplenp = &resplen;
+ } else {
+- if (*anssizp != MAXPACKET) {
+- /* No buffer allocated for the first
+- reply. We can try to use the rest
+- of the user-provided buffer. */
+-#if __GNUC_PREREQ (4, 7)
+- DIAG_PUSH_NEEDS_COMMENT;
+- DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
+-#endif
+-#if _STRING_ARCH_unaligned
+- *anssizp2 = orig_anssizp - resplen;
+- *ansp2 = *ansp + resplen;
+-#else
+- int aligned_resplen
+- = ((resplen + __alignof__ (HEADER) - 1)
+- & ~(__alignof__ (HEADER) - 1));
+- *anssizp2 = orig_anssizp - aligned_resplen;
+- *ansp2 = *ansp + aligned_resplen;
+-#endif
+-#if __GNUC_PREREQ (4, 7)
+- DIAG_POP_NEEDS_COMMENT;
+-#endif
+- } else {
+- /* The first reply did not fit into the
+- user-provided buffer. Maybe the second
+- answer will. */
+- *anssizp2 = orig_anssizp;
+- *ansp2 = *ansp;
+- }
+-
+ thisanssizp = anssizp2;
+ thisansp = ansp2;
+ thisresplenp = resplen2;
+@@ -820,10 +882,14 @@
+ anhp = (HEADER *) *thisansp;
+
+ *thisresplenp = rlen;
+- if (rlen > *thisanssizp) {
+- /* Yes, we test ANSCP here. If we have two buffers
+- both will be allocatable. */
+- if (__glibc_likely (anscp != NULL)) {
++ /* Is the answer buffer too small? */
++ if (*thisanssizp < rlen) {
++ /* If the current buffer is not the the static
++ user-supplied buffer then we can reallocate
++ it. */
++ if (thisansp != NULL && thisansp != ansp) {
++ /* Always allocate MAXPACKET, callers expect
++ this specific size. */
+ u_char *newp = malloc (MAXPACKET);
+ if (newp == NULL) {
+ *terrno = ENOMEM;
+@@ -835,6 +901,9 @@
+ if (thisansp == ansp2)
+ *ansp2_malloced = 1;
+ anhp = (HEADER *) newp;
++ /* A uint16_t can't be larger than MAXPACKET
++ thus it's safe to allocate MAXPACKET but
++ read RLEN bytes instead. */
+ len = rlen;
+ } else {
+ Dprint(statp->options & RES_DEBUG,
+@@ -997,6 +1066,66 @@
+ return 1;
+ }
+
++/* The send_dg function is responsible for sending a DNS query over UDP
++ to the nameserver numbered NS from the res_state STATP i.e.
++ EXT(statp).nssocks[ns]. The function supports IPv4 and IPv6 queries
++ along with the ability to send the query in parallel for both stacks
++ (default) or serially (RES_SINGLKUP). It also supports serial lookup
++ with a close and reopen of the socket used to talk to the server
++ (RES_SNGLKUPREOP) to work around broken name servers.
++
++ The query stored in BUF of BUFLEN length is sent first followed by
++ the query stored in BUF2 of BUFLEN2 length. Queries are sent
++ in parallel (default) or serially (RES_SINGLKUP or RES_SNGLKUPREOP).
++
++ Answers to the query are stored firstly in *ANSP up to a max of
++ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
++ is non-NULL (to indicate that modifying the answer buffer is allowed)
++ then malloc is used to allocate a new response buffer and ANSCP and
++ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
++ are needed but ANSCP is NULL, then as much of the response as
++ possible is read into the buffer, but the results will be truncated.
++ When truncation happens because of a small answer buffer the DNS
++ packets header feild TC will bet set to 1, indicating a truncated
++ message, while the rest of the UDP packet is discarded.
++
++ Answers to the query are stored secondly in *ANSP2 up to a max of
++ *ANSSIZP2 bytes, with the actual response length stored in
++ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
++ is non-NULL (required for a second query) then malloc is used to
++ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
++ size and *ANSP2_MALLOCED is set to 1.
++
++ The ANSP2_MALLOCED argument will eventually be removed as the
++ change in buffer pointer can be used to detect the buffer has
++ changed and that the caller should use free on the new buffer.
++
++ Note that the answers may arrive in any order from the server and
++ therefore the first and second answer buffers may not correspond to
++ the first and second queries.
++
++ It is not supported to call this function with a non-NULL ANSP2
++ but a NULL ANSCP. Put another way, you can call send_vc with a
++ single unmodifiable buffer or two modifiable buffers, but no other
++ combination is supported.
++
++ It is the caller's responsibility to free the malloc allocated
++ buffers by detecting that the pointers have changed from their
++ original values i.e. *ANSCP or *ANSP2 has changed.
++
++ If an answer is truncated because of UDP datagram DNS limits then
++ *V_CIRCUIT is set to 1 and the return value non-zero to indicate to
++ the caller to retry with TCP. The value *GOTSOMEWHERE is set to 1
++ if any progress was made reading a response from the nameserver and
++ is used by the caller to distinguish between ECONNREFUSED and
++ ETIMEDOUT (the latter if *GOTSOMEWHERE is 1).
++
++ If errors are encountered then *TERRNO is set to an appropriate
++ errno value and a zero result is returned for a recoverable error,
++ and a less-than zero result is returned for a non-recoverable error.
++
++ If no errors are encountered then *TERRNO is left unmodified and
++ a the length of the first response in bytes is returned. */
+ static int
+ send_dg(res_state statp,
+ const u_char *buf, int buflen, const u_char *buf2, int buflen2,
+@@ -1006,8 +1135,6 @@
+ {
+ const HEADER *hp = (HEADER *) buf;
+ const HEADER *hp2 = (HEADER *) buf2;
+- u_char *ans = *ansp;
+- int orig_anssizp = *anssizp;
+ struct timespec now, timeout, finish;
+ struct pollfd pfd[1];
+ int ptimeout;
+@@ -1040,6 +1167,8 @@
+ int need_recompute = 0;
+ int nwritten = 0;
+ int recvresp1 = 0;
++ /* Skip the second response if there is no second query.
++ To do that we mark the second response as received. */
+ int recvresp2 = buf2 == NULL;
+ pfd[0].fd = EXT(statp).nssocks[ns];
+ pfd[0].events = POLLOUT;
+@@ -1203,55 +1332,56 @@
+ int *thisresplenp;
+
+ if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
++ /* We have not received any responses
++ yet or we only have one response to
++ receive. */
+ thisanssizp = anssizp;
+ thisansp = anscp ?: ansp;
+ assert (anscp != NULL || ansp2 == NULL);
+ thisresplenp = &resplen;
+ } else {
+- if (*anssizp != MAXPACKET) {
+- /* No buffer allocated for the first
+- reply. We can try to use the rest
+- of the user-provided buffer. */
+-#if _STRING_ARCH_unaligned
+- *anssizp2 = orig_anssizp - resplen;
+- *ansp2 = *ansp + resplen;
+-#else
+- int aligned_resplen
+- = ((resplen + __alignof__ (HEADER) - 1)
+- & ~(__alignof__ (HEADER) - 1));
+- *anssizp2 = orig_anssizp - aligned_resplen;
+- *ansp2 = *ansp + aligned_resplen;
+-#endif
+- } else {
+- /* The first reply did not fit into the
+- user-provided buffer. Maybe the second
+- answer will. */
+- *anssizp2 = orig_anssizp;
+- *ansp2 = *ansp;
+- }
+-
+ thisanssizp = anssizp2;
+ thisansp = ansp2;
+ thisresplenp = resplen2;
+ }
+
+ if (*thisanssizp < MAXPACKET
+- /* Yes, we test ANSCP here. If we have two buffers
+- both will be allocatable. */
+- && anscp
++ /* If the current buffer is not the the static
++ user-supplied buffer then we can reallocate
++ it. */
++ && (thisansp != NULL && thisansp != ansp)
+ #ifdef FIONREAD
++ /* Is the size too small? */
+ && (ioctl (pfd[0].fd, FIONREAD, thisresplenp) < 0
+ || *thisanssizp < *thisresplenp)
+ #endif
+ ) {
++ /* Always allocate MAXPACKET, callers expect
++ this specific size. */
+ u_char *newp = malloc (MAXPACKET);
+ if (newp != NULL) {
+- *anssizp = MAXPACKET;
+- *thisansp = ans = newp;
++ *thisanssizp = MAXPACKET;
++ *thisansp = newp;
+ if (thisansp == ansp2)
+ *ansp2_malloced = 1;
+ }
+ }
++ /* We could end up with truncation if anscp was NULL
++ (not allowed to change caller's buffer) and the
++ response buffer size is too small. This isn't a
++ reliable way to detect truncation because the ioctl
++ may be an inaccurate report of the UDP message size.
++ Therefore we use this only to issue debug output.
++ To do truncation accurately with UDP we need
++ MSG_TRUNC which is only available on Linux. We
++ can abstract out the Linux-specific feature in the
++ future to detect truncation. */
++ if (__glibc_unlikely (*thisanssizp < *thisresplenp)) {
++ Dprint(statp->options & RES_DEBUG,
++ (stdout, ";; response may be truncated (UDP)\n")
++ );
++ }
++
+ HEADER *anhp = (HEADER *) *thisansp;
+ socklen_t fromlen = sizeof(struct sockaddr_in6);
+ assert (sizeof(from) <= fromlen);
diff --git a/packages/glibc/2.22/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.22/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.22/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.22/910-typedef-caddr.patch b/packages/glibc/2.22/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.22/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.22/920-fix-rpc_parse-format.patch b/packages/glibc/2.22/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.22/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.22/930-explicit-boolean.patch b/packages/glibc/2.22/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.22/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.22/940-nis-bogus-conditional.patch b/packages/glibc/2.22/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.22/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.22/version.desc b/packages/glibc/2.22/version.desc
new file mode 100644
index 0000000..fcfe389
--- /dev/null
+++ b/packages/glibc/2.22/version.desc
@@ -0,0 +1 @@
+obsolete='yes'
diff --git a/packages/glibc/2.23/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch b/packages/glibc/2.23/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
new file mode 100644
index 0000000..6fd663a
--- /dev/null
+++ b/packages/glibc/2.23/101-Suppress-GCC-6-warning-about-ambiguous-else-with-Wpa.patch
@@ -0,0 +1,84 @@
+From df1cf48777fe4cd81ad7fb09ecbe5b31432b7c1c Mon Sep 17 00:00:00 2001
+From: Yvan Roux <yvan.roux@linaro.org>
+Date: Fri, 15 Apr 2016 13:29:26 +0200
+Subject: [PATCH] Suppress GCC 6 warning about ambiguous 'else' with
+ -Wparentheses
+
+---
+ ChangeLog | 5 +++++
+ nis/nis_call.c | 20 +++++++++++---------
+ stdlib/setenv.c | 26 ++++++++++++++------------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+diff --git a/nis/nis_call.c b/nis/nis_call.c
+index 3fa37e4..cb7839a 100644
+--- a/nis/nis_call.c
++++ b/nis/nis_call.c
+@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
+ /* Choose which entry should be evicted from the cache. */
+ loc = &nis_server_cache[0];
+ if (*loc != NULL)
+- for (i = 1; i < 16; ++i)
+- if (nis_server_cache[i] == NULL)
+- {
++ {
++ for (i = 1; i < 16; ++i)
++ if (nis_server_cache[i] == NULL)
++ {
++ loc = &nis_server_cache[i];
++ break;
++ }
++ else if ((*loc)->uses > nis_server_cache[i]->uses
++ || ((*loc)->uses == nis_server_cache[i]->uses
++ && (*loc)->expires > nis_server_cache[i]->expires))
+ loc = &nis_server_cache[i];
+- break;
+- }
+- else if ((*loc)->uses > nis_server_cache[i]->uses
+- || ((*loc)->uses == nis_server_cache[i]->uses
+- && (*loc)->expires > nis_server_cache[i]->expires))
+- loc = &nis_server_cache[i];
++ }
+ old = *loc;
+ *loc = new;
+
+diff --git a/stdlib/setenv.c b/stdlib/setenv.c
+index da61ee0..e66045f 100644
+--- a/stdlib/setenv.c
++++ b/stdlib/setenv.c
+@@ -278,18 +278,20 @@ unsetenv (const char *name)
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+- {
+- /* Found it. Remove this pointer by moving later ones back. */
+- char **dp = ep;
+-
+- do
+- dp[0] = dp[1];
+- while (*dp++);
+- /* Continue the loop in case NAME appears again. */
+- }
+- else
+- ++ep;
++ {
++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
++ {
++ /* Found it. Remove this pointer by moving later ones back. */
++ char **dp = ep;
++
++ do
++ dp[0] = dp[1];
++ while (*dp++);
++ /* Continue the loop in case NAME appears again. */
++ }
++ else
++ ++ep;
++ }
+
+ UNLOCK;
+
+--
+2.7.4
+
diff --git a/packages/glibc/2.23/120-Fix-build-with-enable-static-nss.patch b/packages/glibc/2.23/120-Fix-build-with-enable-static-nss.patch
new file mode 100644
index 0000000..59ab087
--- /dev/null
+++ b/packages/glibc/2.23/120-Fix-build-with-enable-static-nss.patch
@@ -0,0 +1,30 @@
+From 3a36c1eea4fa3b6f3b3b43f7eb91152383ae4ad8 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Tue, 24 Jan 2017 10:31:40 -0800
+Subject: [PATCH] Fix build with --enable-static-nss
+
+* nss/nsswitch.c (nscd_init_cb, is_nscd): make the #if around definitions
+ match those around use, to avoid "defined but not used" error.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ nss/nsswitch.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/nss/nsswitch.c b/nss/nsswitch.c
+index 0a65f6a..8f31658 100644
+--- a/nss/nsswitch.c
++++ b/nss/nsswitch.c
+@@ -94,7 +94,7 @@ static name_database *service_table;
+ static name_database_entry *defconfig_entries;
+
+
+-#ifdef USE_NSCD
++#if defined USE_NSCD && (!defined DO_STATIC_NSS || defined SHARED)
+ /* Nonzero if this is the nscd process. */
+ static bool is_nscd;
+ /* The callback passed to the init functions when nscd is used. */
+--
+2.9.3
+
diff --git a/packages/glibc/2.23/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.23/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.23/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.23/910-typedef-caddr.patch b/packages/glibc/2.23/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.23/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.23/920-fix-rpc_parse-format.patch b/packages/glibc/2.23/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.23/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.23/930-explicit-boolean.patch b/packages/glibc/2.23/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.23/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.23/940-nis-bogus-conditional.patch b/packages/glibc/2.23/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.23/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.23/version.desc b/packages/glibc/2.23/version.desc
new file mode 100644
index 0000000..4bec49f
--- /dev/null
+++ b/packages/glibc/2.23/version.desc
@@ -0,0 +1 @@
+# Not obsolete (Ubuntu 16.04, EOL 04/21)
diff --git a/packages/glibc/2.24/110-sh-fix-gcc6.patch b/packages/glibc/2.24/110-sh-fix-gcc6.patch
new file mode 100644
index 0000000..cacf390
--- /dev/null
+++ b/packages/glibc/2.24/110-sh-fix-gcc6.patch
@@ -0,0 +1,28 @@
+From 279acf7a059f2d2296f690d7f2d886bd0e404f30 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 25 Jan 2017 21:46:53 -0800
+Subject: [PATCH] sh: conditional is false in dl-conflict.c
+
+... ifdef it out, so that it doesn't create a call to abort().
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ 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.9.3
+
diff --git a/packages/glibc/2.24/120-Fix-build-with-enable-static-nss.patch b/packages/glibc/2.24/120-Fix-build-with-enable-static-nss.patch
new file mode 100644
index 0000000..59ab087
--- /dev/null
+++ b/packages/glibc/2.24/120-Fix-build-with-enable-static-nss.patch
@@ -0,0 +1,30 @@
+From 3a36c1eea4fa3b6f3b3b43f7eb91152383ae4ad8 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Tue, 24 Jan 2017 10:31:40 -0800
+Subject: [PATCH] Fix build with --enable-static-nss
+
+* nss/nsswitch.c (nscd_init_cb, is_nscd): make the #if around definitions
+ match those around use, to avoid "defined but not used" error.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ nss/nsswitch.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/nss/nsswitch.c b/nss/nsswitch.c
+index 0a65f6a..8f31658 100644
+--- a/nss/nsswitch.c
++++ b/nss/nsswitch.c
+@@ -94,7 +94,7 @@ static name_database *service_table;
+ static name_database_entry *defconfig_entries;
+
+
+-#ifdef USE_NSCD
++#if defined USE_NSCD && (!defined DO_STATIC_NSS || defined SHARED)
+ /* Nonzero if this is the nscd process. */
+ static bool is_nscd;
+ /* The callback passed to the init functions when nscd is used. */
+--
+2.9.3
+
diff --git a/packages/glibc/2.24/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.24/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.24/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.24/910-typedef-caddr.patch b/packages/glibc/2.24/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.24/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.24/920-fix-rpc_parse-format.patch b/packages/glibc/2.24/920-fix-rpc_parse-format.patch
new file mode 100644
index 0000000..37e58da
--- /dev/null
+++ b/packages/glibc/2.24/920-fix-rpc_parse-format.patch
@@ -0,0 +1,60 @@
+commit 5874510faaf3cbd0bb112aaacab9f225002beed1
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Tue Nov 8 23:44:51 2016 +0000
+
+ Fix rpcgen buffer overrun (bug 20790).
+
+ Building with GCC 7 produces an error building rpcgen:
+
+ rpc_parse.c: In function 'get_prog_declaration':
+ rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ~~~~^
+ rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
+ sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ That buffer overrun is for the case where the .x file declares a
+ program with a million arguments. The strcpy two lines above can
+ generate a buffer overrun much more simply for a long argument name.
+
+ The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
+ provides a bound on the buffer size needed, so this patch just changes
+ the buffer size to MAXLINESIZE to avoid both possible buffer
+ overruns. A testcase is added that rpcgen does not crash with a
+ 500-character argument name, where it previously crashed.
+
+ It would not at all surprise me if there are many other ways of
+ crashing rpcgen with either valid or invalid input; fuzz testing would
+ likely find various such bugs, though I don't think they are that
+ important to fix (rpcgen is not that likely to be used with untrusted
+ .x files as input). (As well as fuzz-findable bugs there are probably
+ also issues when various int variables get overflowed on very large
+ input.) The test infrastructure for rpcgen-not-crashing tests would
+ need extending if tests are to be added for cases where rpcgen should
+ produce an error, as opposed to cases where it should succeed.
+
+ Tested for x86_64 and x86.
+
+ [BZ #20790]
+ * sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
+ to MAXLINESIZE.
+ * sunrpc/bug20790.x: New file.
+ * sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
+ variable.
+ [$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
+ [$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
+
+diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
+index 1a1df6d8c2..505a6554cf 100644
+--- a/sunrpc/rpc_parse.c
++++ b/sunrpc/rpc_parse.c
+@@ -521,7 +521,7 @@ static void
+ get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
+ {
+ token tok;
+- char name[10]; /* argument name */
++ char name[MAXLINESIZE]; /* argument name */
+
+ if (dkind == DEF_PROGRAM)
+ {
diff --git a/packages/glibc/2.24/930-explicit-boolean.patch b/packages/glibc/2.24/930-explicit-boolean.patch
new file mode 100644
index 0000000..780fae6
--- /dev/null
+++ b/packages/glibc/2.24/930-explicit-boolean.patch
@@ -0,0 +1,33 @@
+commit e223d1fe72e820d96f43831412ab267a1ace04d0
+Author: steve ellcey-CA Eng-Software <sellcey@sellcey-thinkpad.caveonetworks.com>
+Date: Fri Oct 14 12:53:27 2016 -0700
+
+ Fix warnings from latest GCC.
+
+ * sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
+ boolean.
+
+diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
+index 663fa392c2..bd758b5979 100644
+--- a/sysdeps/ieee754/dbl-64/e_pow.c
++++ b/sysdeps/ieee754/dbl-64/e_pow.c
+@@ -466,15 +466,15 @@ checkint (double x)
+ return (n & 1) ? -1 : 1; /* odd or even */
+ if (k > 20)
+ {
+- if (n << (k - 20))
++ if (n << (k - 20) != 0)
+ return 0; /* if not integer */
+- return (n << (k - 21)) ? -1 : 1;
++ return (n << (k - 21) != 0) ? -1 : 1;
+ }
+ if (n)
+ return 0; /*if not integer */
+ if (k == 20)
+ return (m & 1) ? -1 : 1;
+- if (m << (k + 12))
++ if (m << (k + 12) != 0)
+ return 0;
+- return (m << (k + 11)) ? -1 : 1;
++ return (m << (k + 11) != 0) ? -1 : 1;
+ }
diff --git a/packages/glibc/2.24/940-nis-bogus-conditional.patch b/packages/glibc/2.24/940-nis-bogus-conditional.patch
new file mode 100644
index 0000000..09b38cf
--- /dev/null
+++ b/packages/glibc/2.24/940-nis-bogus-conditional.patch
@@ -0,0 +1,62 @@
+commit f88759ea9bd3c8d8fef28f123ba9767cb0e421a3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date: Wed Dec 21 23:44:01 2016 +0000
+
+ Fix nss_nisplus build with mainline GCC (bug 20978).
+
+ glibc build with current mainline GCC fails because
+ nis/nss_nisplus/nisplus-alias.c contains code
+
+ if (name != NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ char buf[strlen (name) + 9 + tablename_len];
+
+ producing an error about strlen being called on a pointer that is
+ always NULL (and a subsequent use of that pointer with a %s format in
+ snprintf).
+
+ As Andreas noted, the bogus conditional comes from a 1997 change:
+
+ - if (name == NULL || strlen(name) > 8)
+ - return NSS_STATUS_NOTFOUND;
+ - else
+ + if (name != NULL || strlen(name) <= 8)
+
+ So the intention is clearly to return an error for NULL name.
+
+ This patch duly inverts the sense of the conditional. It fixes the
+ build with GCC mainline, and passes usual glibc testsuite testing for
+ x86_64. However, I have not tried any actual substantive nisplus
+ testing, do not have an environment for such testing, and do not know
+ whether it is possible that strlen (name) or tablename_len might be
+ large so that the VLA for buf is actually a security issue. However,
+ if it is a security issue, there are plenty of other similar instances
+ in the nisplus code (that haven't been hidden by a bogus comparison
+ with NULL) - and nis_table.c:__create_ib_request uses strdupa on the
+ string passed to nis_list, so a local fix in the caller wouldn't
+ suffice anyway (see bug 20987). (Calls to strdupa and other such
+ macros that use alloca must be considered equally questionable
+ regarding stack overflow issues as direct calls to alloca and VLA
+ declarations.)
+
+ [BZ #20978]
+ * nis/nss_nisplus/nisplus-alias.c (_nss_nisplus_getaliasbyname_r):
+ Compare name == NULL, not name != NULL.
+
+diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c
+index 7f698b4e6d..cb5acce01d 100644
+--- a/nis/nss_nisplus/nisplus-alias.c
++++ b/nis/nss_nisplus/nisplus-alias.c
+@@ -291,7 +291,7 @@ _nss_nisplus_getaliasbyname_r (const char *name, struct aliasent *alias,
+ return status;
+ }
+
+- if (name != NULL)
++ if (name == NULL)
+ {
+ *errnop = EINVAL;
+ return NSS_STATUS_UNAVAIL;
diff --git a/packages/glibc/2.24/version.desc b/packages/glibc/2.24/version.desc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/packages/glibc/2.24/version.desc
diff --git a/packages/glibc/2.25/110-sh-fix-gcc6.patch b/packages/glibc/2.25/110-sh-fix-gcc6.patch
new file mode 100644
index 0000000..cacf390
--- /dev/null
+++ b/packages/glibc/2.25/110-sh-fix-gcc6.patch
@@ -0,0 +1,28 @@
+From 279acf7a059f2d2296f690d7f2d886bd0e404f30 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 25 Jan 2017 21:46:53 -0800
+Subject: [PATCH] sh: conditional is false in dl-conflict.c
+
+... ifdef it out, so that it doesn't create a call to abort().
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ 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.9.3
+
diff --git a/packages/glibc/2.25/120-Fix-build-with-enable-static-nss.patch b/packages/glibc/2.25/120-Fix-build-with-enable-static-nss.patch
new file mode 100644
index 0000000..59ab087
--- /dev/null
+++ b/packages/glibc/2.25/120-Fix-build-with-enable-static-nss.patch
@@ -0,0 +1,30 @@
+From 3a36c1eea4fa3b6f3b3b43f7eb91152383ae4ad8 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Tue, 24 Jan 2017 10:31:40 -0800
+Subject: [PATCH] Fix build with --enable-static-nss
+
+* nss/nsswitch.c (nscd_init_cb, is_nscd): make the #if around definitions
+ match those around use, to avoid "defined but not used" error.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ nss/nsswitch.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/nss/nsswitch.c b/nss/nsswitch.c
+index 0a65f6a..8f31658 100644
+--- a/nss/nsswitch.c
++++ b/nss/nsswitch.c
+@@ -94,7 +94,7 @@ static name_database *service_table;
+ static name_database_entry *defconfig_entries;
+
+
+-#ifdef USE_NSCD
++#if defined USE_NSCD && (!defined DO_STATIC_NSS || defined SHARED)
+ /* Nonzero if this is the nscd process. */
+ static bool is_nscd;
+ /* The callback passed to the init functions when nscd is used. */
+--
+2.9.3
+
diff --git a/packages/glibc/2.25/140-Fix-combreloc-test-BSD-grep.patch b/packages/glibc/2.25/140-Fix-combreloc-test-BSD-grep.patch
new file mode 100644
index 0000000..fdc3a60
--- /dev/null
+++ b/packages/glibc/2.25/140-Fix-combreloc-test-BSD-grep.patch
@@ -0,0 +1,49 @@
+From 61d5f9c09b3157db76bd1a393e248c262a8d9dd4 Mon Sep 17 00:00:00 2001
+From: Alexey Neyman <stilor@att.net>
+Date: Wed, 8 Mar 2017 14:31:10 -0800
+Subject: [PATCH] Fix combreloc test with BSD grep
+
+The test for "-z combreloc" fails when cross-compiling on a machine
+that uses BSD grep (e.g. on macos). grep complains about empty
+subexpression and exits with non-zero status, which is interpreted
+by configure as "not found". As a result, support for "-z combreloc"
+(HAVE_Z_COMBRELOC) is not detected, leading to link failure on SPARC.
+
+ * configure.ac: Avoid empty subexpression in grep.
+
+Signed-off-by: Alexey Neyman <stilor@att.net>
+---
+ ChangeLog | 5 +++++
+ configure | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index eecd0ac..0118bd1 100755
+--- a/configure
++++ b/configure
+@@ -5804,7 +5804,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+diff --git a/configure.ac b/configure.ac
+index 4a77411..19f6d87 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1391,7 +1391,7 @@ dnl cross-platform since the gcc used can be a cross compiler. Without
+ dnl introducing new options this is not easily doable. Instead use a tool
+ dnl which always is cross-platform: readelf. To detect whether -z combreloc
+ dnl look for a section named .rel.dyn.
+- if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
++ if $READELF -S conftest.so | grep '\.\(rel\|rela\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
+ else
+ libc_cv_z_combreloc=no
+--
+2.9.3
+
diff --git a/packages/glibc/2.25/910-typedef-caddr.patch b/packages/glibc/2.25/910-typedef-caddr.patch
new file mode 100644
index 0000000..fc7979b
--- /dev/null
+++ b/packages/glibc/2.25/910-typedef-caddr.patch
@@ -0,0 +1,15 @@
+diff -urN glibc-2.23-orig/posix/sys/types.h glibc-2.23/posix/sys/types.h
+--- glibc-2.23-orig/posix/sys/types.h 2016-02-18 12:54:00.000000000 -0500
++++ glibc-2.23/posix/sys/types.h 2017-01-06 11:40:05.842147165 -0500
+@@ -113,7 +113,10 @@
+ #ifdef __USE_MISC
+ # ifndef __daddr_t_defined
+ typedef __daddr_t daddr_t;
++# if ! defined(caddr_t) && ! defined(__caddr_t_defined)
+ typedef __caddr_t caddr_t;
++# define __caddr_t_defined
++# endif
+ # define __daddr_t_defined
+ # endif
+ #endif
+
diff --git a/packages/glibc/2.25/960-sh4-trap-divdi3.patch b/packages/glibc/2.25/960-sh4-trap-divdi3.patch
new file mode 100644
index 0000000..99fad46
--- /dev/null
+++ b/packages/glibc/2.25/960-sh4-trap-divdi3.patch
@@ -0,0 +1,340 @@
+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
+
+ * sysdeps/i386/symbol-hacks.h: New file.
+ * sysdeps/m68k/symbol-hacks.h: New file.
+ * sysdeps/powerpc/powerpc32/symbol-hacks.h: New file.
+ * sysdeps/s390/s390-32/symbol-hacks.h: New file.
+ * sysdeps/unix/sysv/linux/i386/Makefile
+ [$(subdir) = csu] (sysdep_routines): New rule: divdi3 object.
+ [$(subdir) = csu] (sysdep-only-routines): Likewise.
+ [$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+ * sysdeps/unix/sysv/linux/m68k/Makefile
+ [$(subdir) = csu] (sysdep_routines): Likewise.
+ [$(subdir) = csu] (sysdep-only-routines): Likewise.
+ [$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
+ [$(subdir) = csu] (sysdep_routines): Likewise.
+ [$(subdir) = csu] (sysdep-only-routines): Likewise.
+ [$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/Makefile
+ [$(subdir) = csu] (sysdep_routines): Likewise.
+ [$(subdir) = csu] (sysdep-only-routines): Likewise.
+ [$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+ * sysdeps/wordsize-32/Makefile: Remove file.
+ * sysdeps/wordsize-32/symbol-hacks.h: Definitions move to ...
+ * sysdeps/wordsize-32/divdi3-symbol-hacks.h: ... here.
+
+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/packages/glibc/2.25/961-sparc-extra-plt-call.patch b/packages/glibc/2.25/961-sparc-extra-plt-call.patch
new file mode 100644
index 0000000..3781cf0
--- /dev/null
+++ b/packages/glibc/2.25/961-sparc-extra-plt-call.patch
@@ -0,0 +1,65 @@
+commit bdc543e338281da051b3dc06eae96c330a485ce6
+Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date: Thu Mar 16 09:15:57 2017 -0300
+
+ sparc: Fix .udiv plt on libc
+
+ With the removal of divdi3 object from sparcv9-linux-gnu build, its
+ definition came from libgcc and its functions internall calls .udiv.
+ Since glibc also exports these symbols for compatibility reasons, it
+ will end up creating PLT calls internally in libc.so.
+
+ To avoid it, this patch uses the linker option --wrap to replace all
+ the internal libc.so .udiv calls to the wrapper __wrap_.udiv. Along
+ with strong alias in the udiv implementations, it makes linker do
+ local calls.
+
+ Checked on sparcv9-linux-gnu.
+
+ * sysdeps/sparc/sparc32/Makefile (libc.so-gnulib): New rule.
+ * sysdeps/sparc/sparc32/sparcv8/udiv.S (.udiv): Make a strong_alias
+ to __wrap_.udiv.
+ * sysdeps/sparc/sparc32/sparcv9/udiv.S (.udiv): Likewise.
+ * sysdeps/sparc/sparc32/udiv.S (.udiv): Likewise.
+
+diff --git a/sysdeps/sparc/sparc32/Makefile b/sysdeps/sparc/sparc32/Makefile
+index da205898cf..14d6e03c6f 100644
+--- a/sysdeps/sparc/sparc32/Makefile
++++ b/sysdeps/sparc/sparc32/Makefile
+@@ -47,3 +47,9 @@ $(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S): $(sysdep_dir)/sparc/sparc32/divrem.
+ mv -f $@-tmp $@
+
+ sysdep-realclean := $(sysdep-realclean) $(divrem:%=sysdeps/sparc/sparc32/%.S)
++
++# libgcc __divdi3 and __moddi3 uses .udiv and since it is also exported by
++# libc.so linker will create PLTs for the symbol. To avoid it we strong alias
++# the exported libc one to __wrap_.udiv and use linker option --wrap to make any
++# call to .udiv to call the wrapper symbol.
++libc.so-gnulib += -Wl,--wrap=.udiv
+diff --git a/sysdeps/sparc/sparc32/sparcv8/udiv.S b/sysdeps/sparc/sparc32/sparcv8/udiv.S
+index d71954351e..e9cab4e4ef 100644
+--- a/sysdeps/sparc/sparc32/sparcv8/udiv.S
++++ b/sysdeps/sparc/sparc32/sparcv8/udiv.S
+@@ -13,3 +13,4 @@ ENTRY(.udiv)
+ udiv %o0, %o1, %o0
+
+ END(.udiv)
++strong_alias (.udiv, __wrap_.udiv)
+diff --git a/sysdeps/sparc/sparc32/sparcv9/udiv.S b/sysdeps/sparc/sparc32/sparcv9/udiv.S
+index de79899756..368f85ede2 100644
+--- a/sysdeps/sparc/sparc32/sparcv9/udiv.S
++++ b/sysdeps/sparc/sparc32/sparcv9/udiv.S
+@@ -15,3 +15,4 @@ ENTRY(.udiv)
+ udiv %o0, %o1, %o0
+
+ END(.udiv)
++strong_alias (.udiv, __wrap_.udiv)
+diff --git a/sysdeps/sparc/sparc32/udiv.S b/sysdeps/sparc/sparc32/udiv.S
+index 8dfff66158..ade0afdf40 100644
+--- a/sysdeps/sparc/sparc32/udiv.S
++++ b/sysdeps/sparc/sparc32/udiv.S
+@@ -344,3 +344,4 @@ LOC(got_result):
+ mov %o2, %o0
+
+ END(.udiv)
++strong_alias (.udiv, __wrap_.udiv)
diff --git a/packages/glibc/2.25/version.desc b/packages/glibc/2.25/version.desc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/packages/glibc/2.25/version.desc
diff --git a/packages/glibc/package.desc b/packages/glibc/package.desc
new file mode 100644
index 0000000..13e2233
--- /dev/null
+++ b/packages/glibc/package.desc
@@ -0,0 +1,4 @@
+origin='GNU'
+repository='git git://sourceware.org/git/glibc.git'
+mirrors='$(CT_Mirrors GNU glibc) $(CT_Mirrors sourceware glibc/releases)'
+milestones='2.17 2.20 2.23'