diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..182f659
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/glibc-2.28.tar.xz
diff --git a/.glibc.metadata b/.glibc.metadata
new file mode 100644
index 0000000..175a3ec
--- /dev/null
+++ b/.glibc.metadata
@@ -0,0 +1 @@
+ccb5dc9e51a9884df8488f86982439d47b283b2a SOURCES/glibc-2.28.tar.xz
diff --git a/SOURCES/ChangeLog.old b/SOURCES/ChangeLog.old
new file mode 100644
index 0000000..28b5ace
--- /dev/null
+++ b/SOURCES/ChangeLog.old
@@ -0,0 +1,6058 @@
+* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.25.90-30.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Sat Jul 29 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-30
+- Auto-sync with upstream master,
+  commit 5920a4a624b1f4db310d1c44997b640e2a4653e5:
+- mutex: Fix robust mutex lock acquire (swbz#21778)
+
+* Fri Jul 28 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-29
+- Auto-sync with upstream master,
+  commit d95fcb2df478efbf4f8537ba898374043ac4561f:
+- rwlock: Fix explicit hand-over (swbz#21298)
+- tunables: Use direct syscall for access (swbz#21744)
+- Avoid accessing corrupted stack from __stack_chk_fail (swbz#21752)
+- Remove extra semicolons in struct pthread_mutex (swbz#21804)
+- grp: Fix cast-after-dereference (another big-endian group merge issue)
+- S390: fix sys/ptrace.h to make it includible again after asm/ptrace.h
+- Don't add stack_chk_fail_local.o to libc.a (swbz#21740)
+- i386: Test memmove_chk and memset_chk only in libc.so (swbz#21741)
+- Add new locales az_IR, mai_NP (swbz#14172)
+- Various locale improvements
+
+* Thu Jul 27 2017 Carlos O'Donell <codonell@redhat.com> - 2.25.90-28
+- Adjust to new rpm debuginfo generation (#1475009).
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.25.90-27.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Jul 19 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-27
+- Auto-sync with upstream master,
+  commit 00d7a3777369bac3d8d44152dde2bb7381984ef6:
+- aarch64: Fix out of bound array access in _dl_hwcap_string
+
+* Mon Jul 17 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-26
+- Drop glibc-rh1467518.patch in favor of upstream patch (#1467518)
+- Auto-sync with upstream master,
+  commit 91ac3a7d8474480685632cd25f844d3154c69fdf:
+- Fix pointer alignment in NSS group merge result construction (#1471985)
+- Various locale fixes
+
+* Fri Jul 14 2017 Carlos O'Donell <carlos@systemhalted.org> - 2.25.90-25
+- armv7hl: Drop 32-bit ARM build fix, already in upstream master.
+- s390x: Apply glibc fix again, removing PTRACE_GETREGS etc. (#1469536).
+- Auto-sync with upstream master,
+  commit de895ddcd7fc45caeeeb0ae312311b8bd31d82c5:
+- Added Fiji Hindi language locale for Fiji (swbz#21694).
+- Added yesstr/nostr for nds_DE and nds_NL (swbz#21756).
+- Added yesstr and nostr for Tigrinya (swbz#21759).
+- Fix LC_MESSAGES and LC_ADDRESS for anp_IN (swbz#21760).
+- Added yesstr/nostr and fix yesexpr for pap_AW and pap_CW (swbz#21757).
+- Added Tongan language locale for Tonga (swbz#21728).
+- [ARM] Fix ld.so crash when built using Binutils 2.29.
+- Added yesstr and nostr for aa_ET (swbz#21768).
+- New locale for bi_VU (swbz#21767).
+- Disable single thread optimization for open_memstream
+
+* Wed Jul 12 2017 Carlos O'Donell <carlos@redhat.com> - 2.25.90-24
+- Fix IFUNC crash in early startup for ppc64le static binaries (#1467518).
+- Enable building with BIND_NOW on ppc64le (#1467518).
+- Fix 32-bit ARM builds in presence of new binutils.
+
+* Wed Jul 12 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-23
+- malloc: Tell GCC optimizers about MAX_FAST_SIZE in _int_malloc (#1470060)
+- Auto-sync with upstream master,
+  commit 30200427a99e5ddac9bad08599418d44d54aa9aa:
+- Add per-thread cache to malloc
+- Add Samoan language locale for Samoa
+- Add Awajún / Aguaruna locale for Peru
+- CVE-2010-3192: Avoid backtrace from __stack_chk_fail (swbz#12189)
+- Add preadv2, writev2 RWF_NOWAIT flag (swbz#21738)
+- Fix abday strings for ar_JO/ar_LB/ar_SY locales (swbz#21749)
+- Fix abday strings for ar_SA locale (swbz#21748, swbz#19066)
+- Set data_fmt for da_DK locale (swbz#17297)
+- Add yesstr and nostr for the zh_HK locale (swbz#21733)
+- Fix abday strings for the ksIN@devanagari locale (swbz#21743)
+- Do not include _dl_resolv_conflicts in libc.a (swbz#21742)
+- Test __memmove_chk, __memset_chk only in libc.so (swbz#21741)
+- Add iI and eE to  yesexpr and noexpr respectively for ts_ZA locale
+- Add yesstr/nostr for kw_GB locale (swbz#21734)
+- Add yesstr and nostr for the ts_ZA locale (swbz#21727)
+- Fix LC_NAME for hi_IN locale (swbz#21729)
+- Add yesstr and nostr for the xh_ZA locale (swbz#21724)
+- Add yesstr and nostr for the zh_CN locale (swbz#21723)
+- Fix full weekday names for the ks_IN@devanagari locale (swbz#21721)
+- Various fixes to Arabic locales after CLDR import 
+
+* Tue Jul 11 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-22
+- Reinstantiate stack_t cleanup (#1468904)
+- s390x: Restore PTRACE_GETREGS etc. to get GCC to build (#1469536)
+
+* Sun Jul  9 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-21
+- Back out stack_t cleanup (#1468904)
+
+* Thu Jul 06 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-20
+- Auto-sync with upstream master,
+  commit 031e519c95c069abe4e4c7c59e2b4b67efccdee5:
+- x86-64: Align the stack in __tls_get_addr (#1440287)
+- Add Tok-Pisin (tpi_PG) locale.
+- Add missing yesstr/nostr for Pashto locale (swbz#21711)
+- Add missing yesstr/nostr for Breton locale (swbz#21706)
+- Single threaded stdio optimization
+- sysconf: Use conservative default for _SC_NPROCESSORS_ONLN (swbz#21542)
+
+* Tue Jul 04 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-19
+- Auto-sync with upstream master,
+  commit 4446a885f3aeb3a33b95c72bae1f115bed77f0cb.
+
+* Tue Jul 04 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-18
+- Auto-sync with upstream master,
+  commit 89f6307c5d270ed4f11cee373031fa9f2222f2b9.
+
+* Tue Jul  4 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-17
+- Disable building with BIND_NOW on ppc64le (#1467518)
+
+* Mon Jul 03 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-16
+- Auto-sync with upstream master,
+  commit e237357a5a0559dee92261f1914d1fa2cd43a1a8:
+- Support an arbitrary number of search domains in the stub resolver (#168253)
+- Detect and apply /etc/resolv.conf changes in libresolv (#1374239)
+- Increase malloc alignment on i386 to 16 (swbz#21120)
+- Make RES_ROTATE start with a random name server (swbz#19570)
+- Fix tgmath.h totalorder, totalordermag return type (swbz#21687)
+- Miscellaneous sys/ucontext.h namespace fixes (swbz#21457)
+- Rename struct ucontext tag (swbz#21457)
+- Call exit system call directly in clone (swbz#21512)
+- powerpc64le: Enable float128
+- getaddrinfo: Merge IPv6 addresses and IPv4 addresses (swbz#21295)
+- Avoid .symver on common symbols (swbz#21666)
+- inet_pton: Reject IPv6 addresses with many leading zeros (swbz#16637)
+
+* Fri Jun 23 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-15
+- Auto-sync with upstream master,
+  commit 3ec7c02cc3e922b9364dc8cfd1d4546671b91003, fixing:
+- memcmp-avx2-movbe.S incorrect results for lengths 2/3 (#1464403)
+
+* Fri Jun 23 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-14
+- Auto-sync with upstream master,
+  commit 12f50337ae80672c393c2317d471d097ad92c492, changing:
+- localedata: fur_IT: Fix spelling of Wednesday (Miercus)
+- Update to Unicode 10.0.0
+- inet: __inet6_scopeid_pton should accept node-local addresses (swbz#21657)
+
+* Fri Jun 23 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-13
+- Reenable valgrind on aarch64
+
+* Thu Jun 22 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-12
+- Log auxiliary vector during build
+
+* Thu Jun 22 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-11
+- Auto-sync with upstream master,
+  commit 0a47d031e44f15236bcef8aeba80e737bd013c6f.
+
+* Thu Jun 22 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-10
+- Disable valgrind on aarch64
+
+* Wed Jun 21 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-9
+- Drop historic aarch64 TLS patches
+- Drop workaround for GCC PR69537
+- Auto-sync with upstream master,
+  commit 9649350d2ee47fae00794d57e2526aa5d67d900e.
+
+* Wed Jun 21 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-8
+- Adjust build requirements for gcc, binutils, kernel-headers.
+- Auto-sync with upstream master,
+  commit 43e0ac24c836eed627a75ca932eb7e64698407c6, changing:
+- Remove <xlocale.h>
+
+* Mon Jun 19 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-7
+- Drop glibc-Disable-buf-NULL-in-login-tst-ptsname.c, applied upstream.
+- Auto-sync with upstream master,
+  commit 37e9dc814636915afb88d0779e5e897e90e7b8c0, fixing:
+- CVE-2017-1000366: Avoid large allocas in the dynamic linker (#1462820)
+- wait3 namespace (swbz#21625)
+- S390: Sync ptrace.h with kernel (swbz#21539)
+- Another x86 sys/ucontext.h namespace issue (swbz#21457)
+- siginterrupt namespace (swbz#21597)
+- Signal stack namespace (swbz#21584)
+- Define struct rusage in sys/wait.h when required (swbz#21575)
+- S390: Fix build with gcc configured with --enable-default-pie (swbz#21537)
+- Update timezone code from tzcode 2017b
+- nptl: Invert the mmap/mprotect logic on allocated stacks (swbz#18988)
+- PowerPC64 ELFv2 PPC64_OPT_LOCALENTRY
+- Make copy of <bits/std_abs.h> from GCC (swbz#21573)
+- localedata: ce_RU: update weekdays from CLDR (swbz#21207)
+- localedata: Remove trailing spaces (swbz#20275)
+- XPG4 bsd_signal namespace (swbz#21552)
+- Correct collation rules for Malayalam (swbz#19922, swbz#19919)
+- waitid namespace (swbz#21561)
+- Condition signal.h inclusion in sys/wait.h (swbz#21560)
+- ld.so: Consolidate 2 strtouls into _dl_strtoul (swbz#21528)
+- tst-timezone race (swbz#14096)
+- Define SIG_HOLD for XPG4 (swbz#21538)
+- struct sigaltstack namespace (swbz#21517)
+- sigevent namespace (swbz#21543)
+- Add shim header for bits/syscall.h (swbz#21514)
+- namespace issues in sys/ucontext.h (swbz#21457)
+- posix: Implement preadv2 and pwritev2
+- Various float128 and tunables improvements
+
+* Tue Jun 06 2017 Stephen Gallagher <sgallagh@redhat.com> - 2.25.90-6
+- Reduce libcrypt-nss dependency to 'Suggests:'
+
+* Wed May 31 2017 Arjun Shankar <arjun.is@lostca.se> - 2.25.90-5
+- Auto-sync with upstream master,
+  commit cfa9bb61cd09c40def96f042a3123ec0093c4ad0.
+- Fix sys/ucontext.h namespace from signal.h etc. inclusion (swbz#21457)
+- Fix sigstack namespace (swbz#21511)
+
+* Wed May 31 2017 Arjun Shankar <arjun.is@lostca.se> - 2.25.90-4
+- Disable the NULL buffer test in login/tst-ptsname.c. It leads to a build
+  failure during 'make check'. A permanent solution is being discussed
+  upstream.
+
+* Tue May 23 2017 Arjun Shankar <arjun.is@lostca.se> - 2.25.90-3
+- Auto-sync with upstream master,
+  commit 231a59ce2c5719d2d77752c21092960e28837b4a.
+- Add el_GR@euro support (swbz#20686)
+- Set dl_platform and dl_hwcap from CPU features (swbz#21391)
+- Use __glibc_reserved convention in mcontext, sigcontext (swbz#21457)
+- Fix signal.h bsd_signal namespace (swbz#21445)
+- Fix network headers stdint.h namespace (swbz#21455)
+- resolv: Use RES_DFLRETRY consistently (swbz#21474)
+- Condition some sys/ucontext.h contents on __USE_MISC (swbz#21457)
+- Consolidate Linux read syscall (swbz#21428)
+- fork: Remove bogus parent PID assertions (swbz#21386)
+- Reduce value of LD_HWCAP_MASK for tst-env-setuid test case (swbz#21502)
+- libio: Avoid dup already opened file descriptor (swbz#21393)
+
+* Mon May 01 2017 Carlos O'Donell <carlos@systemhalted.org> - 2.25.90-2
+- Auto-sync with upstream master,
+  commit 25e39b4229fb365a605dc4c8f5d6426a77bc08a6.
+- logbl for POWER7 return incorrect results (swbz#21280)
+- sys/socket.h uio.h namespace (swbz#21426)
+- Support POSIX_SPAWN_SETSID (swbz#21340)
+- Document how to provide a malloc replacement (swbz#20424)
+- Verify that all internal sockets opened with SOCK_CLOEXEC (swbz#15722)
+- Use AVX2 memcpy/memset on Skylake server (swbz#21396)
+- unwind-dw2-fde deadlock when using AddressSanitizer (swbz#21357)
+- resolv: Reduce advertised EDNS0 buffer size to guard against
+  fragmentation attacks (swbz#21361)
+- mmap64 silently truncates large offset values (swbz#21270)
+- _dl_map_segments does not test for __mprotect failures consistently
+  (swbz#20831)
+
+* Thu Mar 02 2017 Florian Weimer <fweimer@redhat.com> - 2.25.90-1
+- Switch back to upstream master branch.
+- Drop Unicode 9 patch, merged upstream.
+- Auto-sync with upstream master,
+  commit a10e9c4e53fc652b79abf838f7f837589d2c84db, fixing:
+- Build all DSOs with BIND_NOW (#1406731)
+
+* Wed Mar  1 2017 Jakub Hrozek <jhrozek@redhat.com> - 2.25-3
+- NSS: Prefer sss service for passwd, group databases (#1427646)
+
+* Tue Feb 28 2017 Florian Weimer <fweimer@redhat.com> - 2.25-2
+- Auto-sync with upstream release/2.25/master,
+  commit 93cf93e06ce123439e41d3d62790601c313134cb, fixing:
+- sunrpc: Improvements for UDP client timeout handling (#1346406)
+- sunrpc: Avoid use-after-free read access in clntudp_call (swbz#21115)
+- Fix getting tunable values on big-endian (swbz#21109)
+
+* Wed Feb 08 2017 Carlos O'Donell <carlos@redhat.com> - 2.25-1
+- Update to final released glibc 2.25.
+
+* Wed Feb 08 2017 Carlos O'Donell <carlos@redhat.com> - 2.24.90-31
+- Fix builds with GCC 7.0.
+
+* Wed Feb 01 2017 Carlos O'Donell <carlos@redhat.com> - 2.24.90-30
+- Optimize IBM z System builds for zEC12.
+
+* Wed Jan 25 2017 Florian Weimer <fweimer@redhat.com> - 2.24.90-29
+- Use vpath in crypt-glibc/Makefile to obtain the test input file.
+- Auto-sync with upstream master,
+  commit 5653ab12b4ae15b32d41de7c56b2a4626cd0437a, fixing:
+- ARM fpu_control.h for assemblers requiring VFP insn names (swbz#21047)
+- FAIL in test string/tst-xbzero-opt (swbz#21006)
+- Make soft-float powerpc swapcontext restore the signal mask (swbz#21045)
+- Clear list of acquired robust mutexes in the child after fork (swbz#19402)
+
+* Thu Jan 12 2017 Carlos O'Donell <carlos@systemhalted.org> - 2.24.90-28
+- Auto-sync with upstream master,
+  commit 468e525c81a4af10f2e613289b6ff7c950773a9e:
+- Drop rwlock related patches applied upstream.
+- Fix i686 memchr for large input sizes (swbz#21014)
+- Fix x86 strncat for large input sizes (swbz#19390)
+- powerpc: Fix write-after-destroy in lock elision (swbz#20822)
+- New pthread rwlock that is more scalable.
+- Fix testsuite build for GCC 7 -Wformat-truncation.
+
+* Mon Jan 02 2017 Florian Weimer <fweimer@redhat.com> - 2.24.90-27
+- Auto-sync with upstream master,
+  commit 73dfd088936b9237599e4ab737c7ae2ea7d710e1:
+- Enable tunables.
+- Drop condvar-related patches applied upstream.
+- Update DNS RR type definitions (swbz#20593)
+- CVE-2015-5180: resolv: Fix crash with internal QTYPE (#1249603)
+- sunrpc: Always obtain AF_INET addresses from NSS (swbz#20964)
+
+
+* Mon Dec 26 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-26
+- Auto-sync with upstream master,
+  commit cecbc7967f0bcac718b6f8f8942b58403c0e917c
+- Enable stack protector for most of glibc (#1406731)
+
+* Fri Dec 23 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.24.90-25
+- Auto-sync with upstream master,
+  commit 81e0662e5f2c342ffa413826b7b100d56677b613, fixing:
+- Shared object unload assert when calling dlclose (#1398370, swbz#11941)
+- Fix nss_nisplus build with mainline GCC (swbz#20978)
+- Add Intel TSX blacklist for silicon with known errata.
+- Add fmax, fmin, fmaxf, fminf microbenchmarks.
+- Robust mutexes: Fix lost wake-up (swbz#20973).
+- Add fmaxmag, fminmag, roundeven, roundevenf, roundevenl functions.
+
+* Sun Dec 18 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-24
+- Auto-sync with upstream master,
+  commit e077349ce589466eecd47213db4fae6b80ec18c4, fixing:
+- Warn about assignment in assertions (#1105335)
+- powerpc64/power7 memchr for large input sizes (swbz#20971)
+- fmax, fmin sNaN handling (swbz#20947)
+
+* Mon Dec 12 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-23
+- Auto-sync with upstream master,
+  commit 92dcaa3e2f7bf0f7f1c04cd2fb6a317df1a4e225, fixing:
+- Add getrandom, getentropy (#1172273)
+- Add additional compiler barriers to backtrace tests (swbz#20956)
+
+* Fri Dec 09 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-22
+- Auto-sync with upstream master,
+  commit 0abbe7cd700951082b314182a0958d65238297ef, changing:
+- IN6_IS_ADDR_ does not require enabling non-standard extensions (#1138893)
+- Install libm.a as linker script (swbz#20539)
+- Fix writes past the allocated array bounds in execvpe (swbz#20847)
+- Fix hypot sNaN handling (swbz#20940)
+- Fix x86_64/x86 powl handling of sNaN arguments (swbz#20916)
+- Fix sysdeps/ieee754 pow handling of sNaN arguments (swbz#20916)
+- Fix pow (qNaN, 0) result with -lieee (swbz#20919)
+- Fix --enable-nss-crypt failure of tst-linkall-static (swbz#20918)
+
+* Fri Dec 02 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-21
+- Auto-sync with upstream master,
+  commit 01b23a30b42a90b1ebd882a0d81110a1542e504a, fixing:
+- aarch64: Incorrect dynamic TLS resolution (#1400347)
+
+* Wed Nov 30 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-20
+- Auto-sync with upstream master,
+  commit 9e78f6f6e7134a5f299cc8de77370218f8019237, fixing:
+- stdio buffering with certain network file systems (#1400144)
+- libpthread initialization breaks ld.so exceptions (#1393909)
+- x86_64: Use of PLT and GOT in static archives (swbz#20750)
+- localedata, iconvdata: 0x80->Euro sign mapping for GBK (swbz#20864)
+- math: x86_64 -mfpmath=387 float_t, double_t (swbz#20787)
+
+* Wed Nov 23 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-19
+- Auto-sync with upstream master,
+  commit 7a5e3d9d633c828d84a9535f26b202a6179978e7:
+- Fix default float_t definition (swbz#20855)
+- Fix writes past the allocated array bounds in execvpe (swbz#20847)
+
+* Tue Nov 22 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-18
+- Auto-sync with upstream master,
+  commit 5ee1a4443a3eb0868cef1fe506ae6fb6af33d4ad.
+
+* Wed Nov 16 2016 Carlos O'Donell <carlos@redhat.com> - 2.24.90-17
+* Add new scalable implementation of POSIX read-write locks.
+
+* Wed Nov 16 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-16
+- Do not try to link libcrypt statically during tests
+
+* Wed Nov 16 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-15
+- Auto-sync with upstream master,
+  commit 530862a63e0929128dc98fbbd463b120934434fb, fixing:
+- Fix rpcgen buffer overrun (swbz#20790)
+- Fix ppc64 build failure to swbz#20729 fix attempt
+
+* Wed Nov  2 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-14
+- Drop glibc-swbz20019.patch, applied upstream.
+- dlerror returns NULL after dlsym (RTLD_NEXT) lookup failure (#1333945)
+  (fixed by dropping the revert)
+- Auto-sync with upstream master,
+  commit 9032070deaa03431921315f973c548c2c403fecc, fixing:
+- Correct clog10 documentation (swbz#19673)
+- Fix building with -Os (swbz#20729)
+- Properly initialize glob structure with GLOB_BRACE|GLOB_DOOFFS (swbz#20707)
+- powerpc: Fix TOC stub on powerpc64 clone (swbz#20728)
+- math: Make strtod raise "inexact" exceptions (swbz#19380)
+- malloc: Remove malloc_get_state, malloc_set_state (swbz#19473)
+
+* Sat Oct 22 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-13
+- Auto-sync with upstream master,
+  commit e37208ce86916af9510ffb9ce7b3c187986f07de, changing:
+- Restore <math.h> compatbility with extern "C" wrappers
+
+* Fri Oct 21 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-12
+- Auto-sync with upstream master,
+  commit b3918c44db615637b26d919ce599cd86592316b3, fixing:
+- math: Turn iszero into a function template (#1387415)
+- ARM: Use VSQRT instruction (swbz#20660)
+- math: Stop powerpc copysignl raising "invalid" for sNaN (swbz#20718)
+- x86: Fix FMA and AVX2 detection (swbz#20689)
+- x86: Avoid assertion failure on older Intel CPus (swbz#20647)
+
+* Mon Oct 17 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.24.90-11
+- Add prototype support for detecting invalid IFUNC calls (swbz#20019).
+- New POSIX thread condition variable implementation (swbz#13165).
+
+* Fri Oct 07 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-10
+- Auto-sync with upstream master,
+  commit 5140d036f9c16585448b5908c3a219bd96842161, fixing:
+- resolv: Remove RES_USEBSTRING and its implementation (swbz#20629)
+- Refactor ifunc resolvers due to false debuginfo (swbz#20478)
+
+* Tue Oct 04 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-9
+- Auto-sync with upstream master,
+  commit ff88ee7edfaa439e23c42fccaf3a36cd5f041894, fixing:
+- LONG_WIDTH is incorrectly set to the 64 on 32-bit platforms (#1381582)
+- libio: Multiple fixes for open_{w}memstream (swbz#18241, swbz#20181)
+- Simplify and test _dl_addr_inside_object (swbz#20292)
+
+* Thu Sep 22 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-8
+- Add support for MIPS (#1377795)
+- Drop glibc-rh1315476-1.patch (sln pre-processor cleanup), it was
+  applied upstream.
+- Auto-sync with upstream master,
+  commit 17af5da98cd2c9ec958421ae2108f877e0945451, fixing the following bugs:
+- Fix non-LE TLS in static programs (swbz#19826)
+- resolv: Remove unsupported hook functions from the API (swbz#20016)
+- Remove RR type classification macros (swbz#20592)
+- Remove obsolete DNSSEC support (swbz#20591)
+- manual: Clarify the documentation of strverscmp (swbz#20524)
+
+* Tue Sep 20 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.24.90-7
+- Auto-sync with upstream master.
+
+* Thu Sep 01 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-6
+- Auto-sync with upstream master,
+  commit 4d728087ef8cc826b05bd21d0c74d4eca9b1a27d, fixing:
+- Base <sys/quota.h> on Linux headers (#1360480)
+- Simplify static malloc interposition (swbz#20432)
+
+* Fri Aug 26 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-5
+- Auto-sync with upstream master,
+  commit 7e625f7e85b4e88f10dbde35a0641742af581806, fixing:
+- lt_LT locale: use hyphens in d_fmt (swbz#20497)
+- nptl test time reductions (swbz#19946)
+
+* Sun Aug 21 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-4
+- Auto-sync with upstream master,
+  commit 66abf9bfbe24ac1e7207d26ccad725ed938dc52c, fixing:
+- argp: Do not override GCC keywords with macros (#1366830)
+
+* Wed Aug 17 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-3
+- Auto-sync with upstream master,
+  commit d9067fca40b8aac156d73cfa44d6875813555a6c, with these changes:
+- Avoid duplicating object files already in libc.a (#1352625)
+- CVE-2016-6323: Backtraces can hang on ARM EABI (32-bit) (swbz#20435)
+- et_EE: locale has wrong {p,n}_cs_precedes value (swbz#20459
+
+* Thu Aug 11 2016 Florian Weimer <fweimer@redhat.com> - 2.24.90-2
+- Auto-sync with upstream master,
+  commit f79211792127f38d5954419bb3784c8eb7f5e4e5
+
+* Mon Aug 08 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.24.90-1
+- Set version to 2.24.90 to match upstream development.
+
+* Mon Aug 08 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.23.90-31
+- Auto-sync with upstream master.
+
+* Thu Jul 21 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-30
+- Drop sendmsg/recvmsg compatibility patch (#1344830)
+- glibc-devel depends on libgcc%%{_isa} (#1289356)
+- Drop Requires(pre) on libgcc
+- Introduce libcrypt and libcrypt-nss (#1324623)
+- Do not try to install mtrace when bootstrapping
+
+* Wed Jul 20 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-29
+- Move NSS modules to subpackages (#1338889)
+
+* Wed Jul 13 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-28
+- Auto-sync with upstream master, commit
+  f531f93056b34800383c5154280e7ba5112563c7.
+- Add de_LI.UTF-8 locale.
+- Make ldconfig and sln the same binary.  (#1315476)
+
+* Fri Jul 08 2016 Mike FABIAN <mfabian@redhat.com> - 2.23.90-27
+- Unicode 9.0.0 updates (ctype, charmap, transliteration) (#1351108)
+
+* Tue Jul 05 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-26
+- Auto-sync with upstream master, up to commit
+  30e4cc5413f72c2c728a544389da0c48500d9904, fixing these bug:
+- strcasecmp failure on ppc64le (#nscd breaks initgroups with nis (initgroups are empty) (#1294574)
+
+* Fri Jun 24 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-25
+- Properly handle more invalid --install-langs arguments (#1349906).
+
+* Tue Jun 21 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-24
+- Auto-sync with upstream master, commit
+  a3b473373ee43a292f5ec68a7fda6b9cfb26a9b0, fixing these bugs:
+- Unnecessary mmap fallback in malloc (#1348620)
+- pwritev system call passes incorrect offset to kernel (#1346070)
+
+* Sat Jun 18 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-23
+- Use scriptlet expansion in all-langpacks posttrans script to expand
+  _install_langes macro.
+
+* Mon Jun 13 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-22
+- Remove glibc-fedora-uname-getrlimit.patch.  This patch was
+  introduced to fix bug rhbz#579086 (Preloading a replacement uname
+  is causing environment to be cleaned if libpthread is loaded).
+  UTS namespaces should now offer a cleaner way yo do this.
+- Drop sendmmsg/recvmmsg compat symbols on 32-bit architectures (#1344830)
+* Sat Jun 11 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-21
+- First phase of sendmsg/recvmsg/sendmmsg/recvmmsg ABI revert:
+  GLIBC_2.24 compatibility symbols (#1344830)
+- Auto-sync with upstream master
+  (commit 31d0a4fa646db8b8c97ce24e0ec0a7b73de4fca1),
+  fixing the following bugs:
+- Add eo locale
+- Crash in the nss_db NSS service module during iteration (#1344480)
+
+* Thu Jun 09 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-20
+- Auto-sync with upstream master, fixing this bug:
+- Emacs crashes on startup (#1342976)
+
+* Wed Jun 01 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-19
+- Auto-sync with upstream master.
+- Adjust glibc-rh1315108.patch accordingly.
+- Fix fork redirection in libpthread (#1326903)
+- CVE-2016-4429: stack overflow in Sun RPC clntudp_call (#1337140)
+- Do not disable assertions in release builds (#1338887)
+
+* Wed May 11 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-18
+- Move support for building GCC 2.96 into compat-gcc-296.
+
+* Wed May 11 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-17
+- Temporily revert dlsym (RTLD_NEXT)/dlerror change, to unbreak
+  ASAN until it is fixed (#1335011)
+
+* Mon May  9 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-16
+- Drop the “fix” for fork/vfork NULL symbols in libpthread.  It does
+  not work because ld.so apparently supports some variant of direct
+  binding.
+
+* Mon May 09 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-15
+- Auto-sync with upstream master.
+- Drop glibc-nsswitch-Add-group-merging-support.patch, applied upstream.
+- Drop glibc-rh1252570.patch, alternative fixes applied upstream.
+- Adjust glibc-rh1315108.patch to minor upstream change.
+- Update SUPPORTED file.
+- Experimental fix for NULL fork/vfork symbols in libpthread (#1326903)
+
+* Tue May 03 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.23.90-14
+- Require libselinux for nscd in non-bootstrap configuration.
+
+* Fri Apr 29 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.23.90-13
+- Auto-sync with upstream master.
+
+* Thu Apr 28 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-12
+- Move spec file system information logging to the build stage.
+
+* Thu Apr 14 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-11
+- Auto-sync with upstream master.
+- Unbreak pread/pread64 on armhfp (#1327277)
+
+* Thu Apr 14 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-10
+- Auto-sync with upstream master.
+
+* Thu Apr 14 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-9
+- Auto-sync with upstream master.  Removes type union wait.
+- Update SUPPORTED locales file.
+
+* Fri Apr 08 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-8
+- Auto-sync with upstream master.
+
+* Tue Mar 29 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-7
+- Auto-sync with upstream master.
+- Adjust glibc-rh1252570.patch to partial upstream fix.
+- Drop glibc-fix-an_ES.patch, now included upstream.
+
+* Wed Mar 16 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-6
+- Use 'an' as language abbreviation for an_ES.
+
+* Mon Mar 07 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.23.90-5
+- Auto-sync with upstream master.
+
+* Sun Mar  6 2016 Florian Weimer <fweimer@redhat.com> - 2.23.90-4
+- Remove extend_alloca (#1315108)
+
+* Mon Feb 29 2016 Carlos O'Donell <carlos@redhat.com> - 2.23.90-3
+- Enhance support for upgrading from a non-language-pack system.
+
+* Fri Feb 26 2016 Mike FABIAN <mfabian@redhat.com> - 2.23.90-2
+- Create new language packages for all supported languages.
+  Locales, translations, and locale sources are split into
+  distinct sub-packages. A meta-package is created for users
+  to install all languages. Transparent installation support
+  is provided via dnf langpacks.
+
+* Fri Feb 26 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.23.90-1
+- Upstream development version is now 2.23.90.
+
+* Thu Feb 25 2016 Carlos O'Donell <carlos@systemhalted.org> - 2.22.90-38
+- Auto-sync with upstream master.
+
+* Fri Feb 19 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-37
+- Remove stray newline from Serbian locales (#1114591).
+
+* Tue Feb 16 2016 CArlos O'Donell <carlos@redhat.com> - 2.22.90-36
+- Fix CVE-2015-7547: getaddrinfo() stack-based buffer overflow (#1308943).
+
+* Mon Feb 15 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-35
+- Revert may_alias attribute for struct sockaddr (#1306511).
+- Revert upstream commit 2212c1420c92a33b0e0bd9a34938c9814a56c0f7 (#1252570).
+
+* Sat Feb 13 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-34
+- Auto-sync with upstream master.
+- Support aliasing with struct sockaddr pointers (#1306511).
+
+* Tue Feb 09 2016 Carlos O'Donell <carlos@redhat.com> - 2.22.90-33
+- Use --with-cpu=power8 for ppc64le default runtime (#1227361).
+
+* Tue Feb 02 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-32
+- Auto-sync with upstream master.
+- Add glibc-isinf-cxx11.patch to improve C++11 compatibility.
+
+* Thu Jan 28 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-31
+- Add workaround for GCC PR69537.
+
+* Thu Jan 28 2016 Florian Weimer <fweimer@redhat.com> - 2.22.90-30
+- Auto-sync with upstream master.
+
+* Wed Jan 13 2016 Carlos O'Donell <carlos@redhat.com> - 2.22.90-29
+- New pthread_barrier algorithm with improved standards compliance.
+
+* Wed Jan 13 2016 Carlos O'Donell <carlos@redhat.com> - 2.22.90-28
+- Add group merging support for distributed management (#1146822).
+
+* Tue Jan 12 2016 Carlos O'Donell <carlos@redhat.com> - 2.22.90-27
+- Remove 32-bit POWER support.
+- Add 64-bit POWER7 BE and 64-bit POWER8 BE optimized libraries.
+
+* Mon Dec 21 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-26
+- Auto-sync with upstream master.
+
+* Wed Dec 16 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-25
+- Auto-sync with upstream master.
+- Includes fix for malloc assertion failure in get_free_list.  (#1281714)
+- Drop Unicode 8.0 patches (now merged upstream).
+
+* Sat Dec  5 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-24
+- Put libmvec_nonshared.a into the -devel package.  (#1288738)
+
+* Sat Dec 05 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-23
+- Auto-sync with upstream master.
+
+* Thu Nov 26 2015 Carlos O'Donell <carlos@redhat.com> - 2.22.90-22
+- The generic hidden directive support is already used for
+  preinit/init/fini-array symbols so we drop the Fedora-specific
+  patch that does the same thing.
+  Reported by Dmitry V. Levin <ldv@altlinux.org>
+
+* Thu Nov 26 2015 DJ Delorie <dj@redhat.com> - 2.22.90-22
+- Require glibc-static for C++ tests.
+- Require gcc-c++, libstdc++-static, and glibc-static only when needed.
+- Fix --without docs to not leave info files.
+
+* Fri Nov 20 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-21
+- Auto-sync with upstream master.
+
+* Wed Nov 18 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-20
+- Auto-sync with upstream master.
+
+* Wed Nov 18 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-19
+- Disable -Werror on s390 (#1283184).
+
+* Mon Nov 16 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-18
+- Auto-sync with upstream master.
+
+* Mon Nov 16 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-17
+- Revert temporary armhfp build fix.
+
+* Mon Nov  9 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-16
+- Apply temporary fix for armhfp build issue.
+
+* Mon Nov 09 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-15
+- Auto-sync with upstream master.
+
+* Tue Nov  3 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-14
+- Log uname, cpuinfo, meminfo during build (#1276636)
+
+* Fri Oct 30 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-13
+- Auto-sync with upstream master.
+
+* Fri Oct 30 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-12
+- Revert to upstream implementation of condition variables (#1229659)
+
+* Wed Oct 28 2015 Florian Weimer <fweimer@redhat.com> - 2.22.90-11
+- Disable valgrind test on ppc64p7, too.
+
+* Mon Oct 26 2015 Carlos O'Donell <carlos@redhat.com> - 2.22.90-10
+- Disable valgrind test for ppc64.
+
+* Wed Oct 21 2015 Carlos O'Donell <carlos@redhat.com> - 2.22.90-9
+- Sync with upstream master.
+- Update new condvar implementation.
+
+* Fri Oct  9 2015 Carlos O'Donell <carlos@redhat.com> - 2.22.90-8
+- Remove libbsd.a (#1193168).
+
+* Wed Sep 16 2015 Mike FABIAN <mfabian@redhat.com> - 2.22.90-7
+- Add the C.UTF-8 locale (#902094).
+
+* Wed Sep 16 2015 Carlos O'Donell <carlos@systemhalted.org> - 2.22.90-6
+- Fix GCC 5 and -Werror related build failures.
+- Fix --install-langs bug which causes SIGABRT (#1262040).
+
+* Fri Aug 28 2015 Carlos O'Donell <carlos@systemhalted.org> - 2.22.90-5
+- Auto-sync with upstream master.
+
+* Thu Aug 27 2015 Carlos O'Donell <carlos@redhat.com> - 2.22.90-4
+- Build require gcc-c++ for the C++ tests.
+- Support --without testsuite option to disable testing after build.
+- Support --without benchtests option to disable microbenchmarks.
+- Update --with bootstrap to disable benchtests, valgrind, documentation,
+  selinux, and nss-crypt during bootstrap.
+- Support --without werror to disable building with -Werror.
+- Support --without docs to disable build requirement on texinfo.
+- Support --without valgrind to disable testing with valgrind.
+- Remove c_stubs add-on and enable fuller support for static binaries.
+- Remove librtkaio support (#1227855).
+
+* Sun Aug 16 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.22.90-3
+- Auto-sync with upstream master.
+
+* Fri Aug 14 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.22.90-2
+- Remove initgroups from the default nsswitch.conf (#751450).
+
+* Fri Aug 14 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.22.90-1
+- Sync with upstream master.
+
+* Tue Jul 28 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-20
+- Sync with upstream master.
+
+* Thu Jul 23 2015 Mike FABIAN <mfabian@redhat.com> - 2.21.90-19
+- some more additions to the translit_neutral file by Marko Myllynen
+
+* Tue Jul 14 2015 Mike FABIAN <mfabian@redhat.com> - 2.21.90-18
+- Unicode 8.0.0 updates, including the transliteration files (#1238412).
+
+* Sun Jun 21 2015 Carlos O'Donell <carlos@redhat.com> - 2.21.90-17
+- Remove all linuxthreads handling from glibc spec file.
+
+* Wed Jun 17 2015 Carlos O'Donell <carlos@redhat.com> - 2.21.90-16
+- Move split out architecture-dependent header files into devel package
+  and keep generic variant in headers package, thus keeping headers package
+  content and file list identical across multilib rpms.
+
+* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.21.90-15.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun  3 2015 Carlos O'Donell <carlos@redhat.com> - 2.21.90-15
+- Remove patch to increase DTV surplus which is no longer needed after
+  upstream commit f8aeae347377f3dfa8cbadde057adf1827fb1d44.
+
+* Sat May 30 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-14
+- Fix build failure on aarch64 (#1226459).
+
+* Mon May 18 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-13
+- Sync with upstream master.
+- Install new condvar implementation.
+
+* Fri May 08 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-12
+- Add benchmark comparison scripts.
+
+* Thu May 07 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-11
+- Auto-sync with upstream master.
+- Revert arena threshold fix to work around #1209451.
+
+* Tue Apr 07 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-10
+- Revert last auto-sync (#1209451).
+
+* Mon Apr 06 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-9
+- Auto-sync with upstream master.
+
+* Tue Mar 24 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-8
+- Auto-sync with upstream master.
+
+* Tue Mar 17 2015 Carlos O'Donell <carlos@redhat.com> - 2.21.90-7
+- Use rpm.expand in scripts to reduce set of required RPM features.
+
+* Thu Mar 12 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-6
+- Auto-sync with upstream master.
+
+* Tue Mar  3 2015 Mike Fabian <mfabian@redhat.com> - 2.21.90-5
+- Support installing only those locales specified by the RPM macro
+  %%_install_langs (#156477).
+
+* Mon Feb 23 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.21.90-4
+- Auto-sync with upstream master.
+
+* Sat Feb 21 2015 Till Maas <opensource@till.name> - 2.21.90-3.1
+- Rebuilt for Fedora 23 Change
+  https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code
+
+* Thu Feb 12 2015 Carlos O'Donell <carlos@systemhalted.org> - 2.21.90-3
+- Fix missing clock_* IFUNCs in librtkaio.
+
+* Thu Feb 12 2015 Carlos O'Donell <carlos@systemhalted.org> - 2.21.90-2
+- Auto-sync with upstream master.
+
+* Wed Feb 11 2015 Carlos O'Donell <carlos@systemhalted.org> - 2.21.90-1
+- Add back x86 vDSO support.
+- Fix rtkaio build to reference clock_* functions from libc.
+
+* Wed Jan 21 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-20
+- Sync with upstream master.
+- Disable werror on s390x.
+- Revert x86 vDSO support since it breaks i686 rtkaio build.
+
+* Tue Jan 20 2015 Peter Robinson <pbrobinson@fedoraproject.org> 2.20.90-19
+- Drop large ancient ChangeLogs (rhbz #1169546)
+
+* Mon Jan 12 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-18
+- Pass address of main_arena.mutex to mutex_lock/unlock.
+
+* Thu Jan 08 2015 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-17
+- Define a __tls_get_addr macro to avoid a conflicting declaration.
+
+* Wed Jan 07 2015 Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> - 2.20.90-16
+- Disable -Werror for s390 as well.
+
+* Wed Jan 07 2015 Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> - 2.20.90-14
+- Sync with upstream master.
+- Disable -Werror on powerpc and armv7hl.
+- Temporarily disable valgrind test on ppc64.
+
+* Sun Dec 28 2014 Dan Horák <dan[at]danny.cz>
+- valgrind available only on selected arches (missing on s390)
+
+* Wed Dec 10 2014 Kyle McMartin <kmcmarti@redhat.com>
+- aarch64: Drop strchrnul.S revert, apply fix from Richard Earnshaw.
+
+* Fri Dec 05 2014 Carlos O'Donell <carlos@redhat.com> - 2.20.90-13
+- Fix permission of debuginfo source files to allow multiarch
+  debuginfo packages to be installed and upgraded.
+
+* Fri Dec 05 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-12
+- Remove LIB_LANG since we don't install locales in /usr/lib/locale anymore.
+- Don't own any directories in /usr/share/locale (#1167445).
+- Use the %%find_lang macro to get the *.mo files (#1167445).
+- Add %%lang tags to language locale files in /usr/share/i18n/locale (#1169044).
+
+* Wed Dec 03 2014 Kyle McMartin <kyle@fedoraproject.org> - 2.20.90-11
+- aarch64: revert optimized strchrnul.S implementation (rhbz#1167501)
+  until it can be debugged.
+
+* Fri Nov 28 2014 Carlos O'Donell <carlos@redhat.com> - 2.20.90-10
+- Auto-sync with upstream master.
+
+* Wed Nov 19 2014 Carlos O'Donell <carlos@redhat.com> - 2.20.90-9
+- Sync with upstream master.
+
+* Wed Nov 05 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-8
+- Make getconf return only /usr/bin (#1138835).
+- Sync with upstream master.
+
+* Tue Nov 04 2014 Arjun Shankar <arjun.is@lostca.se> - 2.20.90-7
+- Add patch that modifies several tests to use test-skeleton.c.
+  The patch is accepted but not yet committed upstream.
+  https://sourceware.org/ml/libc-alpha/2014-10/msg00744.html
+
+* Tue Sep 30 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-6
+- Sync with upstream master.
+- Disable more Intel TSX usage in rwlocks (#1146967).
+- Enable lock elision again on s390 and s390x.
+- Enable Systemtap SDT probes for all architectures (#985109).
+
+* Fri Sep 26 2014 Carlos O'Donell <carlos@redhat.com> - 2.20.90-5
+- Disable lock elision support for Intel hardware until microcode
+  updates can be done in early bootup (#1146967).
+- Fix building test tst-strtod-round for ARM.
+
+* Tue Sep 23 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-4
+- Sync with upstream master.
+- Don't own the common debuginfo directories (#1144853).
+- Run valgrind in the %%check section to ensure that it does not break.
+
+* Tue Sep 16 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-3
+- Sync with upstream master.
+- Revert patch for #737223.
+
+* Mon Sep 08 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-2
+- Build build-locale-archive statically again.
+
+* Mon Sep 08 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.20.90-1
+- Sync with upstream master.
+
+* Thu Sep  4 2014 Carlos O'Donell <carlos@redhat.com> - 2.19.90-36
+- Allow up to 32 dlopened modules to use static TLS (#1124987).
+- Run glibc tests in %%check section of RPM spec file.
+- Do not run tests with `-k` and fail if any test fails to build.
+
+* Tue Aug 26 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-35
+- Sync with upstream master.
+- Use INTERNAL_SYSCALL in TLS_INIT_TP (#1133134).
+- Remove gconv loadable module transliteration support (CVE-2014-5119, #1119128).
+
+* Fri Aug 22 2014 Dennis Gilmore <dennis@ausil.us> - 2.19.90-34
+- add back sss to nsswitch.conf we have added workarounds in the tools
+
+* Thu Aug 21 2014 Kevin Fenzi <kevin@scrye.com> - 2.19.90-33.1
+- Rebuild for rpm bug 1131960
+
+* Tue Aug 19 2014 Dennis Gilmore <dennis@ausil.us> - 2.19.90-33
+- remove sss from default nsswitch.conf it causes issues with live image composing
+
+* Wed Aug 13 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-32
+- Auto-sync with upstream master.
+- Revert to only defining __extern_always_inline for g++-4.3+.
+- Fix build failure in compat-gcc-32 (#186410).
+
+* Mon Jul 28 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-31
+- Auto-sync with upstream master.
+
+* Wed Jul 23 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-30
+- Undo last master sync to fix up rawhide.
+
+* Tue Jul 15 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-29
+- Auto-sync with upstream master.
+
+* Sat Jul 12 2014 Tom Callaway <spot@fedoraproject.org> - 2.19.90-28
+- fix license handling
+
+* Mon Jul 07 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-27
+- Auto-sync with upstream master.
+
+* Fri Jul 04 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-26
+- Sync with upstream roland/nptl branch.
+- Improve testsuite failure outputs in build.log
+
+* Thu Jul 03 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-25
+- Sync with upstream roland/nptl branch.
+
+* Wed Jul 02 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-24
+- Sync with upstream master.
+
+* Tue Jun 24 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-23
+- Sync with upstream master.
+- Add fix to unbreak i386 ABI breakage due to a change in scalbn.
+
+* Fri Jun 20 2014 Kyle McMartin <kmcmarti@redhat.com> - 2.19.90-22
+- AArch64: Save & restore NZCV (flags) upon entry to _dl_tlsdesc_dynamic
+  in order to work around GCC reordering compares across the TLS
+  descriptor sequence (GCC PR61545.) Committing a (temporary) fix here
+  allows us to avoid rebuilding the world with gcc 4.9.0-11.fc21.
+
+* Mon Jun 16 2014 Kyle McMartin <kmcmarti@redhat.com> - 2.19.90-21
+- Auto-sync with upstream master.
+
+* Thu Jun 12 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-20
+- Auto-sync with upstream master.
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.19.90-19.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Tue Jun 03 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-19
+- Sync with upstream master.
+
+* Mon May 26 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-18
+- Sync with upstream master.
+- Adjust rtkaio patches to build with upstream master.
+
+* Wed May 21 2014 Kyle McMartin <kyle@fedoraproject.org> - 2.19.90-17
+- Backport some upstream-wards patches to fix TLS issues on AArch64.
+
+* Wed May 21 2014 Kyle McMartin <kyle@fedoraproject.org> - 2.19.90-16
+- AArch64: Fix handling of nocancel syscall failures (#1098327)
+
+* Thu May 15 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-15
+- Sync with upstream master.
+
+* Wed May 14 2014 Carlos O'Donell <carlos@redhat.com> - 2.19.90-14
+- Add support for displaying all test results in build logs.
+
+* Wed May 14 2014 Carlos O'Donell <carlos@redhat.com> - 2.19.90-13
+- Add initial support for ppc64le.
+
+* Tue Apr 29 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-12
+- Auto-sync with upstream master.
+- Remove ports addon.
+
+* Fri Apr 18 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-11
+- Sync with upstream master.
+
+* Thu Apr 10 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-10
+- Sync with upstream master.
+
+* Thu Apr 03 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-9
+- Sync with upstream master.
+
+* Wed Mar 26 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-8
+- Sync with upstream master.
+
+* Wed Mar 19 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-7
+- Sync with upstream master.
+- Fix offset computation for append+ mode on switching from read (#1078355).
+
+* Wed Mar 12 2014 Carlos O'Donell <carlos@redhat.com> - 2.19.90-6
+- Sync with upstream master.
+- Use cleaner upstream solution for -ftree-loop-distribute-patterns (#911307).
+
+* Tue Mar 04 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-5
+- Sync with upstream master.
+
+* Thu Feb 27 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-4
+- Use nscd service files from glibc sources.
+- Make nscd service forking in systemd service file.
+
+* Tue Feb 25 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-3
+- Sync with upstream master.
+- Separate ftell from fseek logic and avoid modifying FILE data (#1069559).
+
+* Mon Feb 24 2014 Carlos O'Donell <carlos@redhat.com> - 2.19.90-2
+- Fix build-locale-archive failure to open default template.
+
+* Tue Feb 18 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.19.90-1
+- Sync with upstream master.
+
+* Tue Feb 04 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-27
+- Sync with upstream master.
+
+* Wed Jan 29 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-26
+- Modify regular expressions to include powerpcle stubs-*.h (#1058258).
+
+* Wed Jan 29 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-25
+- Sync with upstream master.
+
+* Sat Jan 25 2014 Ville Skyttä <ville.skytta@iki.fi> - 2.18.90-24
+- Own the %%{_prefix}/lib/locale dir.
+
+* Thu Jan 23 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-23
+- Sync with upstream master.
+
+* Thu Jan 16 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-22
+- Back out ftell test case (#1052846).
+
+* Tue Jan 14 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-21
+- Sync with upstream master.
+- Fix infinite loop in ftell when writing wide char data (#1052846).
+
+* Tue Jan  7 2014 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-20
+- Sync with upstream master.
+- Enable systemtap probes on Power and S/390.
+
+* Fri Dec 27 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-19
+- Sync with upstream master.
+
+* Fri Dec 20 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-18
+- Sync with upstream master.
+
+* Wed Dec  4 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-17
+- Sync with upstream master.
+  - Fix shm_open validation (#1037787);
+
+* Thu Nov 28 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-16
+- Sync with upstream master.
+
+* Wed Nov 20 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-15
+- Sync with upstream master.
+
+* Fri Nov  8 2013 Carlos O'Donell <carlos@redhat.com> - 2.18.90-14
+- Enhance NSCD's SELinux support to use dynamic permission names (#1025126).
+
+* Mon Oct 28 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-13
+- Sync with upstream master.
+  - Skip over unimplemented timezone format specifier in strptime (#947722).
+
+* Mon Oct 21 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-12
+- Allow fill_archive to be called with NULL fname.
+- Sync with upstream master.
+
+* Tue Oct 15 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-11
+- Sync with upstream master.
+
+* Thu Oct  3 2013 Carlos O'Donell <carlos@redhat.com> - 2.18.90-10
+- Allow applications to use pthread_atfork without explicitly
+  requiring libpthread.so. (#1013801)
+- Support `--list-archive FILE' in localedef utility.
+
+* Thu Oct  3 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-9
+- Define swap_endianness_p in build-locale-archive.
+
+* Wed Oct  2 2013 Carlos O'Donell <carlos@redhat.com> - 2.18.90-8
+- Allow ldconfig cached objects previously marked as hard or soft
+  ABI to now become unmarked without raising an error. This works
+  around a binutils bug that caused objects to become unmarked.
+  (#1009145)
+
+* Tue Oct  1 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-7
+- Fix check for PI mutex on non-x86 systems (#1007590).
+- Resync with upstream master.
+
+* Tue Sep 24 2013 Carlos O'Donell <carlos@redhat.com> - 2.18.90-6
+- Avoid the use of __block which is a reserved keyword for clang++
+  (#1009623).
+
+* Mon Sep 23 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-5
+- Resync with upstream master.
+
+* Sun Sep 22 2013 Carlos O'Donell <carlos@redhat.com> - 2.18.90-4
+- Fix CVE-2013-4788: Static applications now support pointer mangling.
+  Existing static applications must be recompiled (#985625).
+
+* Wed Sep 18 2013 Patsy Franklin <pfrankli@redhat.com> - 2.18.90-3
+- Fix conditional requiring specific binutils for s390/s390x.
+
+* Mon Sep 16 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-2
+- Resync with upstream master.
+- Fix CVE-2013-4332 (#1008299).
+
+* Thu Sep  5 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18.90-1
+- Resync with upstream master.
+- Drop patch for #800224.
+
+* Thu Aug 29 2013 Carlos O'Donell <carlos@redhat.com> - 2.18-6
+- Fix Power build (#997531).
+
+* Wed Aug 28 2013 Carlos O'Donell <carlos@redhat.com> - 2.18-5
+- Fix indirect function support to avoid calling optimized routines
+  for the wrong hardware (#985342).
+
+* Mon Aug 26 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18-4
+- Initialize res_hconf in nscd. (#1000924).
+
+* Tue Aug 20 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18-3
+- Remove non-ELF support in rtkaio.
+- Avoid inlining of cleanup function for kaio_suspend.
+- Expand sizes of some types in strcoll (#855399, CVE-2012-4424).
+- Fix tst-aiod2 and tst-aiod3 test failures (#970865).
+
+* Mon Aug 19 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18-2
+- Fix buffer overflow in readdir_r (#995841, CVE-2013-4237).
+- Remove releng tarball.
+
+* Fri Aug 16 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.18-1
+- Upstream release 2.18.
+- Pull in systemd during build and use the tmpfilesdir macro.
+
+* Wed Aug 14 2013 Carlos O'Donell <codonell@redhat.com> - 2.17.90-14
+- Update spec file to use rpm prefix everywhere.
+
+* Tue Aug 13 2013 Carlos O'Donell <codonell@redhat.com> - 2.17.90-13
+- Revert `Move to /usr' transition.
+
+* Tue Aug 13 2013 Carlos O'Donell <codonell@redhat.com> - 2.17.90-12
+- Complete `Move to /usr' transition. All relevant files are now
+  installed into `/usr'.
+
+* Wed Aug 07 2013 Karsten Hopp <karsten@redhat.com> 2.17.90-11
+- rebuild with the latest rpm to fix missing ld64.so provides on PPC
+
+* Mon Jul 29 2013 Carlos O'Donell <codonell@redhat.com> - 2.17.90-10
+- Fix missing libbsd.a in debuginfo packages.
+
+* Mon Jul 29 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-9
+- Fix strcoll flaws (#855399, CVE-2012-4412, CVE-2012-4424).
+
+* Mon Jul 29 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-8
+- Resync with upstream master.
+- Disable pt_chown (CVE-2013-2207).
+
+* Thu Jul 25 2013 Carlos O'Donell <carlos@redhat.com> - 2.17.90-7
+- Correctly name the 240-bit slow path sytemtap probe slowpow_p10 for slowpow.
+
+* Wed Jul 24 2013 Carlos O'Donell <carlos@redhat.com> - 2.17.90-6
+- Add build requirement on static libstdc++ library to fix testsuite failures
+  for static C++ tests.
+
+* Fri Jul 12 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-5
+- Enable lock elision support (#982363).
+- Depend on systemd instead of systemd-units (#983760).
+
+* Tue Jul  9 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-4
+- Resync with upstream master.
+
+* Thu Jun 20 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-3
+- Resync with upstream master.
+
+* Tue Jun 11 2013 Remi Collet <rcollet@redhat.com> - 2.17.90-2
+- rebuild for new GD 2.1.0
+
+* Tue Jun  4 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17.90-1
+- Resync with upstream master.
+
+* Tue May 14 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17-9
+- Avoid crashing in LD_DEBUG when program name is unavailable (#961238).
+
+* Sun May  5 2013 Patsy Franklin <pfrankli@redhat.com> - 2.17-8
+- Fix _nl_find_msg malloc failure case, and callers. (#959034).
+
+* Tue Apr 23 2013 Patsy Franklin <pfrankli@redhat.com> - 2.17-7
+- Test init_fct for NULL, not result->__init_fct, after demangling (#952799).
+
+* Tue Apr 23 2013 Patsy Franklin <pfrankli@redhat.com> - 2.17-6
+- Increase limits on xdr name and record requests (#892777).
+- Consistently MANGLE/DEMANGLE init_fct, end_fct and btow_fct (#952799).
+
+* Thu Mar 28 2013 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.17-5
+- Don't add input group during initgroups_dyn in hesiod (#921760).
+
+* Sun Mar 17 2013 Carlos O'Donell <carlos@redhat.com> - 2.17-4
+- Fixed i386 glibc builds (#917161).
+- Fixed multibyte character processing crash in regexp (#905877, CVE-2013-0242)
+
+* Wed Feb 27 2013 Carlos O'Donell <carlos@redhat.com> - 2.17-3
+- Renamed release engineering directory to `releng' (#903754).
+- Fix building with gcc 4.8.0 (#911307).
+
+* Thu Feb 7 2013 Carlos O'Donell <carlos@redhat.com> - 2.17-2
+- Fix ownership of /usr/lib[64]/audit (#894307).
+- Support unmarked ARM objects in ld.so.cache and aux cache (#905184).
+
+* Tue Jan 1 2013 Jeff Law <law@redhat.com> - 2.17-1
+- Resync with official glibc-2.17 release
+* Fri Dec 21 2012 Jeff Law <law@redhat.com> - 2.16.90-40
+- Resync with master
+
+* Wed Dec 19 2012 Jeff Law <law@redhat.com> - 2.16.90-39
+- Add rtld-debugger-interface.txt as documentation. (#872242)
+
+* Fri Dec 7 2012 Jeff Law <law@redhat.com> - 2.16.90-38
+- Resync with master
+- Drop patch for 731228 that is no longer needed.
+
+* Thu Dec 6 2012 Jeff Law <law@redhat.com> - 2.16.90-37
+- Resync with master
+- Patch for 697421 has been submitted upstream.
+- Drop local patch for 691912 that is no longer needed.
+
+* Mon Dec 3 2012 Jeff Law <law@redhat.com> - 2.16.90-36
+- Resync with master
+- Drop local patch for 657588 that is no longer needed.
+- Drop local patch for 740682 that is no longer needed.
+- Drop local patch for 770439 that is no longer needed.
+- Drop local patch for 789209 that is no longer needed.
+- Drop local patch for nss-files-overflow that seems
+  useless.
+- Drop localedata-locales-fixes as they were rejected
+  upstream.
+- Drop test-debug-gnuc-hack.patch that seems useless now.
+- Repack patchlist.
+
+* Fri Nov 30 2012 Jeff Law <law@redhat.com> - 2.16.90-35
+- Resync with master (#882137).
+- Remove local patch for strict-aliasing warnings that
+  is no longer needed.
+- Remove local patch for 730856 that is no longer needed.
+- Repack patchlist.
+
+* Thu Nov 29 2012 Jeff Law <law@redhat.com> - 2.16.90-34
+- Remove local patch which "temporarily" re-added currences
+  obsoleted by the Euro.
+- Remove hunks from strict-aliasing patch that are no longer
+  needed.
+
+* Thu Nov 29 2012 Jeff Law <law@redhat.com> - 2.16.90-33
+- Resync with master.
+- Drop local patch for 788989.
+- Repack patchlist.
+
+* Wed Nov 28 2012 Jeff Law <law@redhat.com> - 2.16.90-32
+- Resync with master.
+- Drop local patch for 878913.
+- Drop local patch for 880666.
+- Drop local patch for 767693.
+- Repack patchlist.
+
+* Tue Nov 27 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-31
+- Ensure that hashtable size is greater than 3 (#878913).
+- fwrite returns 0 on EOF (#880666).
+
+* Mon Nov 26 2012 Jeff Law <law@redhat.com> - 2.16.90-30
+- Resync with upstream sources
+- Drop local patch for getconf.
+- Repack patchlist.
+
+* Fri Nov 16 2012 Jeff Law <law@redhat.com> - 2.16.90-29
+- Rsync with upstream sources
+- Drop local patches for 803286, 791161, 790292, 790298
+
+* Wed Nov 7 2012 Jeff Law <law@redhat.com> - 2.16.90-28
+- Resync with upstream sources (#873397)
+
+* Mon Nov 5 2012 Jeff Law <law@redhat.com> - 2.16.90-27
+- Resync with upstream sources.
+- Don't use distinct patches for 770869, 787201 and 688948
+  as they all modify stuff under fedora/
+- Repack patchlist
+
+* Thu Nov 1 2012 Jeff Law <law@redhat.com> - 2.16.90-26
+- Resync with upstream sources (#872336)
+
+* Mon Oct 22 2012 Jeff Law <law@redhat.com> - 2.16.90-25
+- Rsync with upstream sources
+- Drop 864820 patch as now that it's upstream.
+- Add sss to /etc/nsswitch.conf (#867473)
+
+* Thu Oct 11 2012 Jeff Law <law@redhat.com> - 2.16.90-24
+- Rsync with upstream sources
+- Drop local 552960-2 patch now that it's upstream.
+- Drop local 858274 patch now that the root problem is fixed upstream.
+- Repack patchlist.
+
+* Wed Oct 10 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-23
+- Fix Marathi names for Wednesday, September and October (#rh864820).
+
+* Fri Oct  5 2012 Jeff Law <law@redhat.com> - 2.16.90-22
+- Resync with upstream sources
+- Drop local 552960 patch now that it's upstream
+- Drop local stap patch now obsolete
+- Drop local s390 patch which avoided problems with old assemblers
+- Drop old fortify source patch to deal with old compilers
+
+* Thu Oct 4 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-21
+- Take mutex in cleanup only if it is not already taken.
+
+* Tue Oct 2 2012 Jeff Law <law@redhat.com> - 2.16.90-20
+- Resync with upstream sources.
+- Repack patchlist.
+
+* Mon Oct 1 2012 Jeff Law <law@redhat.com> - 2.16.90-19
+- Resync with upstream sources to pick up fma fixes
+
+* Fri Sep 28 2012 Jeff Law <law@redhat.com> - 2.16.90-18
+- Resync with upstream sources.
+- Drop fedora-cdefs-gnuc.patch, it's not needed anymore.
+- Drop fedora-gai-rfc1918.patch, it's upstream now.
+- Drop fedora-localedata-no_NO.patch, it was supposed to be
+  temporary -- that was back in 2003.  This should have been
+  sorted out long ago.  We'll just have to deal with the
+  fallout.
+- Drop fedora-vfprintf-sw6530.patch, it's upstream now.
+- Drop rh769421.patch; Siddhesh has fixed this properly with 552960.
+
+* Fri Sep 28 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-17
+- Release mutex before going back to wait for PI mutexes (#552960).
+
+* Tue Sep 25 2012 Jeff Law <law@redhat.com> - 2.16.90-16
+- Resync with upstream sources.
+
+* Fri Sep 21 2012 Jeff Law <law@redhat.com> - 2.16.90-15
+- Remove most of fedora-nscd patch as we no longer use the
+  old init files, but systemd instead.
+- Remove path-to-vi patch.  With the usr-move changes that
+  patch is totally unnecessary.
+- Remove i686-nopl patch.  Gas was changed back in 2011 to
+  avoid nopl.
+- Move gai-rfc1918 patch to submitted upstream status
+
+* Fri Sep 21 2012 Jeff Law <law@redhat.com> - 2.16.90-14
+- Revert patch for 816647, it's blatently broken.
+
+* Fri Sep 21 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-13
+- Bring back byteswap-16.h (#859268).
+
+* Thu Sep 20 2012 Jeff Law <law@redhat.com> - 2.16.90-12
+- Revert recent upstream strstr changes (#858274)
+- Demangle function pointers before testing them (#816647)
+- Remove handling of /etc/localtime and /var/spool/postfix/etc/localtime
+  as systemd will be handling them from now on (#858735).
+
+* Fri Sep 14 2012 Jeff Law <law@redhat.com> - 2.16.90-11
+- Resync with upstream sources (#857236).
+
+* Sat Sep  8 2012 Peter Robinson <pbrobinson@fedoraproject.org> - 2.16.90-10
+- Enable ports to fix FTBFS on ARM
+
+* Wed Sep 5 2012 Jeff Law <law@redhat.com> - 2.16.90-9
+- Resync with upstream sources.
+
+* Tue Sep 4 2012 Jeff Law <law@redhat.com> - 2.16.90-8
+- Incorporate ppc64p7 arch changes (#854250)
+
+* Thu Aug 30 2012 Jeff Law <law@redhat.com> - 2.16.90-7
+- Resync with upstream sources.
+
+* Wed Aug 22 2012 Jeff Law <law@redhat.com> - 2.16.90-6
+- Resync with upstream sources.
+
+* Tue Aug 21 2012 Jeff Law <law@redhat.com> - 2.16.90-5
+- Replace manual systemd scriptlets with macroized scriptlets (#850129)
+
+* Mon Aug 20 2012 Jeff Law <law@redhat.com> - 2.16.90-4
+- Move /etc/localtime into glibc-common package since glibc-common
+  owns the scriptlets which update it.
+
+* Mon Aug 20 2012 Jeff Law <law@redhat.com> - 2.16.90-3
+- Remove obsolete patches from glibc-fedora.patch.  Explode
+  remaining patches into distinct patchfiles.  Thanks to
+  Dmitry V. Levin for identifying them!
+  Drop ia64 specific patches and specfile fragments
+
+* Wed Aug 15 2012 Jeff Law <law@redhat.com> - 2.16.90-2
+- Fix integer overflow leading to buffer overflow in strto* (#847718)
+
+* Mon Aug 13 2012 Jeff Law <law@redhat.com> - 2.16.90-1
+- Resync with upstream sources, drop obsolete patches.
+- Drop glibc-ports bits as they're part of the master
+  sources now.
+
+* Mon Aug 13 2012 Jeff Law <law@redhat.com> - 2.16-9
+- Replace patch for 179072 with official version from upstream.
+
+* Fri Aug 10 2012 Jeff Law <law@redhat.com> - 2.16-8
+- Replace patch for 789238 with official version from upstream.
+
+* Wed Jul 25 2012 Jeff Law <law@redhat.com> - 2.16-7
+- Pack IPv4 servers at the start of nsaddr_list and
+  only track the number of IPV4 servers in EXT(statp->nscounti (#808147)
+- Mark set*uid, set*gid as __wur (warn unused result) (#845960)
+
+* Wed Jul 25 2012 Jeff Law <law@redhat.com> - 2.16-6
+- Revert patch for BZ696143, it made it impossible to use IPV6
+  addresses explicitly in getaddrinfo, which in turn broke
+  ssh, apache and other code. (#808147)
+- Avoid another unbound alloca in vfprintf (#841318)
+- Remove /etc/localtime.tzupdate in lua scriptlets
+- Revert back to using posix.symlink as posix.link with a 3rd
+  argument isn't supported in the lua version embedded in rpm.
+- Revert recent changes to res_send (804630, 835090).
+- Fix memcpy args in res_send (#841787).
+
+* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.16-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Thu Jul 5 2012 Jeff Law <law@redhat.com> - 2.16-2
+- Use posix.link rather than posix.symlink in scriptlet to
+  update /etc/localtime (#837344).
+
+* Mon Jul 2 2012 Jeff Law <law@redhat.com> - 2.16-1
+- Resync with upstream glibc-2.16 release.
+
+* Fri Jun 22 2012 Jeff Law <law@redhat.com> - 2.15.90-16
+- Resync with upstream sources, drop obsolete patch.
+
+* Thu Jun 21 2012 Jeff Law <law@redhat.com> - 2.15.90-15
+- Resync with upstream sources (#834447).
+- Fix use-after-free in dcigettext.c (#816647).
+
+* Fri Jun 15 2012 Jeff Law <law@redhat.com> - 2.15.90-14
+- Resync with master.
+
+* Thu Jun 14 2012 Jeff Law <law@redhat.com> - 2.15.90-13
+- Delay setting DECIDED field in locale file structure until
+  we have read the file's data (#827510).
+
+* Mon Jun 11 2012 Dennis Gilmore <dennis@ausil.us> - 2.15.90-12
+- actually apply the arm linker hack
+
+* Mon Jun 11 2012 Dennis Gilmore <dennis@ausil.us> - 2.15.90-11
+- only deal with the arm linker compat hack on armhfp arches
+- armsfp arches do not have a linker change
+- Backward compat hack for armhf binaries.
+
+* Thu Jun  7 2012 Jeff Law <law@redhat.com> - 2.15.90-10
+- Fix parsing of /etc/sysconfig/clock when ZONE has spaces. (#828291)
+
+* Tue Jun  5 2012 Jeff Law <law@redhat.com> - 2.15.90-9
+- Resync with upstream sources, drop unnecessary patches.
+- Fix DoS in RPC implementation (#767693)
+- Remove deprecated alpha support.
+- Remove redundant hunk from patch. (#823905)
+
+* Fri Jun  1 2012 Patsy Franklin <patsy@redhat.com> - 2.15.90-8
+- Fix iconv() segfault when the invalid multibyte character 0xffff is input
+  when converting from IBM930 (#823905)
+
+* Fri Jun 1 2012 Jeff Law <law@redhat.com> - 2.15.90-7
+- Resync with upstream sources.  (#827040)
+
+* Thu May 31 2012 Patsy Franklin <patsy@redhat.com> - 2.15.90-6
+- Fix fnmatch() when '*' wildcard is applied on a file name containing
+  multibyte chars. (#819430)
+
+* Wed May 30 2012  Jeff Law <law@redhat.com> - 2.15.90-5
+- Resync with upstream sources, drop unnecessary patches.
+
+* Tue May 29 2012  Jeff Law <law@redhat.com> - 2.15.90-4
+- Build info files in the source dir, then move to objdir
+  to avoid multilib conflicts (#825061)
+
+* Fri May 25 2012  Jeff Law <law@redhat.com> - 2.15.90-3
+- Work around RPM dropping the contents of /etc/localtime
+  when it turns into a symlink with %post common script (#825159).
+
+* Wed May 23 2012  Jeff Law <law@redhat.com> - 2.15.90-2
+- Fix option rotate when one IPV6 server is enabled (#804630)
+- Reenable slow/uberslow path taps slowpow/slowexp.
+
+* Wed May 23 2012  Jeff Law <law@redhat.com> - 2.15.90-1
+- Resync with upstream sources, drop unnecessary patches.
+
+* Tue May 22 2012 Patsy Franklin <pfrankli@redhat.com> - 2.15-41
+- Fix tzdata trigger (#822200)
+- Make the symlink relative rather than linking into the buildroot (#822200).
+- Changed /etc/localtime to a symlink. 8222000 (#822200)
+
+* Tue May 15 2012 Jeff Law <law@redhat.com> - 2.15-40
+- Update to upstream patch for 806070 (#806070)
+
+* Mon May 14 2012 Jeff Law <law@redhat.com> - 2.15-39
+- Update upstream patch for AVX testing (#801650)
+
+* Fri May 11 2012 Jeff Law <law@redhat.com> - 2.15-38
+- Upstream patch to fix AVX testing (#801650)
+
+* Thu May 10 2012 Jeff Law <law@redhat.com> - 2.15-37
+- Try again to fix AVX testing (#801650)
+
+* Mon May 7 2012 Jeff Law <law@redhat.com> - 2.15-36
+- Improve fortification disabled warning.
+- Change location of dynamic linker for armhf.
+
+* Mon Apr 30 2012 Jeff Law <law@redhat.com> - 2.15-35
+- Implement context routines for ARM (#817276)
+
+* Fri Apr 13 2012 Jeff Law <law@redhat.com> - 2.15-34
+- Issue a warning if FORTIFY_CHECKING is requested, but disabled.
+
+* Thu Apr 12 2012 Jeff Law <law@redhat.com> - 2.15-33
+- Fix another unbound alloca in nscd groups (#788989)
+
+* Tue Apr 3 2012 Jeff Law <law@redhat.com> - 2.15-32
+- Fix first day of week for lv_LV (#682500)
+
+* Mon Apr 2 2012 Jeff Law <law@redhat.com> - 2.15-31
+- When retrying after main arena failure, always retry in a
+  different arena. (#789238)
+
+* Tue Mar 27 2012 Jeff Law <law@redhat.com> - 2.15-30
+- Avoid unbound alloca usage in *-crypt routines (#804792)
+- Fix data race in nscd (#806070)
+
+* Fri Mar 23 2012 Jeff Law <law@redhat.com> - 2.15-29
+- Fix typo in __nss_getent (#806403).
+
+* Wed Mar 14 2012 Jeff Law <law@redhat.com> - 2.15-28
+- Add doi_IN, sat_IN and mni_IN to SUPPORTED locals (#803286)
+- Add stap probes in slowpow and slowexp.
+
+* Fri Mar 09 2012 Jeff Law <law@redhat.com> - 2.15-27
+- Fix AVX checks (#801650)
+
+* Wed Feb 29 2012 Jeff Law <law@redhat.com> - 2.15-26
+- Set errno properly in vfprintf (#794797)
+- Don't kill application when LD_PROFILE is set. (#800224)
+
+* Wed Feb 29 2012 Jeff Law <law@redhat.com> - 2.15-25
+- Fix out of bounds memory access in resolver (#798471)
+- Always mark vDSO as used (#758888)
+
+* Fri Feb 24 2012 Jeff Law <law@redhat.com> - 2.15-24
+- Fix bogus underflow (#760935)
+- Correctly handle dns request where large numbers of A and AAA records
+  are returned (#795498)
+- Fix nscd crash when group has many members (#788989)
+
+* Mon Feb 20 2012 Jeff Law <law@redhat.com> - 2.15-23
+- Avoid "nargs" integer overflow which could be used to bypass FORTIFY_SOURCE (#794797)
+
+* Mon Feb 20 2012 Jeff Law <law@redhat.com> - 2.15-22
+- Fix main arena locking in malloc/calloc retry path (#789238)
+
+* Fri Feb 17 2012 Jeff Law <law@redhat.com> - 2.15-21
+- Correctly identify all 127.x.y.z addresses (#739743)
+- Don't assign native result if result has no associated interface (#739743)
+
+* Fri Feb 17 2012 Jeff Law <law@redhat.com> - 2.15-20
+- Ignore link-local IPV6 addresses for AI_ADDRCONFIG (#697149)
+
+* Fri Feb 17 2012 Jeff Law <law@redhat.com> - 2.15-19
+- Fix reply buffer mismanagement in resolver (#730856)
+
+* Thu Feb 16 2012 Jeff Law <law@redhat.com> - 2.15-18
+- Revert 552960/769421 changes again, still causing problems.
+- Add doi_IN (#791161)
+- Add sat_IN (#790292)
+- Add mni_IN (#790298)
+
+* Thu Feb 9 2012 Jeff Law <law@redhat.com> - 2.15-17
+- Fix lost wakeups in pthread_cond_*.  (#552960, #769421)
+- Clarify info page for snprintf (#564528)
+- Fix first_weekday and first_workday for ru_UA (#624296)
+
+* Tue Feb 7 2012 Jeff Law <law@redhat.com> - 2.15-16
+- Fix currency_symbol for uk_UA (#789209)
+- Fix weekday names in Kashmiri locale (#770439)
+
+* Tue Feb 7 2012 Jeff Law <law@redhat.com> - 2.15-15
+- Remove change for 787662, correct fix is in gcc.
+
+* Mon Feb 6 2012 Jeff Law <law@redhat.com> - 2.15-13
+- More accurately detect if we're in a chroot (#688948)
+
+* Fri Feb 3 2012 Jeff Law <law@redhat.com> - 2.15-12
+- Add fedfs to /etc/rpc (#691912)
+- Run nscd in the foreground w/ syslogging, fix systemd config (#770869)
+- Avoid mapping past end of shared object (#741105)
+- Turn off -mno-minimal-toc on PPC (#787201)
+- Remove hunk from glibc-rh657588.patch that didn't belong
+
+* Wed Feb 1 2012 Jeff Law <law@redhat.com> - 2.15-8
+- Prevent erroneous inline optimization of initfini.s on PowerPC64 (#783979)
+- Use upstream variant of fix for 740506.
+- Fix month abbreviations for zh_CN (#657588)
+
+* Sun Jan 29 2012 Jeff Law <law@redhat.com> - 2.15-7
+- Sort objects before relocations (sw#13618)
+- Fix bogus sort code that was copied from dl-deps.c.
+
+* Thu Jan 26 2012 Jeff Law <law@redhat.com> - 2.15-6
+- First argument to settimeofday can be null (#740682)
+- Add aliases for ISO-10646-UCS-2 (#697421)
+
+* Tue Jan 24 2012 Jeff Law <law@redhat.com> - 2.15-4
+- Update ports from master.
+- Fix first workday/weekday for it_IT (#622499)
+- Fix type to uint16_t based on upstream comments (729661)
+- Do not cache negative results in nscd if these are transient (#784402)
+
+* Mon Jan 23 2012 Jeff Law <law@redhat.com> - 2.15-3
+- Fix cycle detection (#729661)
+- Fix first workday/weekday for it_IT (#446078)
+- Fix first workday/weekday for ca_ES (#454629)
+
+* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.15-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Sun Jan 1 2012 Jeff Law <law@redhat.com> - 2.15-1.fc17
+- Update from master (a316c1f)
+
+* Thu Dec 22 2011 Jeff Law <law@redhat.com> - 2.14.90-26.fc17
+- Update from master (16c6f99)
+- Fix typo in recent tzfile change (#769476)
+- Make MALLOC_ARENA_MAX and MALLOC_ARENA_TEST match documentation (#740506)
+- Revert "fix" to pthread_cond_wait (#769421)
+- Extract patch for 730856 from fedora-patch into a distinct patchfile
+
+* Mon Dec 19 2011 Jeff Law <law@redhat.com> - 2.14.90-25.fc17
+- Update from master (a4647e7).
+
+* Sun Dec 18 2011 Jeff Law <law@redhat.com> - 2.14.90-24.fc16.3
+- Check values from TZ file header (#767696)
+- Handle EAGAIN from FUTEX_WAIT_REQUEUE_PI (#552960)
+- Add {dist}.#
+- Correct return value from pthread_create when stack alloction fails.
+  (#767746)
+
+* Wed Dec 7 2011 Jeff Law <law@redhat.com> - 2.14.90-23
+- Fix a wrong constant in powerpc hypot implementation (#750811)
+  #13534 in python bug database
+  #13472 in glibc bug database
+- Truncate time values in Linux futimes when falling back to utime
+
+* Mon Dec 5 2011 Jeff Law <law@redhat.com> - 2.14.90-22
+- Mark fortified __FD_ELT as extension (#761021)
+- Fix typo in manual (#708455)
+
+* Wed Nov 30 2011 Jeff Law <law@redhat.com> - 2.14.90-21
+- Don't fail in makedb if SELinux is disabled (#750858)
+- Fix access after end of search string in regex matcher (#757887)
+
+* Mon Nov 28 2011 Jeff Law <law@redhat.com> - 2.14.90-20
+- Drop lock before calling malloc_printerr (#757881)
+
+* Fri Nov 18 2011 Jeff Law <law@redhat.com> - 2.14.90-19
+- Check malloc arena atomically (BZ#13071)
+- Don't call reused_arena when _int_new_arena failed (#753601)
+
+* Wed Nov 16 2011 Jeff Law <law@redhat.com> - 2.14.90-18
+- Fix grouping and reuse other locales in various locales (BZ#13147)
+
+* Tue Nov 15 2011 Jeff Law <law@redhat.com> - 2.14.90-17
+- Revert bogus commits/rebasing of Nov 14, Nov 11 and Nov 8.  Sources
+  should be equivalent to Fedora 16's initial release.
+
+* Wed Oct 26 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.14.90-15
+- Rebuilt for glibc bug#747377
+
+* Wed Oct 19 2011 Jim Meyering <meyering@redhat.com> - 2.14.90-14
+- Revert the upstream patch that added the leaf attribute, since it
+  caused gcc -O2 to move code past thread primitives and sometimes
+  even out of critical sections.  See http://bugzilla.redhat.com/747377
+
+* Wed Oct 19 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-13
+- Update from master
+  - Fix linkage conflict with feraiseexcept (#746753)
+  - More libm optimisations
+
+* Mon Oct 17 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-12
+- Update from master
+  - Correctly handle missing initgroups database (#745675)
+  - Optimize many libm functions
+  - Optimize access to isXYZ and toXYZ tables
+  - Optimized memcmp and wmemcmp for x86-64 and x86-32
+  - Add parameter annotation to modf (BZ#13268)
+  - Support optimized isXXX functions in C++ code
+  - Check for zero size in memrchr for x86_64 (#745739)
+  - Optimized memchr, memrchr, rawmemchr for x86-32
+
+* Tue Oct 11 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-11
+- Update from master
+  - Clean up locarchive mmap reservation code
+  - Fix netname2host (BZ#13179)
+  - Fix remainder (NaN, 0) (BZ#6779, BZ#6783)
+  - S/390: Fix longlong.h inline asms for zarch
+  - Improve 64 bit memchr, memrchr, rawmemchr with SSE2
+  - Update translations
+  - Implement caching of netgroups in nscd
+  - Handle OOM in NSS
+  - Don't call ifunc functions in trace mode
+- Convert tzdata-update to lua (#729796)
+- Horrible workaround for horribly broken software (#737223)
+
+* Wed Sep 28 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-10
+- Update from master
+  - Correctly reparse group line after enlarging the buffer (#739360)
+  - Fix parse error in bits/mathinline.h with --std=c99 (#740235)
+- Update nscd service file (#740284)
+- Drop nscd init file (#740196)
+
+* Fri Sep 16 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-9
+- Update from master
+  - Define IP_MULTICAST_ALL (BZ#13192)
+  - Add fmax and fmin inlines for x86-64
+  - Avoid race between {,__de}allocate_stack and __reclaim_stacks
+    during fork (#737387)
+  - Optimized lrint and llrint for x86-64
+  - Also relocate in dependency order when doing symbol dependency
+    testing (#737459)
+  - Optimize logb code for 64-bit machines
+  - Fix jn precision (BZ#11589)
+  - Fix boundary conditions in scanf (BZ#13138)
+  - Don't lock string streams in stream cleanup code (BZ#12847)
+  - Define ELFOSABI_GNU
+  - Fix lround loss of precision
+  - Add range checking for FD_SET, FD_CLR, and FD_ISSET
+- Make sure AVC thread has capabilities
+
+* Thu Sep  8 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-8
+- Update from master
+  - Use O_CLOEXEC when loading objects and cache in ld.so (BZ#13068)
+  - Fix memory leak in case of failed dlopen (BZ#13123)
+  - Optimizations for POWER
+  - Prefer real syscalls instead of vsyscalls on x86-64 outside libc.so
+  - Add Atom-optimized strchr and strrchr for x86-64
+  - Try shell in posix_spawn* only in compat mode (BZ#13134)
+  - Fix glob.h header by removing gcc 1.x support (BZ#13150)
+  - Optimized strchr and strrchr with SSE2 on x86-32
+  - Add optimized x86 wcscmp
+  - Fixes and optimizations for 32-bit sparc fabs
+  - Fix nptl semaphore cleanup invocation
+  - Sanitize HWCAP_SPARC_* defines/usage, and add new entries
+
+* Thu Sep  1 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-7
+- Update from master
+  - Relocate objects in dependency order (#733462)
+- Avoid assertion failure when first DNS answer was empty (#730856)
+- Don't treat tls_offset == 1 as forced dynamic (#731228)
+
+* Wed Aug 24 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-6
+- Update from master
+  - Correct cycle detection during dependency sorting
+  - Use ifuncs for time and gettimeofday on x86-64
+  - Fix fopen (non-existing-file, "re") errno
+  - Fix CFI info in x86-64 trampolines for non-AVX code
+  - Build libresolv with SSP flags
+  - Avoid executable stack in makedb (#731063)
+  - Align x86 TCB to 64 bytes (cache line size), important for Atom
+
+* Mon Aug 15 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-5
+- Update from master
+  - Implement LD_DEBUG=scopes
+  - Locale-independent parsing in libintl (#726536)
+  - Fix stack alignment on x86_64 (#728762)
+  - Implement scandirat function
+
+* Tue Aug  9 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-4
+- Update from master
+  - Properly tokenize nameserver line for servers with IPv6 address
+  - Fix encoding name for IDN in getaddrinfo (#725755)
+  - Fix inline strncat/strncmp on x86
+  - Define SEEK_DATA and SEEK_HOLE
+  - Define AF_NFC and PF_NFC
+  - Update ptrace constants
+  - Add read barriers in cancellation initialization
+  - Add read barrier protecting DES initialization
+  - Fix overflow bug in optimized strncat for x86-64
+  - Check for overflows in expressions (BZ#12852)
+  - Fix check for AVX enablement (#720176, BZ#13007)
+  - Force La_x86_64_ymm to be 16-byte aligned
+  - Add const attr to gnu_dev_{major,minor,makedev}
+- Filter out GLIBC_PRIVATE symbols again
+
+* Wed Jul 20 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-3
+- Update from master
+  - S/390: Don't use r11 in INTERNAL_VSYSCALL_NCS macro
+  - Avoid warning in nscd config file parsing code
+  - Improve 64 bit strcat functions with SSE2/SSSE3
+  - Fix alloca accounting in strxfrm
+  - Avoid possible crashes in anormal nscd exits
+  - Updated Swedish and Dutch translations
+
+* Thu Jul 14 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-2
+- Update from master
+  - Generalize framework to register monitoring of files in nscd
+  - Handle ext4 in {,f}pathconf
+  - Handle Lustre filesystem (BZ#12868)
+  - Handle W; without long options in getopt (BZ#12922)
+  - Change error code for underflows in strtod (BZ#9696)
+  - Fix handling of chained netgroups
+  - Optimize long-word additions in SHA implementation
+  - Handle nscd negtimeout==0
+  - nss_compat: query NIS domain only when needed
+  - Fix robust mutex handling after fork
+  - Make sure RES_USE_INET6 is always restored
+- Add systemd configuration for nscd
+- Be more careful running build-locale-archive
+
+* Thu Jun 30 2011 Andreas Schwab <schwab@redhat.com> - 2.14.90-1
+- Update from master
+  - Fix quoting in some installed shell scripts (BZ#12935)
+  - Fix missing .ctors/.dtors lead word in soinit
+  - Improved st{r,p}{,n}cpy for SSE2 and SSSE3 on x86
+  - Avoid __check_pf calls in getaddrinfo unless really needed
+    (BZ#12907)
+  - Rate limit expensive _SC_NPROCESSORS_ONLN computation
+  - Add initgroups lookup support to getent
+  - Reenable nss_db with a completely new implementation
+  - Rewrite makedb to avoid using db library
+  - Add pldd program
+- Obsolete nss_db
+- Don't build tzdata-update and build-locale-archive statically
+
+* Tue Jun 28 2011 Andreas Schwab <schwab@redhat.com> - 2.14-4
+- Update from 2.14 branch
+  - Fix crash in GB18030 encoder (#712901)
+- Fix more bugs in GB18030 charmap
+- Don't use gethostbyaddr to determine canonical name
+
+* Tue Jun 21 2011 Andreas Schwab <schwab@redhat.com> - 2.14-3
+- Update from 2.14 branch
+  - Fix typo in recent resolver change which causes segvs (#710279)
+  - Fix memory leak in getaddrinfo (#712178)
+  - Fix <bits/mqueue2.h> for C++ (BZ#12841)
+  - Assume Intel Core i3/i5/i7 processor if AVX is available
+- Filter results from gethostbyname4_r according to request flags
+  (#711827)
+- Repair GB18030 charmap (#712901)
+- Revert "Use .machine to prevent AS from complaining about z9-109
+  instructions in iconv modules" (#711330)
+
+* Fri Jun  3 2011 Andreas Schwab <schwab@redhat.com> - 2.14-2
+- Revert "Handle DNS server failures in case of AF_UNSPEC lookups
+  correctly" (#710279)
+
+* Tue May 31 2011 Andreas Schwab <schwab@redhat.com> - 2.14-1
+- Update to 2.14 release
+  - Handle DNS server failures in case of AF_UNSPEC lookups correctly
+    (BZ#12684)
+  - Prevent loader from loading itself
+  - Restore _res correctly (BZ#12350)
+  - Interpret numeric values in shadow file as signed (BZ#11099)
+  - Recognize use-vc option in resolv.conf (BZ#11558)
+  - Mark malloc hook variables as deprecated
+  - Declare malloc hook variables as volatile (BZ#11781)
+  - Don't document si_code used for raise (BZ#11799)
+  - Fix unnecessary overallocation due to incomplete character (BZ#12811)
+  - Handle failure of _nl_explode_name in all cases
+  - Add support for time syscall in vDSO (BZ#12813)
+  - Add sendmmsg and setns syscalls
+  - Use getcpu definition from vDSO on x86-64 (BZ#12813)
+- Don't free non-malloced memory and fix memory leak (#709267)
+
+* Fri May 27 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-14
+- Update from master
+  - Fix conversion to ISO-2022-JP-2 with ISO-8859-7 designation
+    (BZ#12814)
+  - Undo accidental change in x86-64 user.h
+  - Update Japanese translation
+  - Define RLIMIT_RTTIME (BZ#12795)
+  - Update longlong.h from GCC
+  - Add a few more alloca size checks (BZ#12671)
+  - Fix flags parameter value passed to pltenter and pltexit
+  - Define CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM
+  - Always fill output buffer in XPG strerror function (BZ#12782)
+  - Nicer output for negative error numbers in strerror_r
+  - Fix CP1258 conversion (BZ#12777)
+  - Fix handling of LC_CTYPE in locale name handling (BZ#12788)
+  - Set stream errors in more cases (BZ#12792)
+  - Don't unconditionally use alloca in gaih_inet (BZ#11869)
+  - Update documentation in regex.h (BZ#11857)
+  - Prevent Altivec and VSX insns on PowerPC64 when no FPRs or VRs are
+    available
+  - Fix typo in x86-64 powl (BZ#12775)
+- Avoid overriding CFLAGS (#703880)
+
+* Wed May 18 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-13
+- Update from master
+  - Update GB18030 to 2005 version (BZ#11837)
+  - Update RE_SYNTAX*_AWK constants in regex.h
+  - Handle long variable names in putenv (BZ#11892)
+  - Fix test for error_one_per_line mode in error (BZ#12766)
+  - Cleanup x86-64 sys/user.h (BZ#11820)
+  - Several locale data updates (BZ#11987, BZ#9732, BZ#9730, BZ#4357,
+    BZ#12582)
+  - Avoid potential deadlock in mtrace (BZ#6420)
+  - Fix a few problems in fopen and freopen
+  - Provide more helpful error message in getopt (BZ#7101)
+  - Make stack canary value harder to read through read overflow (BZ#10149)
+  - Use mmap for allocation of buffers used for __abort_msg (BZ#11901)
+  - Fix handling of static TLS in dlopen'ed objects (BZ#12453)
+  - Fix initialization of optimization values for AIO (BZ#12083)
+  - Fix handling of conversion problem in CP932 module (BZ#12601)
+  - Fix potential problem with out-of-scope buffer (BZ#12626)
+  - Handle recursive calls in backtrace better (BZ#12432)
+  - Fix handling of incomplete character storage in state
+  - Fix file descriptor position after fclose (BZ#12724)
+- Reinstall NIS RPC headers
+
+* Fri May 13 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-12
+- Update from master
+  - Fix resizing table for unique symbols when adding symbol for copy
+    relocation (BZ#12511)
+  - Fix sched_setscheduler call in spawn implementation (BZ#12052)
+  - Report write error in addmnt even for cached streams (BZ#12625)
+  - Translate kernel error into what pthread_create should return
+    (BZ#386)
+  - More configurability for secondary group lookup (BZ#11257)
+  - Several locale data updates (BZ#11258, BZ#11487, BZ#11532,
+    BZ#11578, BZ#11653, BZ#11668, BZ#11945, BZ#11947, BZ#12158,
+    BZ#12200, BZ#12178, BZ#12178, BZ#12346, BZ#12449, BZ#12545,
+    BZ#12551, BZ#12611, BZ#12660, BZ#12681, BZ#12541, BZ#12711,
+    BZ#12738)
+  - Fix Linux getcwd for long paths (BZ#12713)
+  - static tls memory leak on TLS_DTV_AT_TP archs
+  - Actually undefine ARG_MAX from <linux/limits.h>
+  - Backport BIND code to query name as TLD (BZ#12734)
+  - Allow $ORIGIN to reference trusted directoreis in SUID binaries
+    (BZ #12393)
+  - Add missing {__BEGIN,__END}_DECLS to sys/sysmacros.h
+  - Report if no record is found by initgroups in nss_files
+- Never leave $ORIGIN unexpanded
+- Revert "Ignore origin of privileged program"
+- Reexport RPC interface
+
+* Thu May  5 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-11
+- Update from master
+  - Don't use removed rpc headers
+- Install rpc/netdb.h again
+
+* Wed May  4 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-10
+- Update from master
+  - ldconfig: don't crash on empty path in config file (#699784)
+  - getaddrinfo(AF_INET6) does not return scope_id info provided by
+    NSS modules (BZ#12714)
+  - Fix pathconf(_PC_BUF_SIZE) (BZ#12723)
+  - Fix getnameinfo flags parameter type (BZ#12717)
+  - Add finer grained control for initgroups lookups to NSS
+  - Use all possible bytes from fopen mode string (BZ#12685, #698025)
+  - Define initgroups callback for nss_files
+  - elf.h: Define R_ARM_IRELATIVE reloc type
+  - Fix static linking with checking x86/x86-64 memcpy (BZ#12653)
+  - Fix POWER4/POWER7 optimized strncmp to not read past differing bytes
+  - Fix FPU context handling in getcontext on x86-64 (BZ#12420)
+  - Skip extra zeroes when searching auxv on s390
+  - Obsolete RPC implementation in libc
+  - Fix memory leak in TLS of loaded objects (BZ#12650)
+  - Don't leave empty element in rpath when skipping an element
+  - Make ppc sync_file_range cancelable
+  - Maintain stack alignment in ____longjmp_chk on x86_64
+
+* Thu Apr  7 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-9
+- Update from master
+  - Fix typo in cache information table for x86-{32,64}
+  - Define CLOCK_BOOTTIME, O_PATH, AT_EMPTY_PATH
+  - Work around old buggy program which cannot cope with memcpy
+    semantics (BZ#12518)
+  - Fix visibility of declarations of wcpcpy and wcpncpy (BZ#12631)
+  - Add clock_adjtime, name_to_handle_at, open_by_handle_at, syncfs
+    syscalls
+  - Really implement fallocate{,64} and sync_file_range as
+    cancellation points
+- Enable systemtap support (#690281)
+
+* Thu Mar 24 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-8
+- Update from master
+  - Fix infinite loop (#690323)
+
+* Mon Mar 21 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-7
+- Update from master
+  - Handle page boundaries in x86 SSE4.2 strncmp (BZ#12597)
+  - Implement x86 cpuid handling of leaf4 for cache information (BZ#12587)
+  - Check size of pattern in wide character representation in fnmatch
+    (BZ #12583)
+  - Remove __restrict quals from wmemcmp prototype
+  - Fix copy relocations handling of unique objects (BZ#12510)
+- ldd: never run file directly
+- Ignore rpath elements containing non-isolated use of $ORIGIN when
+  privileged
+- Don't leave empty element in rpath when skipping the first element
+- Revert "Don't crash when dependencies are missing" (#688990)
+
+* Mon Mar  7 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-6
+- Update from master
+  - Fix loading first object along a path when tracing
+  - Enable SSE2 memset for AMD'supcoming Orochi processor
+  - Don't read past end of buffer in fmemopen
+- Revert broken changes (#682307)
+
+* Wed Mar  2 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-5
+- Update from master
+  - Fix memory leak in dlopen with RTLD_NOLOAD (BZ#12509)
+  - Don't crash when dependencies are missing (BZ#12454)
+  - Fix allocation when handling positional parameters in printf
+    (BZ#12445)
+  - Fix two printf handler issues
+- Fix false assertion (BZ#12454, #673014)
+
+* Mon Feb 14 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-4
+- Update from master
+  - Update sysdeps/unix/sysv/linux/sparc/bits/socket.h
+  - Synchronize generic bits/sched.h cpu_set_t with Linux implementation
+  - Schedule nscd cache pruning more accurately from re-added values
+  - Fix passing symbol value to pltexit callbacks when ld.so auditing
+  - Fix range error handling in sgetspent
+- Revert "Fix ordering of DSO constructors and destructors" (#673014)
+- Create debuginfo-common on biarch archs
+- Reinstall assembler workaround.
+- Replace setuid by file capabilities (#646469)
+
+* Tue Jan 25 2011 Andreas Schwab <schwab@redhat.com> - 2.13.90-1
+- Update from master
+  - Fix ordering of DSO constructors and destructors (BZ#11724)
+- Remove no longer needed assembler workaround
+
+* Tue Jan 18 2011 Andreas Schwab <schwab@redhat.com> - 2.13-1
+- Update to 2.13 release
+  - Define AT_NO_AUTOMOUNT
+  - Define MADV_HUGEPAGE and MADV_NOHUGEPAGE
+  - Add definitions for new socket protocols
+  - Signal temporary host lookup errors in nscd as such to the
+    requester (BZ#6812)
+  - Change setgroups to affect all the threads in the process
+    (BZ#10563)
+  - FIx handling of unterminated [ expression in fnmatch (BZ#12378)
+  - Relax requirement on close in child created by posix_spawn
+  - Fix handling of missing syscall in Linux mkdirat (BZ#12397)
+  - Handle long lines in host lookups in the right place (BZ#10484)
+  - Fix assertion when handling DSTs during auditing
+  - Fix alignment in x86 destructor calls
+  - Fix grouping when rounding increases number of integer digits
+    (BZ#12394)
+  - Update Japanese translations
+  - Fix infloop on persistent failing calloc in regex (BZ#12348)
+  - Use prlimit64 for 32-bit [gs]etrlimit64 implementation (BZ#12201)
+  - Change XPG-compliant strerror_r function to return error code
+    (BZ#12204)
+  - Always allow overwriting printf modifiers etc.
+  - Make PowerPC64 default to nonexecutable stack
+
+* Tue Dec 14 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-21
+- Revert bogus change
+
+* Mon Dec 13 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-20
+- Update from master
+  - Declare wcpcpy and wcpncpy only under _GNU_SOURCE
+  - Fix use of restrict in wchar.h and string.h
+  - Fix race in qsort_r initialization (BZ#11655)
+  - Don't ignore zero TTL in DNS answers
+  - Allow aux_cache_file open()ing to fail silently even in the chroot
+    mode (BZ#11149)
+  - Fix multiple nss_compat initgroups() bugs (BZ#10085)
+  - Define MAP_HUGETLB and SWAP_FLAG_DISCARD
+- Remove .UTF-8 suffix from locale names when it is the only supported
+  codeset (#657556)
+- Don't ignore $ORIGIN in libraries
+
+* Fri Nov 12 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-19
+- Update from master
+  - Fix memory leak in fnmatch
+  - Support Intel processor model 6 and model 0x2c
+  - Fix comparison in sqrtl for IBM long double
+  - Fix one exit path in x86-64 SSE4.2 str{,n}casecmp (BZ#12205, #651638)
+  - Fix warnings in __bswap_16 (BZ#12194)
+  - Use IFUNC on x86-64 memset
+  - Power7-optimized mempcpy
+  - Handle uneven cache size in 32bit SSE2 memset (BZ#12191)
+  - Verify in ttyname that the symlink is valid (BZ#12167)
+  - Update Danish translations
+  - Fix concurrency problem between dl_open and dl_iterate_phdr
+  - Fix x86-64 strchr propagation of search byte into all bytes of SSE
+    register (BZ#12159)
+  - Fix perturbing in malloc on free (BZ#12140)
+  - PPC/A2 optimized memcpy function
+  - Add C99 FP_FAST_FMA{,F,L} macros to <math.h>
+- Check that the running kernel is new enough (#649589)
+
+* Fri Oct 22 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-18
+- Require suid bit on audit objects in privileged programs (CVE-2010-3856)
+
+* Tue Oct 19 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-17
+- Update from master
+  - Fix some fma issues, implement fmal (BZ#3268, #43358)
+  - Expect PLT call to _Unwind_Find_FDE on s390*-linux
+- Never expand $ORIGIN in privileged programs (#643306, CVE-2010-3847)
+
+* Thu Oct 14 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-16
+- Update from master
+  - Implement accurate fma (BZ#3268, #43358)
+  - Fix alignment of AVX save area on x86-64 (BZ#12113)
+  - Fix regex memory leaks (BZ#12078)
+  - Improve output of psiginfo (BZ#12107, BZ#12108)
+  - Don't return NULL address in getifaddrs (BZ#12093)
+  - Fix strstr and memmem algorithm (BZ#12092, #641124)
+- Don't discard result of decoding ACE if AI_CANONIDN (#636642)
+- Remove /etc/gai.conf from glibc-common and mark it %%ghost in glibc
+- Require exact glibc version in nscd
+
+* Mon Oct  4 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-15
+- Update from master
+  - Handle large requests in debugging hooks for malloc (BZ#12005)
+  - Fix handling of remaining bytes in buffer for strncmp and
+    strncasecmp (BZ#12077)
+  - Handle cgroup and btrfs filesystems in statvfs
+  - S/390: Fix highgprs check in startup code (BZ#12067)
+  - Properly convert f_fsid in statvfs (BZ#11611)
+
+* Tue Sep 28 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-14
+- Don't try to write to _rtld_global_ro after performing relro
+  protection (#638091)
+
+* Mon Sep 27 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-13
+- Update from master
+  - Add two forgotten licence exceptions
+  - getdents64 fallback d_type support
+  - Move freeres function from ld.so to libc.so
+  - Undo feature selection for ftruncate (BZ#12037)
+  - Fix namespace pollution in pthread_cleanup_push
+  - Fix limit detection in x86-64 SSE2 strncasecmp (#632560)
+  - Add support for fanotify_mark on sparc32 and s390
+  - Fix register conflict in s390 ____longjmp_chk (#629970)
+  - Don't try to free rpath strings allocated during startup (#629976)
+  - Actually make it possible to user the default name server
+- Fix memory leak on init/fini dependency list (#632936)
+- Fix handling of collating symbols in regexps (BZ#11561)
+- Don't parse %%s format argument as multibyte string (BZ#6530)
+- Fix overflow in nss files parser
+- Fix spurious nop at start of __strspn_ia32
+
+* Wed Sep 15 2010 Dennis Gilmore <dennis@ausil.us> - 2.12.90-12
+- dont build sparcv9v and sparc64v anymore
+
+* Mon Sep 13 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-11
+- Update from master
+  - Fix _FORITY_SOURCE version of longjmp for Linux/x86-64 (BZ#11968)
+- Work around shortest-stem feature in make 3.82+
+
+* Mon Sep  6 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-10
+- Update from master
+  - Remove invalid iconv aliases (BZ#11979)
+  - Update x86-64 mpn routines from GMP 5.0.1
+  - Fix array overflow in floating point parser (BZ#7066)
+  - Support fanotify_mark syscall on powerpc32
+  - Unroll x86-64 strlen
+  - Unroll 32bit SSE strlen and handle slow bsf
+  - Missing server address again leads to localhost being used (BZ#10851)
+- Revert last change
+- Remove or don't install unpackaged files for auxarches
+
+* Sat Sep 04 2010 Dennis Gilmore <dennis@ausil.us> - 2.12.90-9
+- disable unpackaged file check on auxarches
+
+* Mon Aug 23 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-8
+- Update from master
+  - Fix static strspn on x86 (#624852)
+  - Various POWER7 optimized string functions
+  - Fix x86 pthread_cond_signal() FUTEX_WAKE_OP fallback
+  - Add optimized strncasecmp versions for x86-64
+  - PowerPC64 ABI fixes
+  - Properly quote output of locale (BZ#11904)
+  - f_flags in statfs implementation
+  - Add support for fanotify_init and fanotify_mask syscalls
+  - Add support for prlimit and prlimit64
+  - Fix IPTOS_CLASS definition (BZ#11903)
+  - Avoid too much stack use in fnmatch (BZ#11883)
+  - x86: Add support for frame pointer less mcount
+- Disable asynchronous-unwind-tables during configure run
+
+* Mon Aug  2 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-7
+- Update from master
+  - Add optimized x86-64 implementation of strnlen and strcaecmp
+  - Document M_PERTURB
+  - Fix vDSO synthetic hwcap handling so they are not masked out from
+    ld.so.cache matching
+  - POWER6/7 optimizations for copysign
+- Build with ports addon on alpha and armv5tel
+- Add conflict with kernel < 2.6.32 (#619538)
+- Switch to xz compressed tar files
+- build-locale-archive: process only directories matching *_*
+
+* Wed Jul 21 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-6
+- Bump minimum kernel version to 2.6.32
+
+* Mon Jul 12 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-5
+- Update from master
+  - Don't pass NULL occation to dl_signal_cerror
+  - Implement _PC_PIPE_BUF.
+- Add glibc-ports tarball
+
+* Fri Jul  2 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-4
+- Update from master
+  - Work around kernel rejecting valid absolute timestamps
+  - Improve 64bit memcpy/memmove for Atom, Core 2 and Core i7
+  - Fix error handling in Linux getlogin*
+- Workaround assembler bug sneaking in nopl (#579838)
+- Fix scope handling during dl_close
+- Fix setxid race handling exiting threads
+
+* Tue Jun 15 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-3
+- Update from master
+  - Power7 string compare optimizations
+  - Properly resize buffer in NIS initgroups
+  - Define F_SETPIPE_SZ and F_GETPIPE_SZ
+  - Fix more C++ incompatibility problems in headers
+- Properly set __libc_multiple_libcs
+- Don't assume AT_PAGESIZE is always available (#597578)
+- Don't call uname or getrlimit in libpthread init function (#579086)
+- Mark /etc/rpc as %%config (#587050)
+
+* Mon May 31 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-2
+- Update from master
+  - Small fix to POWER7 32-bit memcpy
+  - Correct x86 CPU family and model check (BZ#11640, #596554)
+  - Fix iov size in SH register_dump
+  - Don't crash on unresolved weak symbol reference
+  - Implement recvmmsg also as socketcall
+  - sunrpc: Fix spurious fall-through
+  - Make <sys/timex.h> compatible with C++ (#593762)
+- Fix users and groups creation in nscd %%post script
+
+* Wed May 19 2010 Andreas Schwab <schwab@redhat.com> - 2.12.90-1
+- Update from master
+  - POWER7 optimized memset
+  - Fix typo in es_CR locale
+  - Enable IDN support in getent
+  - Fix race in free sanity check
+  - Fix lookup of collation sequence value during regexp matching
+  - Fix name of tt_RU.UTF-8@iqtelif locale (#589138)
+  - Handle too-small buffers in Linux getlogin_r (BZ#11571, #589946)
+
+* Tue May  4 2010 Roland McGrath <roland@redhat.com> - 2.12-1
+- Update to 2.12 release.
+  - Fix ldconfig chroot handling.
+  - Don't deadlock in __dl_iterate_phdr while (un)loading objects.
+  - Fix handling of newline in addmntent.
+  - Fix AIO when thread creation failed.
+
+* Fri Apr 16 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-20
+- Update from master
+  - Fix bugs in x86-32 strcmp-sse4.S and strcmp-ssse3.S
+  - Add x86-32 FMA support
+  - Don't crash in trace mode when dependencies are missing
+  - x86-64 SSE4 optimized memcmp
+  - Fix makecontext on s390/s390x
+
+* Tue Apr 13 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-19
+- Avoid multiarch memcmp in tzdata-update (#581677)
+
+* Mon Apr 12 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-18
+- Update from master
+  - Implement interfaces to set and get names of threads (BZ#11390)
+  - Locale data updates (BZ#10824, BZ#10936, BZ#11470, BZ#11471)
+  - Print reload count in nscd statistics (BZ#10915)
+  - Fix reading loginuid file in getlogin{,_r}
+  - Fix fallocate error return on i386
+  - Fix cproj implmentation (BZ#10401)
+  - Fix getopt handing (BZ#11039, BZ#11040, BZ#11041)
+  - Implement new mode for NIS passwd.adjunct.byname table (BZ#11134)
+  - Obey LD_HWCAP_MASK in ld.so.cache lookups
+
+* Tue Apr  6 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-17
+- Update from master
+  - Locale data updates (BZ#11007, BZ#11258, BZ#11272, BZ#10554)
+  - Handle DNS timeouts in old-style lookup code (BZ#11010)
+  - Fix aux cache handling in ldconfig with chroot (BZ#11149)
+  - Fix printing error messages in getopt (BZ#11043)
+  - Declare iruserok and iruserok_af (BZ#11070)
+  - Fix option aliasing in argp (BZ#11254)
+  - Handle POSIX-compliant errno value of unlink in remove (BZ#11276)
+  - Fix definition and testing of S_ISSOCK (BZ#11279)
+  - Fix retrieving of kernel header version (BZ#11287)
+  - Fix concurrent handling of __cpu_features (BZ#11292)
+  - Handle unnecessary padding in getdents64 (BZ#11333)
+  - Fix changes to interface list during getifaddrs calls (BZ#11387)
+  - Missing memory barrier in DES initialization (BZ#11449)
+  - Fix spurious UNAVAIL status is getaddrinfo
+  - Add support for new clocks (BZ#11389)
+  - Fix Linux getlogin{_r,} implementation
+  - Fix missing zero-termination in cuserid (BZ#11397)
+  - Fix glob with empty pattern
+  - Fix handling of STB_GNU_UNIQUE in LD_TRACE_PRELINKING
+  - Unify wint_t handling in wchar.h and wctype.h (BZ#11410)
+  - Implement handling of libc ABI in ELF header
+  - Don't underestimate length of DST substitution in rpath
+  - Power7-optimized 64-bit and 32-bit memcpy
+- Assign global scope to RFC 1918 addresses (#577626)
+
+* Thu Mar 18 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-16
+- Fix SSSE3 memcmp (#574210)
+
+* Tue Mar  9 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-15
+- Update from master
+  - sparc64: Fix handling of R_SPARC_TLS_LE_* relocations (#571551)
+  - Handle ext4 and logfs in statvfs functions
+  - Fix setxid race with thread creation
+  - Pass -mtune=i686 to assembler when compiling for i686
+  - Fix R_X86_64_PC32 overflow detection
+  - Fix msgrcv on sparc64
+  - Fix unwind info in x86 strcmp-sse4.S (BZ#11332)
+  - sparc: Add multiarch support for memset/bzero/memcpy
+- Remove directories owned by filesystem (#569414)
+- Add %%ghost /etc/gai.conf to glibc-common (#567748)
+
+* Tue Feb 23 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-14
+- Update from master
+  - Sparc updates
+- Fix SSSE3 memcpy (#556584)
+
+* Mon Feb 22 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-13
+- Update from master
+  - Use CPUID_OFFSET instead of FEATURE_OFFSET
+  - Add 32bit memcmp/strcmp/strncmp optimized for SSSE3/SSS4.2
+  - Fix file descriotor leak in nftw with FTW_CHDIR (BZ#11271)
+  - Add Sparc STT_GNU_IFUNC support
+  - Add power7-optimized classification functions
+- Reapply "Optimize 32bit memset/memcpy with SSE2/SSSE3."
+- Use unsigned comparison in sse memcpy/memset
+
+* Mon Feb  8 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-12
+- Update from master
+  - Update constants in <sys/mount.h> for current kernels (#11235)
+  - Fix endless loop with invalid /etc/shells file (#11242)
+  - Fix sorting of malayalam letter 'na' (#10414)
+  - Add kok_IN locale
+  - Use common collation data in as_IN locale
+  - Avoid alloca in setenv for long strings
+- Use shared mapping to reserve memory when creating locale archive (#10855)
+- Fix fstat on Linux/sparc64 (#11155)
+
+* Mon Feb  1 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-11
+- Update from master
+  - Fix error checking in iconv (#558053)
+  - Don't map U00DF to U1E9E in toupper table
+  - _nl_load_locale() incorrectly handles mmap() failures (BZ#11200)
+  - Fix various issues in regex matcher (BZ#11183, BZ#11184, BZ#11185,
+    BZ#11186, BZ#11187, BZ#11188, BZ#11189, BZ#11190, BZ#11191,
+    BZ#11192, BZ#11193)
+
+* Tue Jan 19 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-10
+- Update from master
+  - Fix ____longjmp_chk for s390/s390x
+  - Remove duplicate definitions of O_DSYNC and O_RSYNC for Linux/sparc
+  - Ignore negative dynamic entry types (#546890)
+  - Fix pthread_cond_*wait with requeue-PI on i386 (#548989)
+  - Fix _XOPEN_SOURCE_EXTENDED handling
+- Revert "Optimize 32bit memset/memcpy with SSE2/SSSE3."
+
+* Fri Jan 15 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-9
+- Update from master.
+  - Define IPTOS_CLASS_* macros according to RFC 2474 (BZ#11027)
+  - Always use IPv4 sockets for IPv4 addresses (BZ#11141)
+  - regcomp.c: do not ignore memory allocation failure (BZ#11127)
+  - Fix malloc_info without prior allocations (BZ#11126)
+  - Optimize 32bit memset/memcpy with SSE2/SSSE3
+  - Relax feature tests in headers
+
+* Tue Jan 12 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-8
+- Update from master.
+  - More POSIX conformance fixes.
+
+* Mon Jan 11 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-7
+- Fix build failure.
+
+* Mon Jan 11 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-6
+- Update from master.
+  - POSIX conformance fixes (BZ#11125).
+
+* Mon Jan  4 2010 Andreas Schwab <schwab@redhat.com> - 2.11.90-5
+- Update from master.
+  - Additional setcontext(), etc. conformance tests (BZ#11115).
+  - Handle AT_FDCWD in futimens (BZ#10992).
+  - Update poll.h header for POSIX 2008 (BZ#11093).
+  - Avoid ELF lookup race.
+
+* Mon Dec 14 2009 Andreas Schwab <schwab@redhat.com> - 2.11.90-4
+- Update from master.
+  - Add Requeue-PI support for x86 arch.
+  - Redefine O_SYNC and O_DSYNC to match 2.6.33+ kernels.
+  - Fix a few error cases in *name4_r lookup handling (BZ#11000).
+  - Fix kernel version check in recent ptsname change (BZ#11046).
+  - Add more warnings to exec functions (BZ#11056).
+  - Add recvmmsg interface.
+  - Define SCHED_IDLE and SCHED_RESET_ON_FORK for Linux.
+
+* Mon Nov 30 2009 Andreas Schwab <schwab@redhat.com> - 2.11.90-3
+- Update from master.
+  - Fix infloop in __pthread_disable_asynccancel on x86_64 (#537690).
+  - Prevent unintended file desriptor leak in grantpt (#530558).
+  - Fix startup to security-relevant statically linked binaries (#528631).
+- Re-install CFI in x86/x86_64 clone (#491542).
+
+* Tue Nov 24 2009 Andreas Schwab <schwab@redhat.com> - 2.11.90-2
+- Update from master.
+  - Define week, first_weekday, and first_workday for en_DK locale (#525126).
+  - Use struct timespec for timestamps in struct stat also if
+    __USE_XOPEN2K8 (#539870).
+  - Fix week information for nl_NL locale (#499748).
+  - Update ntp_gettime for Linux (#479558).
+  - Fix getwc* and putwc* on non-wide streams (BZ#10958).
+  - Avoid warnings in CPU_* macros when using const bitsets (BZ#10918).
+  - Handle LC_GLOBAL_LOCALE in duplocale (BZ#10969).
+  - Fix _NC_LOCALE_NAME definition (BZ#10968).
+  - Add missing Linux MADV_* definitions (BZ#10972).
+  - Add support for new Linux error ERFKILL (BZ#10939).
+- Enable multi-arch support on ppc and ppc64.
+
+* Thu Nov 12 2009 Andreas Schwab <schwab@redhat.com> - 2.11.90-1
+- Update from master.
+
+* Thu Nov  5 2009 Andreas Schwab <schwab@redhat.com> - 2.11-2
+- Fix readahead on powerpc32.
+- Fix R_PPC64_{JMP_IREL,IRELATIVE} handling.
+- Fix preadv, pwritev and fallocate for -D_FILE_OFFSET_BITS=64 (#533063).
+
+* Mon Nov  2 2009 Andreas Schwab <schwab@redhat.com> - 2.11-1
+- Update to 2.11 release.
+- Disable multi-arch support on PowerPC again since binutils is too old.
+- Fix crash in tzdata-update due to use of multi-arch symbol (#532128).
+
+* Fri Oct 30 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-27
+- Update from master.
+  - Fix races in setXid implementation (BZ#3270).
+  - Implement IFUNC for PPC and enable multi-arch support.
+  - Implement mkstemps/mkstemps64 and mkostemps/mkostemps64 (BZ#10349).
+  - Fix IA-64 and S390 sigevent definitions (BZ#10446).
+  - Fix memory leak in NIS grp database handling (BZ#10713).
+  - Print timestamp in nscd debug messages (BZ#10742).
+  - Fix mixing IPv4 and IPv6 name server in resolv.conf.
+  - Fix range checks in coshl.
+  - Implement SSE4.2 optimized strchr and strrchr.
+  - Handle IFUNC symbols in dlsym (#529965).
+  - Misc fixes (BZ#10312, BZ#10315, BZ#10319, BZ#10391, BZ#10425,
+    BZ#10540, BZ#10553, BZ#10564, BZ#10609, BZ#10692, BZ#10780,
+    BZ#10717, BZ#10784, BZ#10789, BZ#10847
+- No longer build with -fno-var-tracking-assignments.
+
+* Mon Oct 19 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-26
+- Update from master.
+  - Add ____longjmp_chk for sparc.
+- Avoid installing the same libraries twice.
+
+* Mon Oct 12 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-25
+- Update from master
+  - Fix descriptor leak when calling dlopen with RTLD_NOLOAD (#527409).
+  - Fix week-1stday in C locale.
+  - Check for integer overflows in formatting functions.
+  - Fix locale program error handling (#525363).
+
+* Mon Sep 28 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-24
+- Update from master.
+  - Fix missing reloc dependency (#517001).
+
+* Mon Sep 21 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-23
+- Update from master.
+
+* Mon Sep 14 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-22
+- Update from master.
+  - Fix endless loop in localedef.
+  - Fix __longjmp_chk on s390/s390x.
+- Fix exit codes in nscd start script (#521848).
+- Build with -fno-var-tracking-assignments for now (#523172).
+
+* Mon Sep  7 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-21
+- Update from master.
+  - Fix strstr/strcasestr on i386 (#519226).
+
+* Thu Sep  3 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-20
+- Update from master.
+  - Fix strstr/strcasestr/fma/fmaf on x86_64 (#519226).
+  - Fix lookup of group names in hesiod initgroups (#520472).
+
+* Wed Sep  2 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-19
+- Update from master.
+  - Fix x86_64 bits/mathinline.h for -m32 compilation.
+
+* Tue Sep  1 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-18
+- Update from master.
+  - fix parse error in <bits/mathinline.h> (#520209).
+
+* Thu Aug 27 2009 Roland McGrath <roland@redhat.com> - 2.10.90-17
+- Update from master.
+
+* Wed Aug 26 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-16
+- Update from master.
+  - handle AVX saving on x86-64 in interrupted symbol lookups (#519081).
+
+* Mon Aug 24 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-15
+- Update from master.
+  - fix fortify failure with longjmp from alternate stack (#512103).
+- Add conflict with prelink (#509655).
+
+* Mon Aug 17 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-14
+- Update from master.
+  - fix pthread_cond_signal (#516469)
+
+* Mon Aug 10 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-13
+- Update from master.
+  - fix rehashing of unique symbols (#515677)
+- Fix spurious messages with --excludedocs (#515948)
+
+* Mon Aug  3 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-12
+- Update from master.
+  - fix fortify failure with longjmp from alternate stack (#512103)
+
+* Thu Jul 30 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-11
+- Update from master.
+- Don't package debuginfo files in glibc-devel.
+
+* Tue Jul 28 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-10
+- Update from master.
+  * fix memory ordering in pthread_mutex_unlock (BZ#10418)
+  * implement RES_USE_DNSSEC option in resolver (#205842)
+  * fix hang in ldd -r (#513945)
+
+* Mon Jul 27 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-9
+- Update from master.
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.10.90-8.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Fri Jul 24 2009 Jakub Jelinek <jakub@redhat.com> - 2.10.90-7.1
+- Fix up pthread_cond_timedwait on x86_64 with old kernels.
+
+* Thu Jul 23 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-7
+- Update from master.
+- Build with -DNDEBUG unless using a prerelease.
+
+* Thu Jul 23 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-6
+- Rebuilt with binutils-2.19.51.0.14-29.fc12 to fix static binaries
+
+* Wed Jul 22 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-5
+- Update from master.
+- Undefine __i686 on x86 to fix build.
+
+* Mon Jul 20 2009 Andreas Schwab <schwab@redhat.com> - 2.10.90-4
+- Update from master.
+- Don't build separate i686 package.
+
+* Wed Jul  8 2009 Andreas Schwab <schwab@redhat.com> 2.10.90-3
+- Reenable setuid on pt_chown.
+
+* Thu Jul  2 2009 Andreas Schwab <aschwab@redhat.com> 2.10.90-2
+- Update from master.
+
+* Fri Jun 26 2009 Andreas Schwab <aschwab@redhat.com> 2.10.90-1
+- Update from master.
+- Enable multi-arch support on x86/x86-64.
+- Add requires glibc-headers to glibc-devel (#476295).
+- Implement second fallback mode for DNS requests (#505105).
+- Don't generate invalid POSIX TZ string for Asia/Dhaka timezone (#506941).
+- Allow backtrace through __longjmp_chk on powerpc.
+
+* Fri May 22 2009 Jakub Jelinek <jakub@redhat.com> 2.10.1-2
+- fix accept4 on architectures other than i?86/x86_64
+- robustify nscd client code during server GC
+- fix up nscd segfaults during daemon shutdown
+- fix memchr on ia64 (BZ#10162)
+- replace the Sun RPC license with the BSD license, with the explicit
+  permission of Sun Microsystems
+- fix up powerpc long double errno reporting
+
+* Sun May 10 2009 Jakub Jelinek <jakub@redhat.com> 2.10.1-1
+- fix up getsgent_r and getsgnam_r exports on i?86 and ppc
+
+* Sat May  9 2009 Jakub Jelinek <jakub@redhat.com> 2.10-2
+- update from trunk
+  - glibc 2.10 release
+  - fix memchr on x86_64 (#499689)
+
+* Mon Apr 27 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-22
+- update from trunk
+  - further localedef fixes
+- fix build-locale-archive
+
+* Fri Apr 24 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-21
+- update from trunk
+  - fix localedef
+  - fix SHIFT_JIS iconv EILSEQ handling (#497267)
+  - misc fixes (BZ#10093, BZ#10100)
+
+* Fri Apr 24 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-20
+- update from trunk
+  - fix p{read,write}v{,64} (#497429, #497434)
+  - fix strfmon (#496386)
+
+* Thu Apr 16 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-19
+- update from trunk
+  - fix dlopen from statically linked binaries (#495830)
+
+* Thu Apr 16 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-18
+- update from trunk
+  - fix fallocate
+
+* Wed Apr 15 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-17
+- update from trunk
+  - if threads have very small stack sizes, use much smaller buffer
+    in __get_nprocs when called from within malloc (#494631)
+
+* Tue Apr 14 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-16
+- update from trunk
+
+* Thu Apr  9 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-15
+- rebuilt with fixed gcc to avoid miscompilation of i586 memmove
+- reenable experimental malloc again
+
+* Wed Apr  8 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-14
+- update from trunk
+- temporarily disable experimental malloc
+
+* Tue Apr  7 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-13
+- update from trunk
+  - fix strverscmp (#494457)
+- configure with --enable-nss-crypt
+
+* Wed Apr  1 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-12
+- update from trunk
+- configure with --enable-experimental-malloc
+
+* Fri Mar 20 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-11
+- update from trunk
+  - POSIX 2008 prototype adjustments for scandir{,64}, alphasort{,64} and
+    versionsort{,64}
+  - fix libthread_db (#491197)
+
+* Tue Mar 10 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-10
+- update from trunk
+  - fix atexit/__cxa_atexit
+
+* Mon Mar  9 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-9
+- update from trunk
+  - POSIX 2008 support: -D_XOPEN_SOURCE=700 and -D_POSIX_C_SOURCE=200809L
+- move libnldbl_nonshared.a on ppc*/s390*/sparc* back to glibc-devel
+
+* Fri Feb 27 2009 Roland McGrath <roland@redhat.com> - 2.9.90-8.1
+- fix libthread_db (#487212)
+
+* Tue Feb 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.9.90-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Wed Feb 18 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-7
+- update from trunk
+- adjust for i586 + i686 from i386 + i686 build
+- split static libraries into glibc-static subpackage
+- ld -r the whole libpthread.a together to avoid endless issues with
+  -static ... -lpthread
+- require 2.6.18 and later kernel
+
+* Wed Feb  4 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-3
+- update from trunk
+  - ISO C++ compliant strchr etc. with GCC 4.4+
+  - AT_RANDOM support
+
+* Thu Jan  8 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-2
+- update from trunk
+
+* Fri Jan  2 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-1
+- update from trunk (#478314)
+
+* Mon Dec  8 2008 Jakub Jelinek <jakub@redhat.com> 2.9-3
+- temporarily disable _nss_dns_gethostbyname4_r (#459756)
+- NIS hostname lookup fixes (#473073, #474800, BZ#7058)
+- fix unsetenv (#472941)
+
+* Thu Nov 13 2008 Jakub Jelinek <jakub@redhat.com> 2.9-2
+- glibc 2.9 release
+- fix CPU_ALLOC_SIZE on 32-bit arches (BZ#7029)
+
+* Wed Nov 12 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-17
+- update from trunk
+  - don't abort on broken DNS replies (#469299, BZ#7009)
+  - misc fixes (BZ#6966, BZ#7008, BZ#6955, BZ#6843)
+
+* Fri Oct 31 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-16
+- update from trunk
+  - further resolver fixes
+  - another dynamic TLS handling fix (#469263)
+  - misc fixes (BZ#6867, BZ#6875, BZ#6919, BZ#6920, BZ#6942, BZ#6947,
+		BZ#6968, BZ#6974, BZ#6980, BZ#6995)
+- rebuild with newer rpm to avoid stripping
+  shared libraries when they shouldn't be (#468129)
+
+* Tue Oct 28 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-15
+- update from trunk
+  - __libc_res_nquery fixes (#466786)
+
+* Sun Oct 19 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-14
+- update from trunk
+  - fix dynamic TLS handling (#467309)
+  - fix sys/signalfd.h for C++ (#467172)
+  - fix sprof (#458861)
+  - fix _mcount and socket syscalls on s390x (#464146)
+  - try harder to allocate memory in valloc and pvalloc (#461481)
+- fix power6 32-bit libs (#467311)
+
+* Fri Oct 10 2008 Dennis Gilmore <dennis@ausil.us> 2.8.90-13
+- apply sparcv9v memset patch from jakub and davem
+
+* Fri Aug 29 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-12
+- update from trunk
+  - revert origin changes (#457849)
+  - use MAP_STACK for thread stacks
+  - misc fixes (BZ#6845, BZ#6544, BZ#6634, BZ#6589, BZ#6790, BZ#6791,
+    BZ#6824)
+  - power7 bits (BZ#6817)
+  - fix expm1 on i?86/x86_64 (#43354, BZ#5794)
+
+* Sat Aug  2 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-11
+- update from trunk
+  - fix non-absolute $ORIGIN handling (#457560)
+  - exported some further libresolv APIs (#453325)
+  - misc fixes
+
+* Tue Jul 29 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-10
+- update from trunk
+  - resolver fixes
+  - misc fixes (BZ#6771, BZ#6763, BZ#6698, BZ#6712)
+  - s390{,x} utmp/utmpx bi-arch support (BZ#6724)
+  - popen "e" flag
+- fr_FR locale changes reenabled
+
+* Wed Jul 16 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-9
+- update from trunk
+  - fix unbuffered vfprintf if writing to the stream fails (#455360)
+  - remove useless "malloc: using debugging hooks" message (#455355)
+  - nscd fixes
+  - fix resolver alignment issues (#454500)
+  - fix setvbuf (BZ#6719)
+
+* Thu Jul  3 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-8
+- update from trunk
+  - watch even resolv.conf in nscd using inotify
+  - some nscd fixes
+
+* Fri Jun 13 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-7
+- update from trunk
+  - avoid *lround* on ppc* clobbering cr3/cr4 registers (#450790)
+  - further nscd fixes (#450704)
+  - use inotify in nscd to watch files
+
+* Thu Jun 12 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-6
+- update from trunk
+  - nscd fixes (#450704)
+  - fix getservbyport (#449358)
+  - fix regexp.h (#446406)
+  - avoid crashing on T_DNAME in DNS responses (#450766)
+
+* Sun May 25 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-5
+- update from trunk
+
+* Tue May 20 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-4
+- further getaddrinfo and nscd fixes
+
+* Sun May 18 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-3
+- getaddrinfo and nscd fixes
+- reenable assertion checking in rawhide
+
+* Fri May 16 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-2
+- fix getaddrinfo (#446801, #446808)
+
+* Thu May 15 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-1
+- update to trunk
+  - O(n) memmem/strstr/strcasestr
+  - i386/x86_64 TLS descriptors support
+  - concurrent IPv4 and IPv6 DNS lookups by getaddrinfo
+
+* Mon May  5 2008 Jakub Jelinek <jakub@redhat.com> 2.8-3
+- don't run telinit u in %%post if both /dev/initctl and
+  /sbin/initctl exist (#444978)
+- workaround GCC ppc64 miscompilation of c{log{,10},acosh,atan}l
+  (#444996)
+
+* Wed Apr 30 2008 Jakub Jelinek <jakub@redhat.com> 2.8-2
+- fix nscd races during GC (BZ#5381)
+- rebuilt with fixed GCC to fix regex miscompilation on power6
+- SPARC fixes
+
+* Sat Apr 12 2008 Jakub Jelinek <jakub@redhat.com> 2.8-1
+- 2.8 release
+
+* Fri Apr 11 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-16
+- update to trunk
+  - misc fixes (BZ#4997, BZ#5741)
+  - make sure all users of __libc_setlocale_lock know it is
+    now a rwlock
+  - fix ppc/ppc64 compatibility _sys_errlist and _sys_siglist
+    symbols
+
+* Thu Apr 10 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-15
+- update to trunk
+  - misc fixes (BZ#4314, BZ#4407, BZ#5209, BZ#5436, BZ#5768, BZ#5998,
+		BZ#6024)
+- restart sshd in %%post when upstart is used - it doesn't have
+  /dev/initctl (#441763)
+- disable assert checking again
+
+* Tue Apr  8 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-14
+- update to trunk
+  - misc fixes (BZ#5443, BZ#5475, BZ#5478, BZ#5939, BZ#5979, BZ#5995,
+		BZ#6004, BZ#6007, BZ#6020, BZ#6021, BZ#6042)
+  - change mtrace to keep perl 5.10 quiet (#441082)
+  - don't share conversion state between mbtowc and wctomb (#438687)
+  - if st_blksize is too large and malloc fails, retry with smaller
+    buffer in opendir (#430768)
+  - correct *printf overflow test (#358111)
+
+* Fri Mar 28 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-13
+- update to trunk
+  - don't define ARG_MAX in <limits.h>, as it is no longer
+    constant - use sysconf (_SC_ARG_MAX) to get the current
+    argument size limit
+  - fix build on sparc64
+- only service sshd condrestart if /etc/rc.d/init.d/sshd exists
+  (#428859)
+
+* Wed Mar 26 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-12
+- update to trunk
+  - new CLONE_* flags in <sched.h> (#438542)
+  - nis+ errno clobbering fix (#437945)
+  - fix adjtime (#437974)
+
+* Fri Mar 14 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-11
+- update to trunk
+- remove <stropts.h>, define _XOPEN_STREAMS -1 (#436349)
+
+* Wed Mar  5 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-8
+- update to trunk
+  - {,v}{as,d}printf and obstack_{,v}printf fortification (#435905)
+  - fix getnameinfo/gethostbyaddr (#428067, BZ#5790)
+  - fix yp_order (#435519, BZ#5854)
+  - misc fixes (BZ#5779, BZ#5736, BZ#5627, BZ#5818, BZ#5012)
+- merge review cleanup (Tom Callaway, #225806)
+
+* Sat Feb 16 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-7
+- update to trunk
+  - make NI_MAXHOST and NI_MAXSERV available even in BSDish
+    namespaces (BZ#5737)
+  - timerfd_* syscalls
+
+* Fri Feb  1 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-6
+- fix build
+
+* Thu Jan 31 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-5
+- update to trunk
+- rebuild with gcc 4.3
+
+* Fri Jan 11 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-4
+- update to trunk
+  - misc fixes (BZ#5541, BZ#5545, BZ#5553, BZ#5112, BZ#5520)
+  - getaddrinfo fixes
+  - signalize EOVERFLOW from sem_post instead of overflowing
+    the counter
+  - fix i?86 makecontext
+  - fix iconv for iso-2022-jp//translit (#397021)
+
+* Thu Jan  3 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-3
+- update to trunk
+  - fix recognition of interface family (#425768)
+  - add __THROW to __ctype_{b,tolower,toupper}_loc prototypes
+
+* Thu Dec 27 2007 Jakub Jelinek <jakub@redhat.com> 2.7.90-2
+- update to trunk
+  - nsswitch fix (#425768)
+- temporarily enable assert checking
+
+* Wed Dec 12 2007 Jakub Jelinek <jakub@redhat.com> 2.7.90-1
+- update to trunk
+  - fix __USE_STRING_INLINES on i?86 (#408731, #371711)
+  - fix *scanf (#388751)
+
+* Wed Oct 17 2007 Jakub Jelinek <jakub@redhat.com> 2.7-1
+- glibc 2.7 release
+- fix tzfile.c for times after last transition (#333561)
+- fix sem_post@GLIBC_2.0 on i?86
+- appease valgrind in libpthread.so initialization
+- misc fixes (BZ#3425, BZ#5184, BZ#5186)
+
+* Mon Oct 15 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-21
+- fix getgr{name,gid}{,_r} with nscd
+
+* Sun Oct 14 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-20
+- install <bits/error.h> (#330031)
+- disable -D_FORTIFY_SOURCE{,=2} support (with a warning) for
+  GCC 3.4.x and earlier(#327641)
+- pl_PL locale changes (BZ#4098, #242296)
+- misc fixes (BZ#1140, BZ#3195, BZ#3242, BZ#4359)
+
+* Thu Oct 11 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-19
+- fix <netinet/tcp.h>
+- simple preprocessor in localedef, fix de_DE collation with it
+
+* Wed Oct 10 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-18
+- add signalfd, eventfd, eventfd_read, eventfd_write
+- qsort speedups
+- workaround for cpuid bugs (#324081)
+- make sure gettext's conversion_lock is initialized even if
+  program isn't linked against libpthread.so.0, only dlopens it (#321761)
+- misc fixes (BZ#5112, BZ#5113, BZ#5104, BZ#5063, BZ#5010, BZ#4407,
+  BZ#3924, BZ#5103, BZ#2633, BZ#181, BZ#73, #321901)
+
+* Wed Oct  3 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-17
+- fix {,v}swprintf with -D_FORTIFY_SOURCE=1 -mlong-double-64 on ppc*/s390*/sparc*
+- strcoll fixes
+- misc fixes (BZ#645, BZ#5071)
+- locale fixes (BZ#4941, #299321, #203364, #196711, #236212)
+
+* Sat Sep 29 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-16
+- misc fixes (BZ#4963, BZ#4972, BZ#5028, BZ#5043, BZ#5058)
+- improve -D_FORTIFY_SOURCE{,=2} diagnostic through warning/error
+  attributes
+- fix wcscpy, wcpcpy, fgetws, fgetws_unlocked, swprintf and vswprintf
+  fortification inlines
+- fix a scalability issue with lazy binding in heavily multithreaded
+  programs
+
+* Thu Sep 20 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-15
+- $5$ (SHA-256) and $6$ (SHA-512) support in crypt
+  (#228697, #249477, #173834)
+
+* Tue Sep 18 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-14
+- -D_FORTIFY_SOURCE{,=2} support for C++
+- fortification of fread{,_unlocked}
+- support *scanf m allocation modifier (%%ms, %%mls, %%mc, ...)
+- in -std=c99 or -D_XOPEN_SOURCE=600 mode don't recognize
+  %%as, %%aS and %%a[ as a GNU extension for *scanf
+- fix splice, vmsplice, tee return value, make them cancellation
+  points
+- mq_open checking
+- use inline function rather than function-like macro
+  for open{,at}{,64} checking
+- IFA_F_OPTIMISTIC handling in getaddrinfo (#259681)
+- fix an ABBA deadlock in ld.so (#284171)
+- remove sparc{32,64} unwind info from _start and clone
+
+* Mon Aug 27 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-13
+- fix personality on x86_64/ppc/ppc64 (#256281)
+
+* Sat Aug 25 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-12
+- readd x86_64 gettimeofday stuff, initialize it earlier
+- nis_list fix (#254115)
+- workaround for bugs in ia64 silly /emul/ia32-linux hack (#253961)
+- misc fixes (BZ#3924, BZ#4566, BZ#4582, BZ#4588, BZ#4726, BZ#4946,
+  BZ#4905, BZ#4814, BZ#4925, BZ#4936, BZ#4896, BZ#4937, BZ#3842,
+  BZ#4554, BZ#4557, BZ#4938)
+
+* Fri Aug 17 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-11
+- remove __strtold_internal and __wcstold_internal from ppc*/s390*/sparc*
+  *-ldbl.h headers
+- temporarily backout x86_64 gettimeofday.S changes (#252453)
+- some further sparc, sparc64 and alpha fixes
+
+* Wed Aug 15 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-10
+- don't open /etc/ld.so.{cache,preload} with O_NOATIME (#252146)
+- s390{,x}, alpha and sparc fixes
+- sparcv9 is no longer an aux arch, as we expect
+  to not build sparc.rpm glibc any longer, only sparcv9.rpm,
+  sparc64.rpm and new two aux arches sparcv9v.rpm and sparc64v.rpm
+
+* Tue Aug 14 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-9
+- private futex even for mutexes and condvars
+- some further O_CLOEXEC changes
+- use vDSO on x86_64 if available
+- ia64 build fixes (#251983)
+
+* Fri Aug 10 2007 Roland McGrath <roland@redhat.com> 2.6.90-8
+- update to trunk
+  - fix missing strtold_l export on ppc64
+
+* Thu Aug  9 2007 Roland McGrath <roland@redhat.com> 2.6.90-6
+- update to trunk
+  - fix local PLT regressions
+- spec file revamp for new find-debuginfo.sh
+
+* Sun Aug  5 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-4
+- fix librt.so and librtkaio.so on ppc32, so that it is not using
+  bss PLT
+
+* Sat Aug  4 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-3
+- fix open{,at}{,64} macro for -pedantic (#250897)
+- add transliteration for l with stroke (#250492)
+- fix strtod ("-0", NULL)
+- update License tag
+
+* Wed Aug  1 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-2
+- make aux-cache purely optional performance optimization in ldconfig,
+  don't issue any errors if it can't be created (#250430)
+- remove override_headers hack, BuildRequire >= 2.6.22 kernel-headers
+  and rely on its content
+
+* Tue Jul 31 2007 Jakub Jelinek <jakub@redhat.com> 2.6.90-1
+- update to trunk
+  - private futex optimizations
+  - open{,at}{,64} argument checking
+- ldconfig speedups
+
+* Sun Jul  8 2007 Jakub Jelinek <jakub@redhat.com> 2.6-4
+- filter <built-in> pseudo-files from debuginfo source lists (#245714)
+- fix sscanf when errno is EINTR before the call (BZ#4745)
+- save/restore errno around reading /etc/default/nss (BZ#4702)
+- fix LD_HWCAP_MASK handling
+- disable workaround for #210748, instead backport
+  ld.so locking fixes from the trunk (#235026)
+- new x86_64 memcpy
+- don't write uninitialized padding bytes to nscd socket
+- fix dl{,v}sym, dl_iterate_phdr and dlopen if some library is
+  mapped into ld.so's inter-segment hole on x86_64 (#245035, #244545)
+- fix LD_AUDIT=a:b program (#180432)
+- don't crash on pseudo-zero long double values passed to
+  *printf on i?86/x86_64/ia64 (BZ#4586)
+- fix *printf %%La and strtold with some hexadecimal floating point
+  constants on ppc/ppc64
+- fix nextafterl on ppc/ppc64
+- fix sem_timedwait on i?86 and x86_64
+
+* Thu May 24 2007 Jakub Jelinek <jakub@redhat.com> 2.6-3
+- don't use %%config(missingok) for locale-archive.tmpl,
+  instead of removing it altogether truncate it to zero
+  size (#240697)
+- add a workaround for #210748
+
+* Mon May 21 2007 Jakub Jelinek <jakub@redhat.com> 2.6-2
+- restore malloc_set_state backwards compatibility (#239344)
+- fix epoll_pwait (BZ#4525)
+- fix printf with unknown format spec or positional arguments
+  and large width and/or precision (BZ#4514)
+- robust mutexes fix (BZ#4512)
+
+* Tue May 15 2007 Roland McGrath <roland@redhat.com> 2.6-1
+- glibc 2.6 release
+
+* Fri May 11 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-24
+- utimensat, futimens and lutimes support
+
+* Thu May 10 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-23
+- use madvise MADV_DONTNEED in malloc
+- fix ia64 feraiseexcept
+- fix s390{,x} feholdexcept (BZ#3427)
+- ppc fenv fixes
+- make fdatasync a cancellation point (BZ#4465)
+- fix *printf for huge precisions with wide char code and multi-byte
+  strings
+- fix dladdr (#232224, BZ#4131)
+
+* Fri May  4 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-22
+- add transliteration for <U2044> (BZ#3213)
+- fix *scanf with %%f on hexadecimal floats without exponent (BZ#4342)
+- fix *printf with very large precisions for %%s (#238406, BZ#4438)
+- fix inet_ntop size checking for AF_INET (BZ#4439)
+- for *printf %%e avoid 1.000e-00, for exponent 0 always use + sign (#238431)
+- fix a regression introduced in #223467 changes
+- gethostby*_r alignment fixes (BZ#4381)
+- fix ifaddrs error handling
+
+* Mon Apr 16 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-21
+- don't include individual locale files in glibc-common,
+  rather include prepared locale-archive template and let
+  build-locale-archive create locale-archive from the template
+  and any user supplied /usr/lib/locale/*_* directories,
+  then unlink the locale-archive template - this should save
+  > 80MB of glibc-common occupied disk space
+- fix _XOPEN_VERSION (BZ#4364)
+- fix printf with %%g and values tiny bit smaller than 1.e-4 (#235864,
+  BZ#4362)
+- fix NIS+ __nisfind_server (#235229)
+
+* Sat Mar 31 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-20
+- assorted NIS+ speedups (#223467)
+- fix HAVE_LIBCAP configure detection (#178934)
+- remove %%{_prefix}/sbin/rpcinfo from glibc-common (#228894)
+- nexttoward*/nextafter* fixes (BZ#3306)
+- feholdexcept/feupdateenv fixes (BZ#3427)
+- speed up fnmatch with two or more * in the pattern
+
+* Sat Mar 17 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-19
+- fix power6 libm compat symbols on ppc32 (#232633)
+- fix child refcntr in NPTL fork (#230198)
+- fix ifaddrs with many net devices on > 4KB page size arches (#230151)
+- fix pthread_mutex_timedlock on x86_64 (#228103)
+- various fixes (BZ#3919, BZ#4101, BZ#4130, BZ#4181, BZ#4069, BZ#3458)
+
+* Wed Feb 21 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-18
+- fix nftw with FTW_CHDIR on / (BZ#4076)
+- nscd fixes (BZ#4074)
+- fix fmod{,f,l} on i?86 (BZ#3325)
+- support localized digits for fp values in *scanf (BZ#2211)
+- namespaces fixes (BZ#2633)
+- fix euidaccess (BZ#3842)
+- glob fixes (BZ#3996)
+- assorted locale data fixes (BZ#1430, BZ#672, BZ#58, BZ#3156,
+  BZ#2692, BZ#2648, BZ#3363, BZ#3334, BZ#3326, BZ#3322, BZ#3995,
+  BZ#3885, BZ#3884, BZ#3851)
+
+* Sun Feb 11 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-17
+- RFC2671 support in resolver (#205842)
+- fix strptime (BZ#3944)
+- fix regcomp with REG_NEWLINE (BZ#3957)
+- fix pthread_mutex_timedlock on x86_64 (#228103)
+
+* Fri Feb  2 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-16
+- add strerror_l
+- fix application crashes when doing NSS lookups through nscd
+  mmapped databases and nscd decides to start garbage collection
+  during the lookups (#219145, #225315)
+- fix %%0lld printing of 0LL on 32-bit architectures (BZ#3902)
+- ignore errors from install-info in glibc-devel scriptlets
+  (#223691)
+
+* Wed Jan 17 2007 Jakub Jelinek <jakub@redhat.com> 2.5.90-15
+- fix NIS getservbyname when proto is NULL
+- fix nss_compat +group handling (#220658)
+- cache services in nscd
+- fix double free in fts_close (#222089)
+- fix vfork+execvp memory leak (#221187)
+- soft-fp fixes (BZ#2749)
+- further strtod fixes (BZ#3855)
+- make sure pthread_kill doesn't return EINVAL even if
+  the target thread exits in between pthread_kill ESRCH check
+  and the actual tgkill syscall (#220420)
+- fix ABBA deadlock possibility in ld.so scope locking code
+
+* Tue Dec 19 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-14
+- fix {j,m}rand48{,_r} on 64-bit arches (BZ#3747)
+- handle power6x AT_PLATFORM (#216970)
+- fix a race condition in getXXbyYY_r (#219145)
+- fix tst-pselect testcase
+
+* Thu Dec 14 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-13
+- fix setcontext on ppc32 (#219107)
+- fix wide stdio after setvbuf (#217064, BZ#2337)
+- handle relatime mount option in statvfs
+- revert i?86/x86_64 clone CFI temporarily
+
+* Sun Dec 10 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-12
+- fix hasmntopt (#218802)
+- fix setusershell and getusershell (#218782)
+- strtod fixes (BZ#3664, BZ#3673, BZ#3674)
+- fix memusage with realloc (x, 0)
+
+* Tue Dec  5 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-11
+- allow suid apps to setenv NIS_PATH and influence through that
+  nis_list and nis_lookup (#209155)
+- fix ttyname and ttyname_r with invalid file descriptor (#218276)
+- cs_CZ LC_TIME fixes (#218438)
+- fix build with 2.6.19+ headers (#217723)
+
+* Fri Dec  1 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-10
+- fix x86-64 restore_rt unwind info
+
+* Thu Nov 30 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-9
+- fix last svc_run change (#217850)
+- on ppc64 build __libc_start_main without unwind info,
+  as it breaks MD_FROB_UPDATE_CONTEXT (#217729, #217775; in the
+  future that could be fixable just by providing .cfi_undefined r2
+  in __libc_start_main instead)
+- add unwind info for x86-64 restore_rt signal return landing pad
+  (#217087)
+- add power6x subdir to /%%{_lib}/ and /%%{_lib}/rtkaio/,
+  link all libs from ../power6/* into them
+
+* Tue Nov 28 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-8
+- fix svc_run (#216834, BZ#3559)
+- add -fasynchronous-unwind-tables to CFLAGS (#216518)
+- make sure there is consistent timestamp for /etc/ld.so.conf,
+  /etc/localtime and /etc/rpc between multilib glibc rpms
+
+* Mon Nov 20 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-7
+- handle IPv6 addresses in /etc/hosts that are mappable to
+  IPv4 addresses in IPv4 host lookups (#215283)
+- fix :include: /etc/alias handling (#215572)
+- handle new tzdata format to cope with year > 2037 transitions
+  on 64-bit architectures
+
+* Fri Nov 10 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-6
+- fix strxfrm fix
+- fix i?86 floor and ceil inlines (BZ#3451)
+
+* Thu Nov  9 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-5
+- fix sysconf (_SC_LEVEL{2,3}_CACHE_SIZE) on Intel Core Duo
+  CPUs
+- fix libthread_db.so on TLS_DTV_AT_TP architectures
+- fix --inhibit-rpath (#214569)
+- fix _r_debug content when prelinked ld.so executes
+  a program as its argument
+- fix strxfrm
+- powerpc-cpu add-on updates
+
+* Fri Nov  3 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-4
+- fix atexit backwards compatibility (#213388)
+- add mai_IN locale (#213415)
+- remove bogus %%{_libdir}/librt.so.1 symlink (#213555)
+- fix memusage (#213656)
+- change libc.info category (#209493)
+
+* Sun Oct 29 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-3
+- fix suid/sgid binaries on i?86/x86_64 (#212723)
+
+* Fri Oct 27 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-2
+- fix ia64 build
+- don't call _dl_close outside of dl_load_lock critical section
+  if dlopen failed (BZ#3426)
+- add rtld scope locking (#211133)
+
+* Wed Oct 25 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-1
+- fix i?86 6 argument syscalls (e.g. splice)
+- fix rtld minimal realloc (BZ#3352)
+- fix RFC3484 getaddrinfo sorting according to rules 4 and 7 (BZ#3369)
+- fix xdrmem_setpos (#211452)
+- bump __GLIBC_MINOR__
+- increase PTHREAD_STACK_MIN on ppc{,64} to 128K to allow
+  64K pagesize kernels (#209877)
+- speed up initgroups on NIS+ (#208203)
+
+* Mon Oct  2 2006 Jakub Jelinek <jakub@redhat.com> 2.5-2
+- fix nscd database growing (#207928)
+- bypass prelinking when LD_DYNAMIC_WEAK=1 is in the environment
+
+* Fri Sep 29 2006 Jakub Jelinek <jakub@redhat.com> 2.5-1
+- glibc 2.5 release
+
+* Wed Sep 27 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-36
+- rebuilt with gcc-4.1.1-26 to fix unwind info
+
+* Mon Sep 25 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-35
+- fix glob with large number of matches (BZ#3253)
+- fix fchownat on kernels that don't support that syscall (BZ#3252)
+- fix lrintl on s390{,64}
+
+* Sat Sep 23 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-34
+- fix ppc{32,64} longjmp (BZ#3225)
+- fix user visible spelling errors (BZ#3137)
+- fix l{,l}rint{,f,l} around zero (BZ#2592)
+- avoid stack trampoline in s390{,x} makecontext
+
+* Tue Sep 19 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-33
+- fix dlclose (#206639)
+- don't load platform optimized libraries if kernel doesn't set
+  AT_PLATFORM
+- fix ppc{32,64} libSegFault.so
+- use -mtune=generic even for glibc-devel.i386 (#206437)
+- fix /%%{_lib}/librt.so.1 symlink
+
+* Fri Sep 15 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-32
+- on ppc* use just AT_PLATFORM and altivec AT_HWCAP bit for library selection
+- fix lrintl and lroundl on ppc{,64}
+- use hidden visibility on fstatat{,64} and mknodat in libc_nonshared.a
+
+* Sun Sep 10 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-31
+- fix pthread_cond_{,timed}wait cancellation (BZ#3123)
+- fix lrint on ppc32 (BZ#3155)
+- fix malloc allocating more than half of address space (BZ#2775)
+- fix mktime on 32-bit arches a few years after 2038 (BZ#2821)
+
+* Thu Sep  7 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-30
+- add librtkaio, to use it add /%%{lib}/rtkaio to your
+  LD_LIBRARY_PATH or /etc/ld.so.conf
+- fix or_IN February name (#204730)
+- fix pthread_create called from cancellation handlers (BZ#3124)
+- fix regex case insensitive searches with characters where upper
+  and lower case multibyte representations have different length
+  (e.g. I and dotless i, #202991)
+
+* Tue Sep  5 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-29
+- randomize resolver query ids before use instead after use (#205113)
+- fix resolver symver checking with DT_GNU_HASH (#204909)
+- put .hash section in glibc libraries at the end of RO segment
+  when .gnu.hash is present
+
+* Thu Aug 31 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-28
+- another malloc doubly linked list corruption problem fix (#204653)
+
+* Thu Aug 31 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-27
+- allow $LIB and $PLATFORM in dlopen parameters even in suid/sgid (#204399)
+- handle $LIB/$PLATFORM in LD_LIBRARY_PATH
+- fix splice prototype (#204530)
+
+* Mon Aug 28 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-26
+- real fix for the doubly linked list corruption problem
+- try harder in realloc to allocate memory (BZ#2684)
+- fix getnameinfo error reporting (#204122)
+- make localedef more robust on invalid input (#203728)
+
+* Fri Aug 25 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-25
+- temporarily back out code to limit number of unsorted block
+  sort iterations (#203735, #204027)
+- handle PLT symbols in dladdr properly (BZ#2683)
+- avoid malloc infinite looping for allocations larger than
+  the system can allocate (#203915)
+
+* Tue Aug 22 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-23
+- malloc fixes, especially for 32-bit arches (#202309)
+- further *_IN locale fixes (#200230)
+- fix get{serv,rpc}ent{,_r} if NIS map is empty (#203237)
+- fix /usr/bin/iconv (#203400)
+
+* Fri Aug 18 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-22
+- rebuilt with latest binutils to pick up 64K -z commonpagesize
+  on ppc/ppc64 (#203001)
+
+* Tue Aug 15 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-21
+- if some test gets stuck, kill the tee process after make check
+  finishes
+- build with -mtune=generic on i686 and x86_64
+
+* Tue Aug 15 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-20
+- PTHREAD_PRIO_PROTECT support
+- fix errno if nice() fails (#201826)
+
+* Thu Aug 10 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-19
+- adaptive malloc brk/mmap threshold
+- fix fchownat to use kernel syscall (if available) on many arches (#201870)
+- only define O_DIRECT with -D_GNU_SOURCE on ia64 to match all
+  other arches (#201748)
+
+* Mon Aug  7 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-18
+- NIS+ fixes
+- fix memusage and xtrace scripts (#200736)
+- redirect /sbin/service sshd condrestart std{out,err} to /dev/null
+  when executed from glibc_post_upgrade
+
+* Wed Aug  2 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-17
+- typo fix for the dladdr patch
+- build i?86 glibc with -mno-tls-direct-seg-refs (#200469)
+
+* Wed Aug  2 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-16
+- fix dladdr on binaries/libraries with only DT_GNU_HASH and no
+  DT_HASH (#200635)
+- fix early timeout of initgroups data in nscd (#173019)
+- add am/pm display to es_PE and es_NI locales (#167101)
+- fix nss_compat failures when nis/nis+ unavailable (#192072)
+
+* Mon Jul 31 2006 Roland McGrath <roland@redhat.com> 2.4.90-15
+- fix missing destructor calls in dlclose (#197932)
+- enable transliteration support in all locales (#196713)
+- disallow RTLD_GLOBAL flag for dlmopen in secondary namespaces (#197462)
+- PI mutex support
+
+* Mon Jul 10 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-13
+- DT_GNU_HASH support
+
+* Fri Jun 30 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-12
+- buildrequire gettext
+- enable fstatat64/newfstatat syscalls even on ppc*/s390*/ia64 (#196494)
+- fix out of memory behavior in gettext (#194321)
+- fix regex on multi-byte non-UTF-8 charsets (#193873)
+- minor NIS+ fixes (#190803)
+- don't use cancellable calls in posix_spawn* and only set{u,g}id
+  current thread if requested (#193631)
+
+* Wed May 31 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-11
+- don't exit from nscd -i <database> before the database is
+  actually invalidated, add locking to prune_cache (#191464)
+- build glibc-devel.i386 static libraries with
+  -mno-tls-direct-seg-refs -DNO_TLS_DIRECT_SEG_REFS
+- RFC3542 support (advanced API for IPv6; #191001, BZ##2693)
+
+* Wed May 24 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-10
+- on i686 make glibc owner of /lib/i686 directory (#192597)
+- search parent NIS+ domains (#190803)
+
+* Sun May 21 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-9
+- update from CVS
+  - big NIS+ changes
+
+* Fri May 19 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-8
+- update from CVS
+  - fix nss_compat when SETENT_BATCH_READ=TRUE is in /etc/default/nss
+  - fix RFC3484 precedence table for site-local and ULA addresses (#188364)
+  - fix a sunrpc memory leak
+
+* Thu May 11 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-7
+- update from CVS
+  - fix tcgetattr (#177965)
+  - fix <sys/queue.h> (#191264)
+
+* Fri May  5 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-6
+- update from CVS
+- rebuilt using fixed rpm
+
+* Fri May  5 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-5
+- update from CVS
+  - some NIS+ fixes
+  - allow overriding rfc3484 address sorting tables for getaddrinfo
+    through /etc/gai.conf (sample config file included in %%doc directory)
+
+* Mon May  1 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-4
+- update from CVS
+  - SETENT_BATCH_READ /etc/default/nss option for speeding up
+    some usages of NIS+ (#188246)
+  - move debug state change notification (#179208)
+  - fix ldd script if one of the dynamic linkers is not installed (#190259)
+
+* Thu Apr 27 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-3
+- update from CVS
+  - fix a typo in nscd.conf (#190085)
+  - fix handling of SIGHUP in nscd when some caches are disabled (#189978)
+  - make nscd paranoia mode working with non-root server-user (#189779)
+
+* Wed Apr 26 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-2
+- update from CVS
+  - fix getaddrinfo (#190002)
+  - add auto-propagate nscd.conf options (#177154)
+  - fix nscd auditing (#169148)
+
+* Tue Apr 25 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-1
+- update from CVS
+
+* Mon Apr 24 2006 Jakub Jelinek <jakub@redhat.com> 2.4-6
+- update from CVS
+  - NIS+ fixes
+  - don't segfault on too large argp key values (#189545)
+  - getaddrinfo fixes for RFC3484 (#188364)
+
+* Tue Mar 28 2006 Jakub Jelinek <jakub@redhat.com> 2.4-5
+- update from CVS
+  - pshared robust mutex support
+  - fix btowc and bwtoc in C++ (#186410)
+  - fix NIS+ (#186592)
+  - don't declare __wcsto*l_internal for non-GCC or if not -O1+ (#185667)
+- don't mention nscd failures on 2.0 kernels (#185335)
+
+* Tue Mar  7 2006 Roland McGrath <roland@redhat.com> 2.4-4
+- back up %%{ix86} gdb conflicts to < 6.3.0.0-1.111
+
+* Tue Mar  7 2006 Jakub Jelinek <jakub@redhat.com> 2.4-3
+- really fix rintl on ppc64
+
+* Tue Mar  7 2006 Jakub Jelinek <jakub@redhat.com> 2.4-2
+- accurate unwind info for lowlevellock.h stubs on %%{ix86}
+- fix ppc/ppc64 ceill, floorl, rintl, roundl and truncl (BZ#2423)
+
+* Mon Mar  6 2006 Jakub Jelinek <jakub@redhat.com> 2.4-1
+- update from CVS
+  - glibc 2.4 release
+
+* Mon Mar  6 2006 Jakub Jelinek <jakub@redhat.com> 2.3.91-2
+- update from CVS
+  - fix sYSMALLOc for MALLOC_ALIGNMENT > 2 * SIZE_SZ (#183895)
+  - revert ppc32 malloc alignment patch, it breaks malloc_set_state
+    and needs some further thoughts and time (#183894)
+- provide accurate unwind info for lowlevellock.h stubs on x86_64
+
+* Thu Mar  2 2006 Jakub Jelinek <jakub@redhat.com> 2.3.91-1
+- update from CVS
+  - fixes for various arches
+- ensure malloc returns pointers aligned to at least
+  MIN (2 * sizeof (size_t), __alignof__ (long double))
+  (only on ppc32 this has not been the case lately with addition
+   of 128-bit long double, #182742)
+
+* Wed Mar  1 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-39
+- update from CVS
+
+* Fri Feb 17 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-38
+- update from CVS
+  - robust mutexes rewrite
+
+* Mon Feb 13 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-37
+- update from CVS
+  - *at fixes
+  - unshare syscall wrapper
+
+* Sat Feb  4 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-36
+- update from CVS
+  - fix frequency setting for ITIMER_PROF (#179938, BZ#2268)
+  - fix powerpc inline fegetround ()
+  - fix nptl_db (#179946)
+
+* Fri Feb  3 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-35
+- update from CVS
+  - handle futimesat (fd, NULL, tvp) as futimes (fd, tvp)
+- fix <stdlib.h> q{e,f,g}cvt{,_r} for -mlong-double-64
+
+* Thu Feb  2 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-34
+- fix <math.h> with C++ and -mlong-double-64 (#179742)
+- add nexttowardl redirect for -mlong-double-64
+
+* Thu Feb  2 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-33
+- update from CVS
+  - long double support fixes
+
+* Wed Feb  1 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-32
+- update from CVS
+  - 128-bit long double fixes for ppc{,64}, s390{,x} and sparc{,v9},
+    alpha 128-bit long double support
+- add inotify syscall numbers to the override <asm/unistd.h> headers
+  (#179366)
+
+* Mon Jan 30 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-31
+- update from CVS
+  - 128-bit long double on ppc, ppc64, s390, s390x and sparc{,v9}
+- add some new syscall numbers to the override <asm/unistd.h>
+  headers
+
+* Mon Jan  9 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-30
+- update from CVS
+  - <pthread.h> initializer fixes for -std=c{8,9}9 on 32-bit
+    arches
+- avoid writable .rodata (#177121)
+
+* Fri Jan  6 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-29
+- update from CVS
+  - make pthread_mutex_t an unnamed union again, as it affects
+    libstdc++ ABI mangling
+
+* Fri Jan  6 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-28
+- update from CVS
+  - make aio_suspend interruptible by signals (#171968)
+
+* Fri Jan  6 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-27
+- only rely on d_type in 32-bit getdents on s390 for 2.6.11+
+
+* Wed Jan  4 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-26
+- update from CVS
+  - for newly linked lio_listio* callers, send per request
+    notifications (#170116)
+  - fixup nscd -S option removal changes (#176860)
+  - remove nonnull attribute from ctermid (#176753)
+  - fix PTHREAD_*_INITIALIZER{,_NP} on 64-bit arches
+  - SPARC NPTL support for pre-v9 CPUs
+- drop support for 2.4.xx and < 2.6.9 kernels
+
+* Mon Jan  2 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-25
+- update from CVS
+  - s390{,x} and sparc{,64} pointer mangling fixes
+- install a sanitized LinuxThreads <bits/libc-lock.h>
+
+* Mon Jan  2 2006 Jakub Jelinek <jakub@redhat.com> 2.3.90-24
+- update from CVS
+  - nscd audit changes (#174422)
+  - ppc{32,64} vDSO support and ppc32 hp-timing
+
+* Tue Dec 27 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-23
+- update from CVS
+  - robust mutexes
+- fix transliteration segfaults (#176573, #176583)
+- ignore prelink temporaries in ldconfig (#176570)
+
+* Wed Dec 21 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-22
+- update from CVS
+  - minor fts fixes
+- revert broken _Pragma () workaround
+- fix ldconfig on bi-arch architectures (#176316)
+
+* Tue Dec 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-21
+- update from CVS
+  - fix pointer (de)mangling in gconv_cache.c
+
+* Tue Dec 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-20
+- update from CVS
+  - time ((void *) 1) should segfault, not return -EFAULT (#174856, BZ#1952)
+  - fix errlist generation
+- update ulps for GCC 4.1 on IA-64
+
+* Mon Dec 19 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-19
+- update from CVS
+  - sysdeps/generic reorg
+  - setjmp/longjmp jump pointer mangling
+- rebuilt with GCC 4.1-RH prerelease, worked around broken _Pragma ()
+  handling in it
+- remove glibc-profile subpackage
+- use non-PLT calls for malloc/free/realloc/memalign invocations in
+  mtrace and mcheck hooks (#175261)
+- setjmp/longjmp jump pointer mangling on ppc{,64}/ia64/s390{,x}
+
+* Sat Nov 19 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-18
+- update from CVS
+  - change <sys/stat.h> for broken apps that #define const /**/,
+    handle non-GCC compilers
+  - fix ppc{32,64} strncmp (BZ#1877, #173643, IT#83510)
+  - provide shmatt_t typedef in ia64 <sys/shm.h (#173680)
+  - support 2nd arg to futimesat being NULL (#173581)
+
+* Wed Nov 16 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-17
+- update from CVS
+  - fix <sys/stat.h> in C++
+  - {fstat,fchown,rename,unlink}at fixes
+  - epoll_wait is now a cancellation point
+
+* Tue Nov 15 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-16
+- update from CVS
+- make sure waitid syscall is used on ppc*/s390*
+
+* Thu Oct 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-15
+- update from CVS
+  - be permissive in %%n check because of kernel bug #165351 (#171240)
+  - don't misalign stack in pthread_once on x86_64 (#170786, IT#81521)
+  - many locale fixes
+
+* Mon Oct 10 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-14
+- update from CVS
+  - fix malloc bug after fork introduced in the last update
+  - fix getent hosts IP for IPv4 IPs (#169831)
+
+* Mon Oct  3 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-13
+- update from CVS
+  - fix setuid etc. hangs if some thread exits during the call (#167766)
+  - fix innetgr memory leak (#169051)
+  - support > 2GB nscd log files (#168851)
+  - too many other changes to list here
+- include errno in nscd message if audit_open failed (#169148)
+
+* Mon Sep 12 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-12
+- update from CVS
+  - netgrp handling fixes (#167728)
+  - fix memory leak in setlocale (BZ#1318)
+  - fix hwcaps computation
+  - several regex portability improvements (#167019)
+  - hypotf fix
+  - fix *printf return code if underlying write fails (BZ#1146)
+  - PPC64 dl{,v}sym fixes for new ABI .opd symbols
+- fix calloc with MALLOC_PERTURB_ in environment on 64-bit architectures
+  (#166719)
+- source /etc/sysconfig/nscd (if it exists) in /etc/rc.d/init.d/nscd
+  (#167083)
+- add %%triggerin for tzdata to glibc-common, so that tzdata updates
+  update /etc/localtime and /var/spool/postfix/etc/localtime if they
+  exist (#167787)
+
+* Mon Aug 29 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-11
+- FUTEX_WAKE_OP support to speed up pthread_cond_signal
+
+* Wed Aug 24 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-10
+- update from CVS
+  - fix growing of nscd persistent database (BZ#1204)
+  - fix _FORTIFY_SOURCE mbstowcs and wcstombs if destination size
+    is known at compile time, but length argument is not
+
+* Mon Aug 22 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-9
+- update from CVS
+  - fix resolving over TCP (#161181, #165802)
+  - on ia64 don't abort on unhandled math function exception codes
+    (#165693)
+
+* Mon Aug  8 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-8
+- update from CVS
+  - nscd persistent database verifier (#164001)
+  - cleanup _FORTIFY_SOURCE bits/*.h headers (#165000)
+  - handle EINTR in sigwait properly
+- make sure poor man's stack guard randomization keeps first
+  byte 0 even on big-endian 32-bit arches
+- fix {elf,nptl}/tst-stackguard1
+- obsolete linuxthreads-devel in glibc-devel
+
+* Fri Jul 29 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-7
+- update from CVS
+- do some poor man's stack guard randomization even without
+  the costly --enable-stackguard-randomization
+- rebuilt with new GCC to make it use -msecure-plt on PPC32
+
+* Mon Jul 25 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-6
+- update from CVS
+  - fix execvp if PATH is not in environment and the call is going
+    to fail (BZ#1125)
+  - another bits/wchar2.h fix (#163990)
+
+* Fri Jul 22 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-5
+- update from CVS
+  - fix stubs.h generation
+- don't use _G_va_list in bits/wchar2.h
+
+* Fri Jul 22 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-4
+- update from CVS
+  - make sure bits/wchar2.h header is installed
+  - fix __getgroups_chk return type
+
+* Thu Jul 21 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-3
+- update from CVS
+  - make sure nscd cmsg buffers aren't misaligned, handle EINTR from
+    poll when contacting nscd more gracefully
+  - remove malloc attribute from posix_memalign
+  - correctly size nscd buffer for grpcache key (#163538)
+  - fix atan2f
+  - fix error memory leaks
+  - some more _FORTIFY_SOURCE protection
+
+* Fri Jul  8 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-2
+- update from CVS
+  - ia64 stack protector support
+  - handle DNS referral results as server errors (#162625)
+  - ctan{,h}{,f,l} fixes (#160759)
+  - pass argc, argv and envp also to executable's *ni_array
+    functions (BZ#974)
+  - add ellipsis to clone prototype (#161593)
+  - fix glibc-profile (#162601)
+  - nss_compat fixes
+- use sysdeps/generic version of <bits/stdio-lock.h> in installed
+  headers instead of NPTL version (#162634)
+
+* Mon Jun 27 2005 Jakub Jelinek <jakub@redhat.com> 2.3.90-1
+- update from CVS
+  - stack protector support
+  - fix xdr_{,u_}{longlong_t,hyper} on 64-bit arches (#161583)
+- enable @GLIBC_2.4 symbols
+- remove linuxthreads
+
+* Mon Jun 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-11
+- update from CVS
+  - PPC32 -msecure-plt support
+  - support classes keyword in /etc/hesiod.conf (#150350)
+  - add RLIMIT_NICE and RLIMIT_RTPRIO to <sys/resources.h> (#157049)
+  - decrease number of .plt relocations in libc.so
+  - use -laudit in nscd (#159217)
+  - handle big amounts of networking interfaces in getifaddrs/if_nameindex
+    (#159399)
+  - fix pa_IN locale's am_pm (#158715, BZ#622)
+  - fix debugging of PIEs
+
+* Mon May 30 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-10
+- fix LD_ASSUME_KERNEL (since 2.3.5-8 GLRO(dl_osversion)
+  has been always overwritten with the version of currently
+  running kernel)
+- remove linuxthreads man pages other than those covered in
+  3p section, as 3p man pages are far better quality and describe
+  POSIX behaviour that NPTL implements (#159084)
+
+* Tue May 24 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-9
+- update from CVS
+  - increase bindresvport's LOWPORT to 512, apparently some
+    broken daemons don't think 0 .. 511 ports are reserved
+
+* Mon May 23 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-8
+- update from CVS
+  - fix kernel version check in ld.so
+- fix sendfile{,64} prototypes (BZ#961)
+- try more ports in bindresvport if all 600..1023 are
+  used, don't use priviledged ports when talking to portmap
+  (#141773)
+
+* Fri May 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-7
+- update from CVS
+  - make regexec thread safe (BZ#934)
+- fix statically linked programs on i?86, x86_64, s390* and
+  sparc* (#158027)
+- fix IBM939 iconv module (BZ#955)
+
+* Wed May  4 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-6
+- update from CVS
+  - fix cancellation on i?86
+  - add call frame information to i?86 assembly
+
+* Tue May  3 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-5
+- update from CVS
+  - add some more UTF-8 locales (#156115)
+- clean up /lib64/tls instead of /lib/tls on x86-64, s390x and
+  ppc64 in glibc_post_upgrade (#156656)
+- fix posix_fallocate{,64} (#156289)
+
+* Thu Apr 28 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-4
+- update from CVS
+  - fix nscd cache pruning (#150748)
+
+* Wed Apr 27 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-3
+- update from CVS
+  - fix linuxthreads clocks
+- put xen libs into the glibc-2*.i686 package instead of a separate one
+- fix librt.so symlink in linuxthreads-devel
+- do not include linuxthreads-devel on %%{auxarches},
+  just on the base architectures
+
+* Wed Apr 27 2005 Jakub Jelinek <jakub@redhat.com> 2.3.5-2
+- update from CVS
+  - with MALLOC_CHECK_=N N>0 (#153003)
+  - fix recursive dlclose (#154641)
+  - handle %%z in strptime (#154804)
+  - automatically append /%%{_lib}/obsolete/linuxthreads/
+    to standard library search path if LD_ASSUME_KERNEL=N N <= 2.4.19
+    or for glibc 2.0 binaries (or broken ones that don't use errno/h_errno
+    properly).  Warning: all those will stop working when LinuxThreads
+    is finally nuked, which is not very far away
+  - remove nonnull attribute from acct prototype (BZ#877)
+  - kernel CPU clocks support
+  - fix *scanf in locales with multi-byte decimal point
+
+* Wed Apr 27 2005 Roland McGrath <roland@redhat.com>
+- glibc-xen subpackage for i686
+
+* Fri Apr 15 2005 Roland McGrath <roland@redhat.com> 2.3.5-1
+- update from CVS
+  - fix execvp regression (BZ#851)
+  - ia64 libm updates
+  - sparc updates
+  - fix initstate{,_r}/strfry (#154504)
+  - grok PT_NOTE in vDSO for kernel version and extra hwcap dirs,
+    support "hwcap" keyword in ld.so.conf files
+
+* Tue Apr  5 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-21
+- update from CVS
+  - fix xdr_rmtcall_args on 64-bit arches (#151686)
+- fix <pthread.h> and <bits/libc-lock.h> with -std=c89 -fexceptions (#153774)
+
+* Mon Apr  4 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-20
+- move LinuxThreads libraries to /%%{_lib}/obsolete/linuxthreads/
+  and NPTL libraries to /%%{_lib}.  To run a program against LinuxThreads,
+  LD_ASSUME_KERNEL=2.4.xx LD_LIBRARY_PATH=/%%{_lib}/obsolete/linuxthreads/
+  is now needed
+- bzip2 ChangeLog* files instead of gzipping them
+
+* Sat Apr  2 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-19
+- update from CVS
+  - fix nextafterl and several other libm routines on ia64
+  - fix initgroups (BZ#661)
+- kill nptl-devel subpackage, add linuxthreads-devel,
+  compile and link by default against NPTL and only with
+  -I/usr/include/linuxthreads -L/usr/%%{_lib}/linuxthreads
+  against LinuxThreads
+- package /usr/lib/debug/%%{_lib}/tls/i{5,6}86 symlinks in
+  i386 glibc-debuginfo
+- limit number of ChangeLog* files in glibc-common %%doc
+  to last 2.5 years of changes only to save space
+
+* Fri Mar 25 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-18
+- fix build on 64-bit arches with new GCC
+
+* Thu Mar 24 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-17
+- update from CVS
+  - fix LD_AUDIT in LinuxThreads ld.so
+  - fix calloc with M_PERTURB
+  - fix error handling in pthread_create with PTHREAD_EXPLICIT_SCHED
+    on ppc*/ia64/alpha/mips (BZ#801)
+  - fix a typo in WINDOWS-31J charmap (#151739)
+  - fix NIS ypprot_err (#151469)
+
+* Sun Mar 20 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-16
+- fix pread with -D_FILE_OFFSET_BITS=64 (#151573)
+
+* Sat Mar 19 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-15
+- update from CVS
+  - better fix for the dlclose bug (#145810, #150414)
+  - fix regex crash on case insensitive search in zh_CN locale
+    (#151215)
+  - fix malloc_trim (BZ#779)
+  - with -D_FORTIFY_SOURCE=*, avoid defining read and a bunch of others
+    as function-like macros, there are too many broken programs
+    out there
+- add %%dir %%{_prefix}/%%{_lib}/gconv to glibc's file list (#151372)
+
+* Sun Mar  6 2005 Roland McGrath <roland@redhat.com> 2.3.4-14
+- fix bits/socket2.h macro typos
+
+* Sat Mar  5 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-12
+- fix tst-chk{2,3}
+- fix up AS_NEEDED directive in /usr/%%{_lib}/libc.so
+- BuildReq binutils >= 2.15.94.0.2-1 for AS_NEEDED, in
+  glibc-devel Conflict with binutils < 2.15.94.0.2-1
+
+* Thu Mar  3 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-11
+- update from CVS
+  - fix execvp (#149290)
+  - fix dlclose (#145810)
+  - clear padding in gconv-modules.cache (#146614, BZ#776)
+- rebuilt with GCC4
+- changed __GLIBC_MINOR__ for now back to 3
+- back out the newly added GLIBC_2.4 *_chk routines, instead
+  do the checking in macros
+
+* Sat Feb 12 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-10
+- hopefully fix interaction with prelink (#147655)
+
+* Fri Feb 11 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-9
+- update from CVS
+  - bi-arch <gnu/stubs.h> (BZ#715)
+
+* Fri Feb 11 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-8
+- update from CVS
+  - bi-arch <gnu/lib-names.h> (BZ#632)
+  - fix libdl on s390 and maybe other platforms
+  - fix initstate{,_r} (BZ#710)
+  - fix <gnu/stubs.h> generation (BZ#157)
+- define CMSPAR in bits/termios.h (#147533)
+
+* Tue Feb  8 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-7
+- update from CVS
+  - fix TLS handling in linuxthreads
+
+* Tue Feb  8 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-6
+- update from CVS
+  - ld.so auditing
+  - fix segfault if chrooted app attempts to dlopen a library
+    and no standard library directory exists at all (#147067, #144303)
+  - fix initgroups when nscd is running, but has group caching disabled
+    (#146588)
+  - fix pthread_key_{create,destroy} in LinuxThreads when pthread_create
+    has not been called yet (#146710)
+  - fix ppc64 swapcontext and setcontext (#146736, BZ#700)
+  - service nscd cosmetic fixes (#146776)
+  - fix IA-32 and x86-64 stack alignment in DSO constructors (#145689)
+  - fix zdump -v segfaults on x86-64 (#146210)
+  - avoid calling sigaction (SIGPIPE, ...) inside syslog (#146021, IT#56686)
+  - fix errno values for futimes (BZ#633)
+  - unconditionally include <features.h> in malloc.h (BZ#650)
+  - change regex \B handling to match old GNU regex as well as perl/grep's dfa
+    (from empty string inside of word to empty string not at a word boundary,
+     BZ#693)
+  - slightly optimize i686 TLS accesses, use direct TLS %%gs access in sem_*
+    and allow building -mno-tls-direct-seg-refs glibc that is free of direct TLS
+    %%gs access with negative offsets
+  - fix addseverity
+  - fix fmemopen
+  - fix rewinddir
+  - increase svc{tcp,unix}_create listen backlog
+
+* Thu Jan  6 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-5
+- update from CVS
+  - add some warn_unused_result marking
+  - make ftruncate available even for just -D_POSIX_C_SOURCE=200112L
+    (BZ#640)
+
+* Thu Jan  6 2005 Jakub Jelinek <jakub@redhat.com> 2.3.4-4
+- update from CVS
+  - fix IA-32 stack alignment for LinuxThreads thread functions
+    and functions passed to clone(2) directly
+  - fix ecvt{,_r} on denormals (#143279)
+  - fix __tls_get_addr typo
+  - fix rounding in IA-64 alarm (#143710)
+  - don't reinitialize __environ in __libc_start_main, so that
+    effects of setenv/putenv done in DSO initializers are preserved
+    (#144037, IT#57403)
+  - fix fmemopen
+  - fix vDSO l_map_end and l_text_end values
+  - IA64 libm update (#142494)
+- fix ppc rint/ceil etc. (BZ#602)
+
+* Tue Dec 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.4-3
+- rebuilt
+
+* Mon Dec 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.4-2
+- work around rpm bug some more, this time by copying
+  iconvconfig to iconvconfig.%%{_target_cpu}.
+
+* Mon Dec 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.4-1
+- update from CVS
+  - glibc 2.3.4 release
+  - add -o and --nostdlib options to iconvconfig
+- if /sbin/ldconfig doesn't exist when running
+  glibc_post_upgrade.%%{_target_cpu}, just don't attempt to run it.
+  This can happen during first install of bi-arch glibc and the
+  other arch glibc's %%post wil run /sbin/ldconfig (#143326)
+- use -o and --nostdlib options to create all needed
+  gconv-modules.cache files on bi-arch setups
+
+* Sun Dec 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-99
+- rebuilt
+
+* Sat Dec 18 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-98
+- add .%%{_target_cpu} to glibc_post_upgrade, only run telinit u
+  if /sbin/init is the same ELF class and machine as
+  glibc_post_upgrade.%%{_target_cpu} and similarly with
+  condrestarting sshd (#143046)
+
+* Fri Dec 17 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-97
+- update from CVS
+  - fix ppc64 getcontext and swapcontext (BZ#610)
+  - sparc/sparc64 fixes
+
+* Wed Dec 15 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-96
+- update from CVS
+  - fix i686 __USE_STRING_INLINES strncat
+  - make sure ppc/ppc64 maintain correct stack alignment
+    across clone
+
+* Wed Dec 15 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-95
+- export nis_domain_of_r from libnsl.so again which was
+  unintentionally lost
+
+* Wed Dec 15 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-93
+- update from CVS
+  - ppc/ppc64 clone without CLONE_THREAD getpid () adjustement
+  - fix MALLOC_CHECK_={1,2,3} for non-contiguous main arena
+    (BZ#457)
+  - fix sysconf (_POSIX_V6_*) for other ABI environments in
+    bi-arch setups
+- s390/s390x clone without CLONE_THREAD getpid () adjustement
+
+* Tue Dec 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-92
+- update from CVS
+- fix %%{_prefix}/libexec/getconf filenames generation
+
+* Tue Dec 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-91
+- update from CVS
+  - double buffer size in getXXbyYY or getXXent on ERANGE
+    instead of adding BUFLEN (#142617)
+  - avoid busy loop in malloc if another thread is doing fork
+    (#142214)
+  - some more realloc corruption checks
+  - fix getconf _POSIX_V6_WIDTH_RESTRICTED_ENVS output,
+    tweak %%{_prefix}/libexec/getconf/ filenames
+
+* Fri Dec 10 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-90
+- update from CVS
+  - regex speedups
+  - use | cat in ldd if running under bash3+ to allow running
+    it on binaries that are not through SELinux allowed to access
+    console or tty
+- add __NR_waitid defines for alpha and ia64
+
+* Wed Dec  8 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-89
+- update from CVS
+  - fix clone2 on ia64
+  - avoid tst-timer5 failing with linuxthreads implementation
+- if __libc_enable_secure, disallow mode != normal
+- change ldd script to imply -r when -u is used, properly
+  propagate return value and handle suid binaries
+
+* Tue Dec  7 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-88
+- update from CVS
+  - disregard LD_SHOW_AUXV and LD_DYNAMIC_WEAK if __libc_enable_secure
+  - disregard LD_DEBUG if __libc_enable_secure in normal mode
+    if /suid-debug doesn't exist
+  - fix fseekpos after ungetc
+  - avoid reading bytes before start of buffers in regex's
+    check_dst_limits_calc_pos_1 (#142060)
+  - make getpid () working with clone/clone2 without CLONE_THREAD
+    (so far on i386/x86_64/ia64 only)
+- move %%{_prefix}/libexec/getconf/* to glibc from glibc-common
+- make %%{_prefix}/libexec/getconf directory owned by glibc package
+
+* Fri Dec  3 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-87
+- update from CVS
+  - build libpthread_nonshared.a objects with -fPIC on s390/s390x
+  - fix mktime with < 0 or > 59 tm_sec on entry
+  - remove nonnull attribute for realpath
+  - add $(make-target-directory) for errlist-compat.c rule
+    (hopefully fix #141404)
+- add testcase for ungetc bug
+- define _POSIX_{,THREAD_}CPUTIME to 0 on all Linux arches
+
+* Tue Nov 30 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-86
+- update from CVS
+  - some posix_opt.h fixes
+- fix strtold use of unitialized memory (#141000)
+- some more bugfixes for bugs detected by valgrind
+- rebuilt with GCC >= 3.4.3-5 to avoid packed stack layout
+  on s390{,x} (#139678)
+
+* Fri Nov 26 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-85
+- update from CVS
+  - support -v specification in getconf
+  - fix sysconf (_SC_LFS64_CFLAGS) etc.
+  - avoid thread stack aliasing issues on EM64T (#140803)
+- move %%{_prefix}/include/nptl headers from nptl-devel
+  to glibc-headers, so that even NPTL specific programs
+  can be built bi-arch without problems
+
+* Wed Nov 24 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-84
+- update from CVS
+  - fix memory leak in getaddrinfo if using nscd (#139559)
+  - handle large lines in /etc/hosts and /etc/networks
+    (#140378)
+  - add nonnull attributes to selected dirent.h and dlfcn.h
+    functions
+
+* Sun Nov 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-83
+- update from CVS
+  - add deprecated and/or nonnull attribute to some signal.h
+    functions
+  - speed up tzset () by only using stat instead of open/fstat
+    when calling tzset for the second and following time if
+    /etc/localtime has not changed
+- fix tgamma (BZ #552)
+
+* Sat Nov 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-82
+- update from CVS
+  - some malloc () checking
+  - libpthread.a object dependency cleanups (#115157)
+  - <bits/socket.h> fix for -std=c89 -pedantic-errors (#140132)
+
+* Fri Nov 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-81
+- don't use chunksize in <= 2 * SIZE_SZ free () checks
+
+* Fri Nov 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-80
+- update from CVS
+  - with -D_FORTIFY_SOURCE=2, prevent missing %%N$ formats
+  - for -D_FORTIFY_SOURCE=2 and %%n in writable format string,
+    issue special error message instead of using the buffer overflow
+    detected one
+  - speedup regex searching with REG_NOSUB, add RE_NO_SUB,
+    speedup searching with nested subexps (BZ #544)
+  - block SIGCANCEL in NPTL timer_* helper thread
+- further free () checking
+
+* Tue Nov 16 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-79
+- update from CVS
+- fix free () checking
+- move /etc/default/nss into glibc-common (hopefully fix #132392)
+
+* Mon Nov 15 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-78
+- update from CVS
+  - fix LD_DEBUG=statistics
+  - issue error message before aborting in __chk_fail ()
+- some more free () checking
+
+* Fri Nov 12 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-77
+- update from CVS
+  - speedup regex on palindromes (BZ #429)
+  - fix NPTL set{,e,re,res}[ug]id, so that even if making process
+    less priviledged all threads change their credentials successfully
+
+* Wed Nov 10 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-76
+- update from CVS
+  - fix regcomp crash (#138439)
+  - fix ftell{,o,o64} (#137885)
+  - robustification of nscd to cope with corrupt databases (#137140)
+  - fix NPTL with pthread_exit immediately after pthread_create (BZ #530)
+  - some regex optimizations
+
+* Tue Nov  2 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-75
+- update from CVS
+  - mktime cleanups (BZ #487, #473)
+  - unique comments in free(3) check error messages
+- adjust some x86_64 headers for -m32 (#129712)
+- object size checking support even with GCC-3.4.2-RH >= 3.4.2-8
+
+* Wed Oct 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-74
+- fix <netinet/udp.h> header
+- fix globfree (#137176)
+- fix exiting if there are dlmopened libraries in namespaces
+  other than main one not closed yet
+- export again _res_opcodes and __p_{class,type}_syms from
+  libresolv.so that were lost in -69
+
+* Thu Oct 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-73
+- remove setaltroot and key{_add,_request,ctl} also from Versions
+- back out _sys_errlist changes
+
+* Thu Oct 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-72
+- back out setaltroot and key{_add,_request,ctl} addition
+- fix severe x86-64 symbol versioning regressions that breaks
+  e.g. java binaries
+
+* Wed Oct 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-71
+- update from CVS
+  - fix minor catchsegv temp file handling vulnerability
+    (CAN-2004-0968, #136319)
+  - add 4 new errno codes
+  - setaltroot, key{_add,_request,ctl} syscalls on some arches
+  - export _dl_debug_state@GLIBC_PRIVATE from ld.so again for
+    gdb purpose
+  - use inet_pton to decide what is address and what is hostname
+    in getent (#135422)
+  - change dladdr/dladdr1, so that dli_saddr is the same kind
+    of value as dlsym/dlvsym return (makes difference on ia64/hppa only)
+  - fix catchsegv script so that it works with both 32-bit and 64-bit
+    programs on multi-arch platforms
+
+* Tue Oct 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-70
+- update from CVS
+- require newer selinux-policy (#135978)
+- add %%dir for /var/run/nscd and /var/db/nscd and %%ghost
+  files in it
+- conflict with gcc4 4.0.0-0.6 and earlier (needs __builtin_object_size)
+
+* Mon Oct 18 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-69
+- update from CVS
+  - object size checking support (-D_FORTIFY_SOURCE={1,2})
+
+* Thu Oct 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-68
+- update from CVS
+  - support for namespaces in the dynamic linker
+  - fix dlclose (BZ #77)
+  - libSegFault.so uses now backtrace() to work on IA-64, x86-64
+    and s390 (#130254)
+
+* Tue Oct 12 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-67
+- update from CVS
+  - use non-blocking sockets in resolver (#135234)
+  - reset pd->res options on thread exit, so that threads
+    reusing cached stacks get resolver state properly initialized
+    (BZ #434)
+
+* Wed Oct  6 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-66
+- update from CVS
+- avoid using perl in the spec file, buildrequire sed >= 3.95
+  (#127671)
+- export TIMEOUTFACTOR=16
+- fix _JMPBUF_CFA_UNWINDS_ADJ on s390{,x}
+
+* Tue Oct  5 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-65
+- update from CVS
+  - define _POSIX_THREAD_PROCESS_SHARED and _POSIX_CLOCK_SELECTION
+    to -1 in LinuxThreads
+  - define _POSIX_CPUTIME and _POSIX_THREAD_CPUTIME to 0
+    on i?86/ia64 and make sure sysconf (_SC_{,THREAD_}CPUTIME)
+    returns correct value
+- if _POSIX_CLOCK_SELECTION == -1 in nscd, still try
+  sysconf (_SC_CLOCK_SELECTION) and if it returns true,
+  dlopen libpthread.so and dlsym pthread_condattr_setclock
+- build nscd with -z relro and -z now
+
+* Mon Oct  4 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-64
+- update from CVS
+  - stop using __builtin_expect in assert and assert_perror
+    (#127606)
+  - try to avoid too much VA fragmentation with malloc
+    on flexmap layout (#118574)
+  - nscd robustification
+  - change valloc to use debugging hooks (#134385)
+- make glibc_post_upgrade more verbose on errors (Fergal Daly,
+  #125700)
+
+* Fri Oct  1 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-63
+- update from CVS
+  - fix __nscd_getgrouplist
+  - fix a typo in x86_64 pthread_mutex_timedwait fix
+
+* Fri Oct  1 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-62
+- update from CVS
+  - fix NPTL pthread_mutex_timedwait on i386/x86_64 (BZ #417)
+
+* Thu Sep 30 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-61
+- update from CVS
+  - some nscd fixes (#134193)
+  - cache initgroups in nscd (#132850)
+  - reread /etc/localtime in tzset () even if just mtime changed
+    (#133481)
+  - fix glob (#126460)
+  - another get_myaddress fix
+
+* Wed Sep 29 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-60
+- update from CVS
+  - fix get_myaddress (#133982)
+  - remove nonnull attribute from second utime argument (#133866)
+  - handle SIGSETXID the same way as SIGCANCEL in
+    sigaction/pthread_kill/sigwait/sigwaitinfo etc.
+  - add __extension__ to long long types in NPTL <bits/pthreadtypes.h>
+
+* Mon Sep 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-59
+- update from CVS
+  - fix BZ #151, #362, #381, #407
+  - fdim fix for +inf/+inf (BZ #376)
+
+* Sun Sep 26 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-58
+- update from CVS
+  - vasprintf fix (BZ #346)
+  - gettext locking (BZ #322)
+- change linuxthreads useldt.h inclusion login again, the last
+  one failed all linuxthreads FLOATING_STACKS tests
+
+* Sat Sep 25 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-57
+- update from CVS
+  - fix setuid in LD_ASSUME_KERNEL=2.2.5 libc (#133558)
+  - fix nis locking (#132204)
+  - RTLD_DEEPBIND support
+  - fix pthread_create bugs (BZ #401, #405)
+
+* Wed Sep 22 2004 Roland McGrath <roland@redhat.com> 2.3.3-56
+- migrated CVS to fedora-branch in sources.redhat.com glibc repository
+  - source tarballs renamed
+  - redhat/ moved to fedora/, some old cruft removed
+- update from trunk
+  - some __nonnull annotations
+
+* Wed Sep 22 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-55
+- update from CVS
+  - set{re,e,res}[ug]id now affect the whole process in NPTL
+  - return EAGAIN instead of ENOMEM when not enough memory
+    in pthread_create
+
+* Fri Sep 17 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-54
+- update from CVS
+  - nscd getaddrinfo caching
+
+* Tue Sep 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-53
+- restore temporarily old definition of __P()/__PMT()
+  for third party apps
+
+* Tue Sep 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-52
+- update from CVS
+  - nscd bi-arch fix
+  - remove all uses of __P()/__PMT() from glibc headers
+- update and reenable nscd SELinux patch
+- remove libnss1* and libnss*.so.1 compatibility NSS modules
+  on IA-32, SPARC and Alpha
+
+* Fri Sep 10 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-51
+- update from CVS
+  - disable one of the malloc double free checks for non-contiguous
+    arenas where it doesn't have to be true even for non-broken
+    apps
+
+* Thu Sep  9 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-50
+- update from CVS
+  - pwd/grp/host loops with nscd speed up by sharing the
+    nscd cache r/o with applications
+  - inexpensive double free check in free(3)
+  - make NPTL pthread.h initializers usable even from C++
+    (BZ #375)
+- use atomic instructions even in i386 nscd on i486+ CPUs
+  (conditionally)
+
+* Fri Sep  3 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-49
+- update from CVS
+- fix linuxthreads tst-cancel{[45],-static}
+
+* Fri Sep  3 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-48
+- update from CVS
+  - fix pthread_cond_destroy (BZ #342)
+  - fix fnmatch without FNM_NOESCAPE (BZ #361)
+  - fix ppc32 setcontext (BZ #357)
+- add NPTL support for i386 glibc (only if run on i486 or higher CPU)
+- add __NR_waitid defines for i386, x86_64 and sparc*
+
+* Tue Aug 31 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-47
+- update from CVS
+  - persistent nscd caching
+  - ppc64 32-bit atomicity fix
+  - fix x86-64 nptl-devel headers for -m32 compilation
+- %%ghost /etc/ld.so.cache (#130597)
+- edit /etc/ld.so.conf in glibc_post_upgrade if
+  include ld.so.conf.d/*.conf line is missing (#120588)
+- ugly hacks for the IA-64 /emul braindamage (#124996, #128267)
+
+* Sat Aug 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-46
+- update from CVS
+
+* Thu Aug 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-45
+- update from CVS
+  - fix nss_compat's initgroups handling (#130363)
+  - fix getaddrinfo ai_canonname setting
+
+* Thu Aug 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-44
+- update from CVS
+  - add ip6-dotint resolv.conf option, make
+    no-ip6-dotint the default
+- BuildPrereq libselinux-devel (#129946)
+- on ppc64, build without dot symbols
+
+* Thu Aug 12 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-43
+- update from CVS
+  - remove debugging printout (#129747)
+  - make <sys/shm.h> usable in C++ (IT#45148)
+- update RLIMIT_* constants in <bits/resource.h>, make
+  <sys/resource.h> POSIX compliant (#129740)
+
+* Wed Aug 11 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-42
+- fix last tzset () fixes, disable rereading of /etc/localtime
+  every time for now
+- really enable SELinux support for NSCD
+
+* Wed Aug 11 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-41
+- update from CVS
+  - fread_unlocked/fwrite_unlocked macro fixes (BZ #309, #316)
+  - tzset () fixes (BZ #154)
+- speed up pthread_rwlock_unlock on arches other than i386 and
+  x86_64 (#129455)
+- fix compilation with -ansi (resp. -std=c89 or -std=c99) and
+  -D_XOPEN_SOURCE=[56]00 but no -D_POSIX_SOURCE* or -D_POSIX_C_SOURCE*
+  (BZ #284)
+- add SELinux support for NSCD
+
+* Fri Aug  6 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-40
+- update from CVS
+  - change res_init to force all threads to re-initialize
+    resolver before they use it next time (#125712)
+  - various getaddrinfo and related fixes (BZ #295, #296)
+  - fix IBM{932,943} iconv modules (#128674)
+  - some nscd fixes (e.g. BZ #292)
+  - RFC 3678 support (Multicast Source Filters)
+- handle /lib/i686/librtkaio-* in i386 glibc_post_upgrade
+  the same as /lib/i686/librt-*
+
+* Fri Jul 23 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-39
+- update from CVS
+  - conformance related changes in headers
+- remove -finline-limit=2000 for GCC 3.4.x+
+
+* Thu Jul 22 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-38
+- update from CVS
+  - fix res_init leaks
+  - fix newlocale races
+  - fix ppc64 setjmp
+- fix strtold (BZ #274)
+
+* Fri Jul 16 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-37
+- update from CVS
+  - allow pthread_cancel in DSO destructors run at exit time
+- fix pow{f,,l} on IA-32 and powl on x86-64
+- allow PIEs on IA-32 to have main in a shared library they depend on
+
+* Mon Jul  5 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-36
+- s390* .plt slot reduction
+- fix pthread_rwlock_timedrdlock on x86_64
+
+* Wed Jun 30 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-35
+- tweak spec file for the libpthread-0.61.so -> libpthread-2.3.3.so
+  NPTL changes
+
+* Wed Jun 30 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-34
+- update from CVS
+  - if_nameindex using preferably netlink
+  - printf_parsemb initialization fix
+  - NPTL version is now the same as glibc version
+
+* Mon Jun 28 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-33
+- update from CVS
+  - reread resolv.conf for nscd --invalidate=hosts
+  - fix F_GETLK/F_SETLK/F_SETLKW constants on x86_64 for
+    -m32 -D_FILE_OFFSET_BITS=64 compilations
+  - avoid calling non-existing fcntl64 syscall on ppc64
+
+* Mon Jun 14 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-32
+- update from CVS
+  - FUTEX_CMP_REQUEUE support (fix pthread_cond_* deadlocks)
+  - fix backtrace in statically linked programs
+- rebuilt with GCC 3.4, adjusted ulps and i386 <bits/string.h>
+
+* Fri May 28 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-31
+- update from CVS
+- <bits/string2.h> and <bits/mathinline.h> changes for GCC 3.{2,4,5}+
+- make c_stubs buildable even with GCC 3.2.x (#123042)
+
+* Fri May 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-30
+- fix pthread_cond_wait on architectures other than IA-32 and
+  x86_64
+
+* Thu May 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-29
+- use lib64 instead of lib on ia64 if %%{_lib} is defined to lib64
+
+* Wed May 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-28
+- update from CVS
+  - FUTEX_REQUEUE fixes (#115349)
+  - SPARC GCC 3.4 build fix
+  - fix handling of undefined TLS symbols on IA32 (RELA only),
+    SPARC and SH
+  - regex translate fix
+  - speed up sprintf
+  - x86_64 makecontext alignment fix
+  - make POSIX sigpause the default sigpause, unless BSD sigpause
+    requested
+
+* Tue May 11 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-27
+- remove /lib64/tls/librtkaio-2.3.[23].so in glibc_post_upgrade
+  on x86-64, s390x and ppc64 instead of /lib/tls/librtkaio-2.3.[23].so
+- build mq_{send,receive} with -fexceptions
+
+* Fri May  7 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-26
+- update from CVS
+  - fix <tgmath.h>
+  - fix memory leaks in nis, getifaddrs, etc. caused by incorrect
+    use of realloc
+- remove /lib/{tls,i686}/librtkaio-2.3.[23].so in glibc_post_upgrade
+  and rerun ldconfig if needed, otherwise after glibc upgrade librt.so.1
+  might be a stale symlink
+
+* Wed May  5 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-25
+- update from CVS
+- disable FUTEX_REQUEUE (work around #115349)
+- mq for sparc/sparc64/ia64
+
+* Tue May  4 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-24
+- update from CVS
+  - define S_ISSOCK in -D_XOPEN_SOURCE=600 and S_I[FS]SOCK
+    plus F_[SG]ETOWN also in -D_XOPEN_SOURCE=500 (both
+    included already in XNS5)
+  - reorder dlopen checks, so that dlopening ET_REL objects
+    complains about != ET_DYN != ET_EXEC, not about phentsize
+    (#121606)
+  - fix strpbrk macro for GCC 3.4+ (BZ #130)
+  - fix <sys/sysctl.h> (BZ #140)
+  - sched_[gs]etaffinity documentation fix (BZ #131)
+  - fix sparc64 build (BZ #139)
+  - change linuxthreads back to use non-cancellable writes
+    to manager pipes etc.
+  - fix sem_timedwait return value in linuxthreads (BZ #133)
+  - ia64 unnecessary PLT relocs removal
+
+* Thu Apr 22 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-23
+- update from CVS
+  - fix *scanf
+  - fix shm_unlink, sem_unlink and mq_unlink errno values
+  - avoid memory leaks in error
+  - execstack fixes on s390
+
+* Mon Apr 19 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-22
+- update from CVS
+  - mq and timer fixes
+- rebuilt with binutils >= 2.15.90.0.3-2 to fix IA-64 statically
+  linked binaries
+- fix linuxthreads librt.so on s390{,x}, so it is no longer DT_TEXTREL
+
+* Sat Apr 17 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-21
+- disable rtkaio
+- update from CVS
+  - POSIX message passing support
+  - fixed SIGEV_THREAD support for POSIX timers
+  - fix free on non-malloced memory in syslog
+  - fix ffsl on some 64-bit arches
+  - fix sched_setaffinity on x86-64, ia64
+  - fix ppc64 umount
+  - NETID_AUTHORITATIVE, SERVICES_AUTHORITATIVE support
+  - various NIS speedups
+  - fix fwrite with > 2GB sizes on 64-bit arches
+  - fix pthread_getattr_np guardsize reporting in NPTL
+- report PLT relocations in ld.so and libc.so during the build
+
+* Thu Mar 25 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-20
+- update from CVS
+  - change NPTL PTHREAD_MUTEX_ADAPTIVE_NP mutexes to spin on SMP
+  - strtol speed optimization
+  - don't try to use certainly unimplemented syscalls on ppc64
+- kill -debug subpackage, move the libs to glibc-debuginfo{,-common}
+  into /usr/lib/debug/usr/%%{_lib}/ directory
+- fix c_stubs with gcc 3.4
+- move all the up to 3 builds into %%build scriptlet and
+  leave only installation in the %%install scriptlet
+
+* Mon Mar 22 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-19
+- update from CVS
+  - affinity API changes
+
+* Thu Mar 18 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-18
+- update from CVS
+  - fix ia64 iopl (#118591)
+  - add support for /etc/ld.so.conf.d/*.conf
+  - fix x86-64 LD_DEBUG=statistics
+- fix hwcap handling when using ld.so.cache (#118518)
+
+* Mon Mar 15 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-17
+- update from CVS
+  - implement non-_l function on top of _l functions
+
+* Thu Mar 11 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-16
+- update from CVS
+- fix s390{,x} TLS handling
+
+* Wed Mar 10 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-15
+- update from CVS
+  - special section for compatibility code
+  - make getpid () work even in vfork () child
+- configure with --enable-bind-now to avoid lazy binding in ld.so
+  and libc.so
+
+* Fri Mar  5 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-14
+- update from CVS
+  - fix iconv -c (#117021)
+  - fix PIEs on sparc/sparc64
+  - fix posix_fadvise on 64-bit architectures
+- add locale-archive as %%ghost file (#117014)
+
+* Mon Mar  1 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-13
+- update from CVS
+
+* Fri Feb 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-12
+- update from CVS
+
+* Fri Feb 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-11
+- update from CVS
+  - fix ld.so when vDSO is randomized
+
+* Fri Feb 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-10
+- update from CVS
+
+* Fri Feb 20 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-9
+- update from CVS
+
+* Tue Feb 10 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-8
+- update from CVS
+
+* Tue Jan 27 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-7
+- update from CVS
+  - dl_iterate_phdr extension to signal number of added/removed
+    libraries
+- fix PT_GNU_RELRO support on ppc* with prelinking
+
+* Fri Jan 23 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-6
+- rebuilt with fixed GCC on IA-64
+
+* Thu Jan 22 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-5
+- fix PT_GNU_RELRO support
+
+* Wed Jan 21 2004 Jakub Jelinek <jakub@redhat.com> 2.3.3-4
+- update from CVS
+  - some further regex speedups
+  - fix re.translate handling in regex (#112869)
+  - change regfree to match old regex behaviour (what is freed
+    and clearing of freed pointers)
+  - fix accesses to unitialized memory in regex (#113507, #113425,
+    #113421)
+  - PT_GNU_RELRO support
+
+* Tue Dec 30 2003 Jakub Jelinek <jakub@redhat.com> 2.3.3-3
+- update from CVS
+  - fix pmap_set fd and memory leak (#112726)
+- fix backreference handling in regex
+- rebuilt under glibc without the above bug to fix
+  libc.so linker script (#112738)
+
+* Mon Dec 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.3-2
+- update from CVS
+  - faster getpid () in NPTL builds
+  - fix to make pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, )
+    really disable cancellation (#112512)
+  - more regex fixes and speedups
+  - fix nextafter*/nexttoward*
+  - handle 6th syscall(3) argument on AMD64
+  - handle memalign/posix_memalign in mtrace
+  - fix linuxthreads memory leak (#112208)
+  - remove throw () from cancellation points in linuxthreads (#112602)
+  - fix NPTL unregister_atfork
+  - fix unwinding through alternate signal stacks
+
+* Mon Dec  1 2003 Jakub Jelinek <jakub@redhat.com> 2.3.3-1
+- update from CVS
+  - 2.3.3 release
+  - lots of regex fixes and speedups (#110401)
+  - fix atan2
+  - fix pshared condvars in NPTL
+  - fix pthread_attr_destroy for attributes created with
+    pthread_attr_init@GLIBC_2.0
+- for the time being, include both nb_NO* and no_NO* as locales
+  so that the distribution can catch up with the no_NO->nb_NO
+  transition
+- add BuildPrereq texinfo (#110252)
+
+* Tue Nov 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-102
+- update from CVS
+  - fix getifaddrs (CAN-2003-0859)
+  - fix ftw fd leak
+  - fix linuxthreads sigaction (#108634)
+  - fix glibc 2.0 stdio compatibility
+  - fix uselocale (LC_GLOBAL_LOCALE)
+  - speed up stdio locking in non-threaded programs on IA-32
+  - try to maintain correct order of cleanups between those
+    registered with __attribute__((cleanup))
+    and with LinuxThreads style pthread_cleanup_push/pop (#108631)
+  - fix segfault in regex (#109606)
+  - fix RE_ICASE multi-byte handling in regex
+  - fix pthread_exit in libpthread.a (#109790)
+  - FTW_ACTIONRETVAL support
+  - lots of regex fixes and speedups
+  - fix ceill/floorl on AMD64
+
+* Mon Oct 27 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-101
+- update from CVS
+  - fix ld.so --verify (and ldd)
+
+* Mon Oct 27 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-100
+- update from CVS
+  - fix sprof (#103727)
+  - avoid infinite loops in {,f}statvfs{,64} with hosed mounts file
+  - prevent dlopening of executables
+  - fix glob with GLOB_BRACE and without GLOB_NOESCAPE
+  - fix locale printing of word values on 64-bit big-endian arches
+    (#107846)
+  - fix getnameinfo and getaddrinfo with reverse IPv6 lookups
+    (#101261)
+
+* Wed Oct 22 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-99
+- update from CVS
+  - dl_iterate_phdr in libc.a on arches other than IA-64
+  - LD_DEBUG=statistics prints number of relative relocations
+  - fix hwcap computation
+- NPTL is now part of upstream glibc CVS
+- include {st,xh,zu}_ZA{,.UTF-8} locales
+
+* Sat Oct  4 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-98
+- update from CVS
+  - fix close, pause and fsync (#105348)
+  - fix pthread_once on IA-32
+- implement backtrace () on IA-64, handle -fomit-frame-pointer
+  in AMD64 backtrace () (#90402)
+
+* Tue Sep 30 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-97
+- update from CVS
+  - fix <sys/sysmacros.h> with C++ or -ansi or -pedantic C
+  - fix mknod/ustat return value when given bogus device number (#105768)
+
+* Fri Sep 26 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-96
+- rebuilt
+
+* Fri Sep 26 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-95
+- fix IA-64 getcontext
+
+* Thu Sep 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-94
+- update from CVS
+- fix syslog with non-C non-en_* locales (#61296, #104979)
+- filter GLIBC_PRIVATE symbols from glibc provides
+- fix NIS+
+
+* Thu Sep 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-93
+- update from CVS
+- assume 2.4.21 kernel features on RHEL/ppc*, so that
+  {make,set,get,swap}context works
+- backout execstack support for RHEL
+- build rtkaio on amd64 too
+
+* Wed Sep 24 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-92
+- update from CVS
+  - execstack/noexecstack support
+  - build nscd as PIE
+- move __libc_stack_end back to @GLIBC_2.1
+- build against elfutils >= 0.86 to fix stripping on s390x
+
+* Mon Sep 22 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-91
+- rebuilt
+
+* Mon Sep 22 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-90
+- update from CVS
+  - NPTL locking change (#102682)
+- don't jump around lock on amd64
+
+* Thu Sep 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-89
+- fix open_memstream/syslog (#104661)
+
+* Thu Sep 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-88
+- update from CVS
+  - retrieve affinity in pthread_getattr_np
+  - fix pthread_attr_[gs]etaffinity_np
+  - handle hex and octal in wordexp
+
+* Wed Sep 17 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-87
+- update from CVS
+  - truncate instead of round in utimes when utimes syscall is not available
+  - don't align stack in every glibc function unnecessarily on IA-32
+  - make sure threads have their stack 16 byte aligned on IA-32
+  - move sched_[sg]etaffinity to GLIBC_2.3.3 symbol version (#103231)
+  - fix pthread_getattr_np for the initial thread (#102683)
+  - avoid linuxthreads signal race (#104368)
+- ensure all gzip invocations are done with -n option
+
+* Fri Sep 12 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-86
+- update from CVS
+- avoid linking in libgcc_eh.a unnecessarily
+- change ssize_t back to long int on s390 -m31, unless
+  gcc 2.95.x is used
+
+* Wed Sep 10 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-85
+- update from CVS
+  - fix IA-64 memccpy (#104114)
+
+* Tue Sep  9 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-84
+- update from CVS
+  - undo broken amd64 signal context changes
+
+* Tue Sep  9 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-83
+- update from CVS
+- change *nlink_t, *ssize_t and *intptr_t types on s390 -m31 to
+  {unsigned,} int
+- change *u_quad_t, *quad_t, *qaddr_t, *dev_t, *ino64_t, *loff_t,
+  *off64_t, *rlim64_t, *blkcnt64_t, *fsblkcnt64_t, *fsfilcnt64_t
+  on 64-bit arches from {unsigned,} long long int {,*} to
+  {unsigned,} long int {,*} to restore binary compatibility
+  for C++ functions using these types as arguments
+
+* Sun Sep  7 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-82
+- rebuilt
+
+* Sat Sep  6 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-81
+- update from CVS
+  - fix tc[gs]etattr/cf[gs]et[io]speed on ppc (#102732)
+  - libio fixes
+
+* Thu Sep  4 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-80
+- update from CVS
+  - fix IA-64 cancellation when mixing __attribute__((cleanup ()))
+    and old-style pthread_cleanup_push cleanups
+
+* Tue Sep  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-79
+- updated from CVS
+  - lots of cancellation fixes
+  - fix posix_fadvise* on ppc32
+  - TLS layout fix
+  - optimize stdio cleanups (#103354)
+  - sparcv9 NPTL
+  - include sigset, sighold, sigrelse, sigpause and sigignore prototypes
+    in signal.h even if -D_XOPEN_SOURCE_EXTENDED (#103269)
+  - fix svc_getreqset on 64-bit big-endian arches
+  - return ENOSYS in linuxthreads pthread_barrierattr_setpshared for
+    PTHREAD_PROCESS_SHARED
+  - add pthread_cond_timedwait stubs to libc.so (#102709)
+- split glibc-devel into glibc-devel and glibc-headers to ensure
+  amd64 /usr/include always wins on amd64/i386 bi-arch installs
+- increase PTHREAD_STACK_MIN on alpha, ia64 and sparc*
+- get rid of __syscall_* prototypes and stubs in sysdeps/unix/sysv/linux
+- run make check also with linuxthreads (on IA-32 non-FLOATING_STACKS)
+  ld.so and NPTL (on IA-32 also FLOATING_STACKS linuxthreads) libraries
+  and tests
+
+* Mon Aug 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-78
+- include dl-osinfo.h only in glibc-debuginfo-2*.rpm, not
+  in glibc-debuginfo-common*
+
+* Mon Aug 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-77
+- update from CVS
+  - fix glibc 2.0 libio compatibility (#101385)
+  - fix ldconfig with /usr/lib/lib*.so symlinks (#102853)
+  - fix assert.h (#102916, #103017)
+  - make ld.so.cache identical between IA-32 and AMD64 (#102887)
+  - fix static linking of large IA-64 binaries (#102586)
+- avoid using floating point regs in lazy binding code on ppc64 (#102763)
+
+* Fri Aug 22 2003 Roland McGrath <roland@redhat.com> 2.3.2-76
+- add td_thr_tls_get_addr changes missed in initial nptl_db rewrite
+
+* Sun Aug 17 2003 Roland McGrath <roland@redhat.com> 2.3.2-74
+- nptl_db rewrite not yet in CVS
+
+* Thu Aug 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-72
+- update from CVS
+  - fix rtkaio aio_fsync{,64}
+  - update rtkaio for !BROKEN_THREAD_SIGNALS
+  - fix assert macro when used on pointers
+
+* Wed Aug 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-71
+- update from CVS
+
+* Tue Aug 12 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-70
+- update from CVS
+- disable CLONE_STOPPED for now until it is resolved
+- strip crt files
+- fix libio on arches with no < GLIBC_2.2 support (#102102, #102105)
+- fix glibc-debuginfo to include all nptl and nptl_db sources
+
+* Thu Aug  7 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-69
+- update from CVS
+  - fix pthread_create@GLIBC_2.0 (#101767)
+- __ASSUME_CLONE_STOPPED on all arches but s390* in RHEL
+
+* Sun Aug  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-68
+- update from CVS
+  - only use CLONE_STOPPED if kernel supports it, fix setting of thread
+    explicit scheduling (#101457)
+
+* Fri Aug  1 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-67
+- update from CVS
+  - fix utimes and futimes if kernel doesn't support utimes syscall
+  - fix s390 ssize_t type
+  - fix dlerror when called before any dlopen/dlsym
+  - update IA-64 bits/sigcontext.h (#101344)
+  - various warning fixes
+  - fix pthread.h comment typos (#101363)
+
+* Wed Jul 30 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-66
+- update from CVS
+- fix dlopen of libraries using TLS IE/LE models
+
+* Tue Jul 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-65
+- update from CVS
+  - fix timer_create
+  - use __extension__ before long long typedefs in <bits/types.h> (#100718)
+
+* Mon Jul 28 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-64
+- update from CVS
+  - fix wcpncpy (#99462)
+  - export _res@GLIBC_2.0 even from NPTL libc.so (__res_state ()
+    unlike __errno_location () or __h_errno_location () was introduced
+    in glibc 2.2)
+  - fix zic bug on 64-bit platforms
+  - some TLS handling fixes
+  - make ldconfig look into alternate ABI dirs by default (#99402)
+- move %%{_datadir}/zoneinfo to tzdata package, so that it can be
+  errataed separately from glibc
+- new add-on - rtkaio
+- prereq libgcc, as glibc now relies on libgcc_s.so.1 for pthread_cancel
+
+* Tue Jul 15 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-63
+- fix thread cancellation on ppc64
+
+* Sat Jul 12 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-62
+- update from CVS
+  - fix thread cancellation on ppc32, s390 and s390x
+
+* Thu Jul 10 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-61
+- update from CVS
+  - build libc_nonshared.a with -fPIC instead of -fpic
+- fix ppc64 PIE support
+- add cfi directives to NPTL sysdep-cancel.h on ppc/ppc64/s390/s390x
+
+* Tue Jul  8 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-60
+- update from CVS
+
+* Thu Jul  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-59
+- update from CVS
+- on IA-64 use different symbols for cancellation portion of syscall
+  handlers to make gdb happier
+
+* Thu Jun 26 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-58
+- update from CVS
+  - nss_compat supporting LDAP etc.
+
+* Tue Jun 24 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-57
+- update from CVS
+
+* Thu Jun 19 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-56
+- fix condvars and semaphores in ppc* NPTL
+- fix test-skeleton.c reporting of timed-out tests (#91269)
+- increase timeouts for tests during make check
+
+* Wed Jun 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-55
+- make ldconfig default to both /lib+/usr/lib and /lib64+/usr/lib64
+  on bi-ABI architectures (#97557)
+- disable FUTEX_REQUEUE on ppc* temporarily
+
+* Wed Jun 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-54
+- update from CVS
+- fix glibc_post_upgrade on ppc
+
+* Tue Jun 17 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-53
+- update from CVS
+- fix localedef (#90659)
+- tweak linuxthreads for librt cancellation
+
+* Mon Jun 16 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-52
+- update from CVS
+
+* Thu Jun 12 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-51
+- update from CVS
+- fix <gnu/stubs.h> (#97169)
+
+* Wed Jun 11 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-50
+- update from CVS
+
+* Tue Jun 10 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-49
+- update from CVS
+  - fix pthread_cond_signal on IA-32 (#92080, #92253)
+  - fix setegid (#91567)
+- don't prelink -R libc.so on any architecture, it prohibits
+  address randomization
+
+* Thu Jun  5 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-48
+- update from CVS
+  - fix IA-64 NPTL build
+
+* Thu Jun  5 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-47
+- update from CVS
+- PT_GNU_STACK segment in binaries/executables and .note.GNU-stack
+  section in *.[oa]
+
+* Sun Jun  1 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-46
+- update from CVS
+- enable NPTL on AMD64
+- avoid using trampolines in localedef
+
+* Thu May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-45
+- enable NPTL on IA-64
+
+* Thu May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-44
+- update from CVS
+- enable NPTL on s390 and s390x
+- make __init_array_start etc. symbols in elf-init.oS hidden undefined
+
+* Thu May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-43
+- update from CVS
+
+* Fri May 23 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-42
+- update from CVS
+
+* Tue May 20 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-41
+- update from CVS
+- use NPTL libs if uname -r contains nptl substring or is >= 2.5.69
+  or set_tid_address syscall is available instead of checking
+  AT_SYSINFO dynamic tag
+
+* Thu May 15 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-40
+- update from CVS
+
+* Wed May 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-39
+- update from CVS
+  - fix for prelinking of libraries with no dependencies
+
+* Tue May 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-38
+- update from CVS
+- enable NPTL on ppc and ppc64
+
+* Tue May  6 2003 Matt Wilson <msw@redhat.com> 2.3.2-37
+- rebuild
+
+* Sun May  4 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-36
+- update from CVS
+
+* Sat May  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-35
+- update from CVS
+  - make -jN build fixes
+
+* Fri May  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-34
+- update from CVS
+- avoid using trampolines in iconvconfig for now
+
+* Sat Apr 26 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-33
+- update from CVS
+
+* Fri Apr 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-32
+- update from CVS
+- more ppc TLS fixes
+
+* Wed Apr 23 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-31
+- update from CVS
+  - nscd fixes
+  - fix Bahrain spelling (#56298)
+  - fix Ukrainian collation (#83973)
+  - accept trailing spaces in /etc/ld.so.conf (#86032)
+  - perror fix (#85994)
+  - fix localedef (#88978)
+  - fix getifaddrs (#89026)
+  - fix strxfrm (#88409)
+- fix ppc TLS
+- fix getaddrinfo (#89448)
+- don't print warning about errno, h_errno or _res if
+  LD_ASSUME_KERNEL=2.4.1 or earlier
+
+* Tue Apr 15 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-30
+- update from CVS
+- fix prelink on ppc32
+- add TLS support on ppc32 and ppc64
+- make sure on -m64 arches all helper binaries are built with this
+  option
+
+* Mon Apr 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-29
+- update from CVS
+  - fix strxfrm (#88409)
+- use -m64 -mno-minimal-toc on ppc64
+- conflict with kernels < 2.4.20 on ppc64 and < 2.4.0 on x86_64
+- link glibc_post_upgrade against newly built libc.a
+
+* Sun Apr 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-28
+- update from CVS
+  - fix NPTL pthread_detach and already terminated, but not yet
+    joined thread (#88219)
+  - fix bug-regex4 testcase (#88118)
+  - reenable prelink support broken in 2.3.2-13
+  - fix register_printf_function (#88052)
+  - fix double free with fopen using ccs= (#88056)
+  - fix potential access below $esp in {set,swap}context (#88093)
+  - fix buffer underrun in gencat -H (#88099)
+  - avoid using unitialized variable in tst-tgmath (#88101)
+  - fix gammal (#88104)
+  - fix iconv -c
+  - fix xdr_string (PR libc/4999)
+  - fix /usr/lib/nptl/librt.so symlink
+  - avoid running NPTL cleanups twice in some cases
+  - unblock __pthread_signal_cancel in linuxthreads, so that
+    linuxthreads threaded programs work correctly if spawned
+    from NPTL threaded programs
+  - fix sysconf _SC_{NPROCESSORS_{CONF,ONLN},{,AV}PHYS_PAGES}
+- remove /lib/i686 directory before running ldconfig in glibc post
+  during i686 -> i386 glibc "upgrades" (#88456)
+
+* Wed Apr  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-22
+- update from CVS
+  - add pthread_atfork to libpthread.a
+
+* Tue Apr  1 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-21
+- update from CVS
+- make sure linuxthreads pthread_mutex_lock etc. is not a cancellation
+  point
+
+* Sat Mar 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-20
+- update from CVS
+- if kernel >= 2.4.1 doesn't support NPTL, fall back to
+  /lib/i686 libs on i686, not stright to /lib
+
+* Fri Mar 28 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-19
+- update from CVS
+  - timers fixes
+
+* Thu Mar 27 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-18
+- update from CVS
+- fix NPTL pthread_cond_timedwait
+- fix sysconf (_SC_MONOTONIC_CLOCK)
+- use /%%{_lib}/tls instead of /lib/tls on x86-64
+- add /%%{_lib}/tls/librt*so* and /%%{_lib}/i686/librt*so*
+- display content of .out files for all make check failures
+
+* Wed Mar 26 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-17
+- update from CVS
+  - kernel POSIX timers support
+
+* Sat Mar 22 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-16
+- update from CVS
+  - export __fork from glibc again
+- fix glibc-compat build in NPTL
+- fix c_stubs
+- fix some more atomic.h problems
+- don't check abi in glibc-compat libs
+
+* Fri Mar 21 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-15
+- update from CVS
+- build glibc-compat (for glibc 2.0 compatibility) and c_stubs add-ons
+- condrestart sshd in glibc_post_upgrade so that the user can
+  log in remotely and handle the rest (#86339)
+- fix a typo in glibc_post_upgrade on sparc
+
+* Tue Mar 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-14
+- update from CVS
+- change i686/athlon libc.so.6 base to 0x00e80000
+
+* Mon Mar 17 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-13
+- update from CVS
+  - hopefully last fix for condvar problems
+
+* Fri Mar 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-12
+- fix bits/syscall.h creation on x86-64
+
+* Thu Mar 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-11
+- update from CVS
+
+* Wed Mar 12 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-10
+- update from CVS
+
+* Tue Mar 11 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-9
+- update from CVS
+- fix glibc-debug description (#85111)
+- make librt.so a symlink again, not linker script
+
+* Tue Mar  4 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-8
+- update from CVS
+- remove the workarounds for broken software accessing GLIBC_PRIVATE
+  symbols
+
+* Mon Mar  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-7
+- update from CVS
+
+* Sun Mar  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-6
+- fix TLS IE/LE model handling in dlopened libraries
+  on TCB_AT_TP arches
+
+* Tue Feb 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-5
+- update from CVS
+
+* Tue Feb 25 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-4
+- update from CVS
+
+* Mon Feb 24 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-3
+- update from CVS
+- only warn about errno, h_errno or _res for binaries, never
+  libraries
+- rebuilt with gcc-3.2.2-4 to use direct %%gs TLS access insn sequences
+
+* Sun Feb 23 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-2
+- update from CVS
+
+* Sat Feb 22 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-1
+- update from CVS
+
+* Thu Feb 20 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-51
+- update from CVS
+
+* Wed Feb 19 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-50
+- update from CVS
+
+* Wed Feb 19 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-49
+- update from CVS
+- remove nisplus and nis from the default nsswitch.conf (#67401, #9952)
+
+* Tue Feb 18 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-48
+- update from CVS
+
+* Sat Feb 15 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-47
+- update from CVS
+
+* Fri Feb 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-46
+- update from CVS
+  - pthread_cond* NPTL fixes, new NPTL testcases
+
+* Thu Feb 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-45
+- update from CVS
+- include also linuxthreads FLOATING_STACKS libs on i686 and athlon:
+  LD_ASSUME_KERNEL=2.2.5 to LD_ASSUME_KERNEL=2.4.0 is non-FLOATING_STACKS lt,
+  LD_ASSUME_KERNEL=2.4.1 to LD_ASSUME_KERNEL=2.4.19 is FLOATING_STACKS lt,
+  later is NPTL
+- enable TLS on alpha/alphaev6
+- add BuildPreReq: /usr/bin/readlink
+
+* Tue Feb 11 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-44
+- update from CVS
+  - pthread_once fix
+
+* Mon Feb 10 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-43
+- update from CVS
+- vfork fix on s390
+- rebuilt with binutils 2.13.90.0.18-5 so that accesses to errno
+  don't bind locally (#83325)
+
+* Thu Feb 06 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-42
+- update from CVS
+- fix pthread_create after vfork+exec in linuxthreads
+
+* Wed Feb 05 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-41
+- update from CVS
+
+* Thu Jan 30 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-40
+- update from CVS
+
+* Wed Jan 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-39
+- update from CVS
+- enable TLS on s390{,x} and sparc{,v9}
+
+* Fri Jan 17 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-38
+- update from CVS
+- initialize __environ in glibc_post_upgrade to empty array,
+  so that it is not NULL
+- compat symlink for s390x /lib/ld64.so.1
+- enable glibc-profile on x86-64
+- only include libNoVersion.so on IA-32, Alpha and Sparc 32-bit
+
+* Thu Jan 16 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-37
+- update from CVS
+  - nscd fixes, *scanf fix
+- fix %%nptlarches noarch build (#81909)
+- IA-64 TLS fixes
+
+* Tue Jan 14 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-36
+- update from CVS
+- rework -debuginfo subpackage, add -debuginfo-common
+  subpackage on IA-32, Alpha and Sparc (ie. auxiliary arches)
+- fix vfork in libc.a on PPC32, Alpha, Sparc
+- fix libio locks in linuxthreads libc.so if libpthread.so
+  is dlopened later (#81374)
+
+* Mon Jan 13 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-35
+- update from CVS
+  - dlclose bugfixes
+- fix NPTL libpthread.a
+- fix glibc_post_upgrade on several arches
+
+* Sat Jan 11 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-34
+- update from CVS
+- TLS support on IA-64
+
+* Wed Jan  8 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-33
+- fix vfork in linuxthreads (#81377, #81363)
+
+* Tue Jan  7 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-32
+- update from CVS
+- don't use TLS libs if kernel doesn't set AT_SYSINFO
+  (#80921, #81212)
+- add ntp_adjtime on alpha (#79996)
+- fix nptl_db (#81116)
+
+* Sun Jan  5 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-31
+- update from CVS
+- support all architectures again
+
+* Fri Jan  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-30
+- fix condvar compatibility wrappers
+- add ugly hack to use non-TLS libs if a binary is seen
+  to have errno, h_errno or _res symbols in .dynsym
+
+* Fri Jan  3 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-29
+- update from CVS
+  - fixes for new condvar
+
+* Thu Jan  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-28
+- new NPTL condvar implementation plus related linuxthreads
+  symbol versioning updates
+
+* Thu Jan  2 2003 Jakub Jelinek <jakub@redhat.com> 2.3.1-27
+- update from CVS
+- fix #include <sys/stat.h> with -D_BSD_SOURCE or without
+  feature set macros
+- make *sigaction, sigwait and raise the same between
+  -lpthread -lc and -lc -lpthread in linuxthreads builds
+
+* Tue Dec 31 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-26
+- fix dlclose
+
+* Sun Dec 29 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-25
+- enable sysenter by default for now
+- fix endless loop in ldconfig
+
+* Sat Dec 28 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-24
+- update from CVS
+
+* Fri Dec 27 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-23
+- update from CVS
+  - fix ptmalloc_init after clearenv (#80370)
+
+* Sun Dec 22 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-22
+- update from CVS
+- add IA-64 back
+- move TLS libraries from /lib/i686 to /lib/tls
+
+* Thu Dec 19 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-21
+- system(3) fix for linuxthreads
+- don't segfault in pthread_attr_init from libc.so
+- add cancellation tests from nptl to linuxthreads
+
+* Wed Dec 18 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-20
+- fix up lists of exported symbols + their versions
+  from the libraries
+
+* Wed Dec 18 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-19
+- fix --with-tls --enable-kernel=2.2.5 libc on IA-32
+
+* Wed Dec 18 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-18
+- update from CVS
+  - fix NPTL hanging mozilla
+  - initialize malloc in mALLOPt (fixes problems with squid, #79957)
+  - make linuxthreads work with dl_dynamic_weak 0
+  - clear dl_dynamic_weak everywhere
+
+* Tue Dec 17 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-17
+- update from CVS
+  - NPTL socket fixes, flockfile/ftrylockfile/funlockfile fix
+  - kill -debug sub-package, rename -debug-static to -debug
+  - clear dl_dynamic_weak for NPTL
+
+* Mon Dec 16 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-16
+- fix <bits/mathinline.h> and <bits/nan.h> for C++
+- automatically generate NPTL libpthread wrappers
+
+* Mon Dec 16 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-15
+- update from CVS
+  - all functions which need cancellation should now be cancellable
+    both in libpthread.so and libc.so
+  - removed @@GLIBC_2.3.2 cancellation wrappers
+
+* Fri Dec 13 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-14
+- update from CVS
+  - replace __libc_lock_needed@GOTOFF(%%ebx) with
+    %%gs:offsetof(tcbhead_t, multiple_threads)
+  - start of new NPTL cancellation wrappers
+
+* Thu Dec 12 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-13
+- update from CVS
+- use inline locks in malloc
+
+* Tue Dec 10 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-12
+- update from CVS
+  - support LD_ASSUME_KERNEL=2.2.5 in statically linked programs
+
+* Mon Dec  9 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-11
+- update from CVS
+- rebuilt with gcc-3.2.1-2
+
+* Fri Dec  6 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-10
+- update from CVS
+- non-nptl --with-tls --without-__thread FLOATING_STACKS libpthread
+  should work now
+- faster libc locking when using nptl
+- add OUTPUT_FORMAT to linker scripts
+- fix x86_64 sendfile (#79111)
+
+* Wed Dec  4 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-9
+- update from CVS
+  - RUSCII support (#78906)
+- for nptl builds add BuildRequires
+- fix byteswap.h for non-gcc (#77689)
+- add nptl-devel package
+
+* Tue Dec  3 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-8
+- update from CVS
+  - make --enable-kernel=2.2.5 --with-tls --without-__thread
+    ld.so load nptl and other --with-__thread libs
+- disable nptl by default for now
+
+* Wed Nov 27 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-7
+- update from CVS
+- restructured redhat/Makefile and spec, so that src.rpm contains
+  glibc-<date>.tar.bz2, glibc-redhat-<date>.tar.bz2 and glibc-redhat.patch
+- added nptl
+
+* Fri Nov  8 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-6
+- update from CVS
+  - even more regex fixes
+- run sed testsuite to check glibc regex
+
+* Thu Oct 24 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-5
+- fix LD_DEBUG=statistics and LD_TRACE_PRELINKING in programs
+  using libpthread.so.
+
+* Thu Oct 24 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-4
+- update from CVS
+  - fixed %%a and %%A in *printf (#75821)
+  - fix re_comp memory leaking (#76594)
+
+* Tue Oct 22 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-3
+- update from CVS
+  - some more regex fixes
+- fix libpthread.a (#76484)
+- fix locale-archive enlarging
+
+* Fri Oct 18 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-2
+- update from CVS
+  - don't need to use 128K of stacks for DNS lookups
+  - regex fixes
+  - updated timezone data e.g. for this year's Brasil DST
+    changes
+  - expand ${LIB} in RPATH/RUNPATH/dlopen filenames
+
+* Fri Oct 11 2002 Jakub Jelinek <jakub@redhat.com> 2.3.1-1
+- update to 2.3.1 final
+  - support really low thread stack sizes (#74073)
+- tzdata update
+
+* Wed Oct  9 2002 Jakub Jelinek <jakub@redhat.com> 2.3-2
+- update from CVS
+  - handle low stack limits
+  - move s390x into */lib64
+
+* Thu Oct  3 2002 Jakub Jelinek <jakub@redhat.com> 2.3-1
+- update to 2.3 final
+  - fix freopen on libstdc++ <= 2.96 stdin/stdout/stderr (#74800)
+
+* Sun Sep 29 2002 Jakub Jelinek <jakub@redhat.com> 2.2.94-3
+- don't prelink -r libc.so on ppc/x86-64/sparc*, it doesn't
+  speed things up, because they are neither REL arches, nor
+  ELF_MACHINE_REL_RELATIVE
+- fix sparc64 build
+
+* Sun Sep 29 2002 Jakub Jelinek <jakub@redhat.com> 2.2.94-2
+- update from CVS
+
+* Sat Sep 28 2002 Jakub Jelinek <jakub@redhat.com> 2.2.94-1
+- update from CVS
+- prelink on ppc and x86-64 too
+- don't remove ppc memset
+- instead of listing on which arches to remove glibc-compat
+  list where it should stay
+
+* Fri Sep  6 2002 Jakub Jelinek <jakub@redhat.com> 2.2.93-5
+- fix wcsmbs functions with invalid character sets (or malloc
+  failures)
+- make sure __ctype_b etc. compat vars are updated even if
+  they are copy relocs in the main program
+
+* Thu Sep  5 2002 Jakub Jelinek <jakub@redhat.com> 2.2.93-4
+- fix /lib/libnss1_dns.so.1 (missing __set_h_errno definition
+  leading to unresolved __set_h_errno symbol)
+
+* Wed Sep  4 2002 Jakub Jelinek <jakub@redhat.com> 2.2.93-3
+- security fix - increase dns-network.c MAXPACKET to at least
+  65536 to avoid buffer overrun. Likewise glibc-compat
+  dns-{host,network}.c.
+
+* Tue Sep  3 2002 Jakub Jelinek <jakub@redhat.com> 2.2.93-2
+- temporarily add back __ctype_b, __ctype_tolower and __ctype_toupper to
+  libc.a and export them as @@GLIBC_2.0 symbols, not @GLIBC_2.0
+  from libc.so - we have still lots of .a libraries referencing
+  __ctype_{b,tolower,toupper} out there...
+
+* Tue Sep  3 2002 Jakub Jelinek <jakub@redhat.com> 2.2.93-1
+- update from CVS
+  - 2.2.93 release
+  - use double instead of single indirection in isXXX macros
+  - per-locale wcsmbs conversion state
+
+* Sat Aug 31 2002 Jakub Jelinek <jakub@redhat.com> 2.2.92-2
+- update from CVS
+  - fix newlocale/duplocale/uselocale
+- disable profile on x86_64 for now
+
+* Sat Aug 31 2002 Jakub Jelinek <jakub@redhat.com> 2.2.92-1
+- update from CVS
+  - 2.2.92 release
+  - fix gettext after uselocale
+  - fix locales in statically linked threaded programs
+  - fix NSS
+
+* Thu Aug 29 2002 Jakub Jelinek <jakub@redhat.com> 2.2.91-1
+- update from CVS
+  - 2.2.91 release
+  - fix fd leaks in locale-archive reader (#72043)
+- handle EROFS in build-locale-archive gracefully (#71665)
+
+* Wed Aug 28 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-27
+- update from CVS
+  - fix re_match (#72312)
+- support more than 1024 threads
+
+* Fri Aug 23 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-26
+- update from CVS
+  - fix i386 build
+
+* Thu Aug 22 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-25
+- update from CVS
+  - fix locale-archive loading hang on some (non-primary) locales
+    (#72122, #71878)
+  - fix umount problems with locale-archives when /usr is a separate
+    partition (#72043)
+- add LICENSES file
+
+* Fri Aug 16 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-24
+- update from CVS
+  - only mmap up to 2MB of locale-archive on 32-bit machines
+    initially
+  - fix fseek past end + fread segfault with mmaped stdio
+- include <sys/debugreg.h> which is mistakenly not included
+  in glibc-devel on IA-32
+
+* Fri Aug 16 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-23
+- don't return normalized locale name in setlocale when using
+  locale-archive
+
+* Thu Aug 15 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-22
+- update from CVS
+  - optimize for primary system locale
+- localedef fixes (#71552, #67705)
+
+* Wed Aug 14 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-21
+- fix path to locale-archive in libc reader
+- build locale archive at glibc-common %%post time
+- export __strtold_internal and __wcstold_internal on Alpha again
+- workaround some localedata problems
+
+* Tue Aug 13 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-20
+- update from CVS
+- patch out set_thread_area for now
+
+* Fri Aug  9 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-19
+- update from CVS
+- GB18030 patch from Yu Shao
+- applied Debian patch for getaddrinfo IPv4 vs. IPv6
+- fix regcomp (#71039)
+
+* Sun Aug  4 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-18
+- update from CVS
+- use /usr/sbin/prelink, not prelink (#70376)
+
+* Thu Jul 25 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-17
+- update from CVS
+
+* Thu Jul 25 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-16
+- update from CVS
+  - ungetc fix (#69586)
+  - fseek errno fix (#69589)
+  - change *etrlimit prototypes for C++ (#68588)
+- use --without-tls instead of --disable-tls
+
+* Thu Jul 11 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-15
+- set nscd user's shell to /sbin/nologin (#68369)
+- fix glibc-compat buffer overflows (security)
+- buildrequire prelink, don't build glibc's own copy of it (#67567)
+- update from CVS
+  - regex fix (#67734)
+  - fix unused warnings (#67706)
+  - fix freopen with mmap stdio (#67552)
+  - fix realloc (#68499)
+
+* Tue Jun 25 2002 Bill Nottingham <notting@redhat.com> 2.2.90-14
+- update from CVS
+  - fix argp on long words
+  - update atime in libio
+
+* Sat Jun 22 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-13
+- update from CVS
+  - a thread race fix
+  - fix readdir on invalid dirp
+
+* Wed Jun 19 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-12
+- update from CVS
+  - don't use __thread in headers
+- fix system(3) in threaded apps
+- update prelink, so that it is possible to prelink -u libc.so.6.1
+  on Alpha
+
+* Fri Jun  7 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-11
+- update from CVS
+  - fix __moddi3 (#65612, #65695)
+  - fix ether_line (#64427)
+- fix setvbuf with mmap stdio (#65864)
+- --disable-tls for now, waiting for kernel
+- avoid duplication of __divtf3 etc. on IA-64
+- make sure get*ent_r and _IO_wfile_jumps are exported (#62278)
+
+* Tue May 21 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-10
+- update from CVS
+  - fix Alpha pthread bug with gcc 3.1
+
+* Fri Apr 19 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-35
+- fix nice
+
+* Mon Apr 15 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-34
+- add relocation dependencies even for weak symbols (#63422)
+- stricter check_fds check for suid/sgid binaries
+- run make check at %%install time
+
+* Sat Apr 13 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-33
+- handle Dec 31 1969 in mktime for timezones west of GMT (#63369)
+- back out do-lookup.h change (#63261, #63305)
+- use "memory" clobber instead all the fancy stuff in i386/i686/bits/string.h
+  since lots of compilers break on it
+- fix sparc build with gcc 3.1
+- fix spec file for athlon
+
+* Tue Apr  9 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-32
+- fix debugging of threaded apps (#62804)
+- fix DST for Estonia (#61494)
+- document that pthread_mutexattr_?etkind_np are deprecated
+  and pthread_mutexattr_?ettype should be used instead in man
+  pages (#61485)
+- fix libSegFault.so undefined externals
+
+* Fri Apr  5 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-31
+- temporarily disable prelinking ld.so, as some statically linked
+  binaries linked against debugging versions of old glibcs die on it
+  (#62352)
+- fix <semaphore.h> for -std=c99 (#62516)
+- fix ether_ntohost segfault (#62397)
+- remove in glibc_post_upgrade on i386 all /lib/i686/libc-*.so,
+  /lib/i686/libm-*.so and /lib/i686/libpthread-*.so, not just current
+  version (#61633)
+- prelink -r on alpha too
+
+* Thu Mar 28 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-30
+- update GB18030 iconv module (Yu Shao)
+
+* Tue Mar 26 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-29
+- features.h fix
+
+* Tue Mar 26 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-28
+- update from CVS
+  - fix nscd with huge groups
+  - fix nis to not close fds it shouldn't
+- rebuilt against newer glibc-kernheaders to use the correct
+  PATH_MAX
+- handle .athlon.rpm glibc the same way as .i686.rpm
+- add a couple of .ISO-8859-15 locales (#61908)
+- readd temporarily currencies which were superceeded by Euro
+  into the list of accepted currencies by localedef to make
+  standard conformance testsuites happy
+- temporarily moved __libc_waitpid back to make Sun JDK happy
+- use old malloc code
+- prelink i686/athlon ld.so and prelink -r i686/athlon libc.so
+
+* Thu Mar 14 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-27
+- update from CVS
+  - fix DST handling for southern hemisphere (#60747)
+  - fix daylight setting for tzset (#59951)
+  - fix ftime (#60350)
+  - fix nice return value
+  - fix a malloc segfault
+- temporarily moved __libc_wait, __libc_fork and __libc_stack_end
+  back to what they used to be exported at
+- censorship (#60758)
+
+* Thu Feb 28 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-26
+- update from CVS
+- use __attribute__((visibility(...))) if supported, use _rtld_local
+  for ld.so only objects
+- provide libc's own __{,u}{div,mod}di3
+
+* Wed Feb 27 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-25
+- switch back to 2.2.5, mmap stdio needs work
+
+* Mon Feb 25 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-8
+- fix two other mmap stdio bugs (#60228)
+
+* Thu Feb 21 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-7
+- fix yet another mmap stdio bug (#60145)
+
+* Tue Feb 19 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-6
+- fix mmap stdio bug (seen on ld as File truncated error, #60043)
+- apply Andreas Schwab's fix for pthread sigwait
+- remove /lib/i686/ libraries in glibc_post_upgrade when
+  performing i386 glibc install
+
+* Thu Feb 14 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-5
+- update to CVS
+- added glibc-utils subpackage
+- disable autoreq in glibc-debug
+- readd %%lang() to locale files
+
+* Thu Feb  7 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-4
+- update to CVS
+- move glibc private symbols to GLIBC_PRIVATE symbol version
+
+* Wed Jan  9 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-3
+- fix a sqrt bug on alpha which caused SHN_UNDEF $__full_ieee754_sqrt..ng
+  symbol in libm
+
+* Tue Jan  8 2002 Jakub Jelinek <jakub@redhat.com> 2.2.90-2
+- add debug-static package
+
+* Mon Dec 31 2001 Jakub Jelinek <jakub@redhat.com> 2.2.90-1
+- update from CVS
+- remove -D__USE_STRING_INLINES
+- add debug subpackage to trim glibc and glibc-devel size
+
+* Wed Oct  3 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-19
+- fix strsep
+
+* Fri Sep 28 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-18
+- fix a ld.so bug with duplicate searchlists in l_scope
+- fix erfcl(-inf)
+- turn /usr/lib/librt.so into linker script
+
+* Wed Sep 26 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-17
+- fix a ld.so lookup bug after lots of dlopen calls
+- fix CMSG_DATA for non-gcc non-ISOC99 compilers (#53984)
+- prelinking support for Sparc64
+
+* Fri Sep 21 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-16
+- update from CVS to fix DT_SYMBOLIC
+- prelinking support for Alpha and Sparc
+
+* Tue Sep 18 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-15
+- update from CVS
+  - linuxthreads now retries if -1/EINTR is returned from
+    reading or writing to thread manager pipe (#43742)
+- use DT_FILTER in librt.so (#53394)
+  - update glibc prelink patch so that it handles filters
+- fix timer_* with SIGEV_NONE (#53494)
+- make glibc_post_upgrade work on PPC (patch from Franz Sirl)
+
+* Mon Sep 10 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-14
+- fix build on sparc32
+- 2.2.4-13 build for some reason missed some locales
+  on alpha/ia64
+
+* Mon Sep  3 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-13
+- fix iconvconfig
+
+* Mon Sep  3 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-12
+- add fam to /etc/rpc (#52863)
+- fix <inttypes.h> for C++ (#52960)
+- fix perror
+
+* Mon Aug 27 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-11
+- fix strnlen(x, -1)
+
+* Mon Aug 27 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-10
+- doh, <bits/libc-lock.h> should only define __libc_rwlock_t
+  if __USE_UNIX98.
+
+* Mon Aug 27 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-9
+- fix bits/libc-lock.h so that gcc can compile
+- fix s390 build
+
+* Fri Aug 24 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-8
+- kill stale library symlinks in ldconfig (#52350)
+- fix inttypes.h for G++ < 3.0
+- use DT_REL*COUNT
+
+* Wed Aug 22 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-7
+- fix strnlen on IA-64 (#50077)
+
+* Thu Aug 16 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-6
+- glibc 2.2.4 final
+- fix -lpthread -static (#51672)
+
+* Fri Aug 10 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-5
+- doh, include libio/tst-swscanf.c
+
+* Fri Aug 10 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-4
+- don't crash on catclose(-1)
+- fix wscanf %%[] handling
+- fix return value from swprintf
+- handle year + %%U/%%W week + week day in strptime
+
+* Thu Aug  9 2001 Jakub Jelinek <jakub@redhat.com> 2.2.4-3
+- update from CVS to
+  - fix strcoll (#50548)
+  - fix seekdir (#51132)
+  - fix memusage (#50606)
+- don't make gconv-modules.cache %%config file, just don't verify
+  its content.
+
+* Mon Aug  6 2001 Jakub Jelinek <jakub@redhat.com>
+- fix strtod and *scanf (#50723, #50724)
+
+* Sat Aug  4 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix iconv cache handling
+- glibc should not own %%{_infodir}, %%{_mandir} nor %%{_mandir}/man3 (#50673)
+- add gconv-modules.cache as emtpy config file (#50699)
+- only run iconvconfig if /usr is mounted read-write (#50667)
+
+* Wed Jul 25 2001 Jakub Jelinek <jakub@redhat.com>
+- move iconvconfig from glibc-common into glibc subpackage,
+  call it from glibc_post_upgrade instead of common's post.
+
+* Tue Jul 24 2001 Jakub Jelinek <jakub@redhat.com>
+- turn off debugging printouts in iconvconfig
+
+* Tue Jul 24 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix IA-32 makecontext
+  - make fflush(0) thread-safe (#46446)
+
+* Mon Jul 23 2001 Jakub Jelinek <jakub@redhat.com>
+- adjust prelinking DT_* and SHT_* values in elf.h
+- update from CVS
+  - iconv cache
+  - make iconv work in SUID/SGID programs (#34611)
+
+* Fri Jul 20 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - kill non-pic code in libm.so
+  - fix getdate
+  - fix some locales (#49402)
+- rebuilt with binutils-2.11.90.0.8-5 to place .interp section
+  properly in libBrokenLocale.so, libNoVersion.so and libanl.so
+- add floating stacks on IA-64, Alpha, Sparc (#49308)
+
+* Mon Jul 16 2001 Jakub Jelinek <jakub@redhat.com>
+- make /lib/i686 directory owned by glibc*.i686.rpm
+
+* Mon Jul  9 2001 Jakub Jelinek <jakub@redhat.com>
+- remove rquota.[hx] headers which are now provided by quota (#47141)
+- add prelinking patch
+
+* Thu Jul  5 2001 Jakub Jelinek <jakub@redhat.com>
+- require sh-utils for nscd
+
+* Mon Jun 25 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS (#43681, #43350, #44663, #45685)
+- fix ro_RO bug (#44644)
+
+* Wed Jun  6 2001 Jakub Jelinek <jakub@redhat.com>
+- fix a bunch of math bugs (#43210, #43345, #43346, #43347, #43348, #43355)
+- make rpc headers -ansi compilable (#42390)
+- remove alphaev6 optimized memcpy, since there are still far too many
+  broken apps which call memcpy where they should call memmove
+- update from CVS to (among other things):
+  - fix tanhl bug (#43352)
+
+* Tue May 22 2001 Jakub Jelinek <jakub@redhat.com>
+- fix #include <signal.h> with -D_XOPEN_SOURCE=500 on ia64 (#35968)
+- fix a dlclose reldeps handling bug
+- some more profiling fixes
+- fix tgmath.h
+
+* Thu May 17 2001 Jakub Jelinek <jakub@redhat.com>
+- make ldconfig more quiet
+- fix LD_PROFILE on i686 (#41030)
+
+* Wed May 16 2001 Jakub Jelinek <jakub@redhat.com>
+- fix the hardlink program, so that it really catches all files with
+  identical content
+- add a s390x clone fix
+
+* Wed May 16 2001 Jakub Jelinek <jakub@redhat.com>
+- fix rpc for non-threaded apps using svc_fdset and similar variables (#40409)
+- fix nss compatibility DSO versions for alphaev6
+- add a hardlink program instead of the shell 3x for plus cmp -s/link
+  which takes a lot of time during build
+- rework BuildPreReq and Conflicts with gcc, so that
+  it applies only where it has to
+
+* Fri May 11 2001 Jakub Jelinek <jakub@redhat.com>
+- fix locale name of ja_JP in UTF-8 (#39783)
+- fix re_search_2 (#40244)
+- fix memusage script (#39138, #39823)
+- fix dlsym(RTLD_NEXT, ) from main program (#39803)
+- fix xtrace script (#39609)
+- make glibc conflict with glibc-devel 2.2.2 and below (to make sure
+  libc_nonshared.a has atexit)
+- fix getconf LFS_CFLAGS on 64bitters
+- recompile with gcc-2.96-84 or above to fix binary compatibility problem
+  with __frame_state_for function (#37933)
+
+* Fri Apr 27 2001 Jakub Jelinek <jakub@redhat.com>
+- glibc 2.2.3 release
+  - fix strcoll (#36539)
+- add BuildPreReqs (#36378)
+
+* Wed Apr 25 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+
+* Fri Apr 20 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix sparc64, ia64
+  - fix some locale syntax errors (#35982)
+
+* Wed Apr 18 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+
+* Wed Apr 11 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+
+* Fri Apr  6 2001 Jakub Jelinek <jakub@redhat.com>
+- support even 2.4.0 kernels on ia64, sparc64 and s390x
+- include UTF-8 locales
+- make gconv-modules %%config(noreplace)
+
+* Fri Mar 23 2001 Jakub Jelinek <jakub@redhat.com>
+- back out sunrpc changes
+
+* Wed Mar 21 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix ia64 build
+  - fix pthread_getattr_np
+
+* Fri Mar 16 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - run atexit() registered functions at dlclose time if they are in shared
+    libraries (#28625)
+  - add pthread_getattr_np API to make JVM folks happy
+
+* Wed Mar 14 2001 Jakub Jelinek <jakub@redhat.com>
+- require 2.4.1 instead of 2.4.0 on platforms where it required 2.4 kernel
+- fix ldd behaviour on unresolved symbols
+- remove nonsensical ldconfig warning, update osversion for the most
+  recent library with the same soname in the same directory instead (#31703)
+- apply selected patches from CVS
+- s390x spec file changes from Florian La Roche
+
+* Wed Mar  7 2001 Jakub Jelinek <jakub@redhat.com>
+- fix gencat (#30894)
+- fix ldconfig changes from yesterday, fix LD_ASSUME_KERNEL handling
+
+* Tue Mar  6 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+- make pthread_attr_setstacksize consistent before and after pthread manager
+  is started (#28194)
+- pass back struct sigcontext from pthread signal wrapper (on ia32 only so
+  far, #28493)
+- on i686 ship both --enable-kernel 2.2.5 and 2.4.0 libc/libm/libpthread,
+  make ld.so pick the right one
+
+* Sat Feb 17 2001 Preston Brown <pbrown@redhat.com>
+- glib-common doesn't require glibc, until we can figure out how to get out of dependency hell.
+
+* Sat Feb 17 2001 Jakub Jelinek <jakub@redhat.com>
+- make glibc require particular version of glibc-common
+  and glibc-common prerequire glibc.
+
+* Fri Feb 16 2001 Jakub Jelinek <jakub@redhat.com>
+- glibc 2.2.2 release
+  - fix regex REG_ICASE bug seen in ksymoops
+
+* Sat Feb 10 2001 Jakub Jelinek <jakub@redhat.com>
+- fix regexec leaking memory (#26864)
+
+* Fri Feb  9 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix ia64 build with gnupro
+  - make regex 64bit clean
+  - fix tgmath make check failures on alpha
+
+* Tue Feb  6 2001 Jakub Jelinek <jakub@redhat.com>
+- update again for ia64 DF_1_INITFIRST
+
+* Fri Feb  2 2001 Jakub Jelinek <jakub@redhat.com>
+- update from CVS
+  - fix getaddrinfo (#25437)
+  - support DF_1_INITFIRST (#25029)
+
+* Wed Jan 24 2001 Jakub Jelinek <jakub@redhat.com>
+- build all auxiliary arches with --enablekernel 2.4.0, those wanting
+  to run 2.2 kernels can downgrade to the base architecture glibc.
+
+* Sat Jan 20 2001 Jakub Jelinek <jakub@redhat.com>
+- remove %%lang() flags from %%{_prefix}/lib/locale files temporarily
+
+* Sun Jan 14 2001 Jakub Jelinek <jakub@redhat.com>
+- update to 2.2.1 final
+  - fix a pthread_kill_other_threads_np breakage (#23966)
+  - make static binaries using dlopen work on ia64 again
+- fix a typo in glibc-common group
+
+* Wed Jan 10 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- devel requires glibc = %%{version}
+- noreplace /etc/nscd.conf
+
+* Wed Jan 10 2001 Jakub Jelinek <jakub@redhat.com>
+- some more security fixes:
+  - don't look up LD_PRELOAD libs in cache for SUID apps
+    (because that bypasses SUID bit checking on the library)
+  - place output files for profiling SUID apps into /var/profile,
+    use O_NOFOLLOW for them
+  - add checks for $MEMUSAGE_OUTPUT and $SEGFAULT_OUTPUT_NAME
+- hardlink identical locale files together
+- add %%lang() tags to locale stuff
+- remove ko_KR.utf8 for now, it is provided by locale-utf8 package
+
+* Mon Jan  8 2001 Jakub Jelinek <jakub@redhat.com>
+- add glibc-common subpackage
+- fix alphaev6 memcpy (#22494)
+- fix sys/cdefs.h (#22908)
+- don't define stdin/stdout/stderr as macros for -traditional (#22913)
+- work around a bug in IBM JDK (#22932, #23012)
+- fix pmap_unset when network is down (#23176)
+- move nscd in rc.d before netfs on shutdown
+- fix $RESOLV_HOST_CONF in SUID apps (#23562)
+
+* Fri Dec 15 2000 Jakub Jelinek <jakub@redhat.com>
+- fix ftw and nftw
+
+* Wed Dec 13 2000 Jakub Jelinek <jakub@redhat.com>
+- fix fcvt (#22184)
+- ldd /lib/ld-linux.so.2 is not crashing any longer again (#22197)
+- fix gencat
+
+* Mon Dec 11 2000 Jakub Jelinek <jakub@redhat.com>
+- fix alpha htonl and alphaev6 stpcpy
+
+* Sat Dec  9 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS to:
+  - fix getnameinfo (#21934)
+  - don't stomp on memory in rpath handling (#21544)
+  - fix setlocale (#21507)
+- fix libNoVersion.so.1 loading code (#21579)
+- use auxarches define in spec file for auxiliary
+  architectures (#21219)
+- remove /usr/share directory from filelist (#21218)
+
+* Sun Nov 19 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS to fix getaddrinfo
+
+* Fri Nov 17 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS to fix freopen
+- remove all alpha workarounds, not needed anymore
+
+* Wed Nov 15 2000 Jakub Jelinek <jakub@redhat.com>
+- fix dladdr bug on alpha/sparc32/sparc64
+- fix Makefiles so that they run static tests properly
+
+* Tue Nov 14 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS to fix ldconfig
+
+* Thu Nov  9 2000 Jakub Jelinek <jakub@redhat.com>
+- update to glibc 2.2 release
+
+* Mon Nov  6 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS to:
+  - export __sysconf@@GLIBC_2.2 (#20417)
+
+* Fri Nov  3 2000 Jakub Jelinek <jakub@redhat.com>
+- merge to 2.1.97
+
+* Mon Oct 30 2000 Jakub Jelinek <jakub@redhat.com>
+- update to CVS, including:
+  - fix WORD_BIT/LONG_BIT definition in limits.h (#19088)
+  - fix hesiod (#19375)
+  - set LC_MESSAGES in zic/zdump for proper error message output (#19495)
+  - fix LFS fcntl when used with non-LFS aware kernels (#19730)
+
+* Thu Oct 19 2000 Jakub Jelinek <jakub@redhat.com>
+- fix alpha semctl (#19199)
+- update to CVS, including:
+  - fix glibc headers for Compaq non-gcc compilers
+  - fix locale alias handling code (#18832)
+  - fix rexec on little endian machines (#18886)
+- started writing changelog again
+
+* Thu Aug 10 2000 Adrian Havill <havill@redhat.com>
+- added ja ujis alias for backwards compatibility
diff --git a/SOURCES/SUPPORTED b/SOURCES/SUPPORTED
new file mode 100644
index 0000000..952f13d
--- /dev/null
+++ b/SOURCES/SUPPORTED
@@ -0,0 +1,494 @@
+# This file names the currently supported and somewhat tested locales.
+# If you have any additions please file a glibc bug report.
+SUPPORTED-LOCALES=\
+C.UTF-8/UTF-8 \
+aa_DJ.UTF-8/UTF-8 \
+aa_DJ/ISO-8859-1 \
+aa_ER/UTF-8 \
+aa_ER@saaho/UTF-8 \
+aa_ET/UTF-8 \
+af_ZA.UTF-8/UTF-8 \
+af_ZA/ISO-8859-1 \
+agr_PE/UTF-8 \
+ak_GH/UTF-8 \
+am_ET/UTF-8 \
+an_ES.UTF-8/UTF-8 \
+an_ES/ISO-8859-15 \
+anp_IN/UTF-8 \
+ar_AE.UTF-8/UTF-8 \
+ar_AE/ISO-8859-6 \
+ar_BH.UTF-8/UTF-8 \
+ar_BH/ISO-8859-6 \
+ar_DZ.UTF-8/UTF-8 \
+ar_DZ/ISO-8859-6 \
+ar_EG.UTF-8/UTF-8 \
+ar_EG/ISO-8859-6 \
+ar_IN/UTF-8 \
+ar_IQ.UTF-8/UTF-8 \
+ar_IQ/ISO-8859-6 \
+ar_JO.UTF-8/UTF-8 \
+ar_JO/ISO-8859-6 \
+ar_KW.UTF-8/UTF-8 \
+ar_KW/ISO-8859-6 \
+ar_LB.UTF-8/UTF-8 \
+ar_LB/ISO-8859-6 \
+ar_LY.UTF-8/UTF-8 \
+ar_LY/ISO-8859-6 \
+ar_MA.UTF-8/UTF-8 \
+ar_MA/ISO-8859-6 \
+ar_OM.UTF-8/UTF-8 \
+ar_OM/ISO-8859-6 \
+ar_QA.UTF-8/UTF-8 \
+ar_QA/ISO-8859-6 \
+ar_SA.UTF-8/UTF-8 \
+ar_SA/ISO-8859-6 \
+ar_SD.UTF-8/UTF-8 \
+ar_SD/ISO-8859-6 \
+ar_SS/UTF-8 \
+ar_SY.UTF-8/UTF-8 \
+ar_SY/ISO-8859-6 \
+ar_TN.UTF-8/UTF-8 \
+ar_TN/ISO-8859-6 \
+ar_YE.UTF-8/UTF-8 \
+ar_YE/ISO-8859-6 \
+ayc_PE/UTF-8 \
+az_AZ/UTF-8 \
+az_IR/UTF-8 \
+as_IN/UTF-8 \
+ast_ES.UTF-8/UTF-8 \
+ast_ES/ISO-8859-15 \
+be_BY.UTF-8/UTF-8 \
+be_BY/CP1251 \
+be_BY@latin/UTF-8 \
+bem_ZM/UTF-8 \
+ber_DZ/UTF-8 \
+ber_MA/UTF-8 \
+bg_BG.UTF-8/UTF-8 \
+bg_BG/CP1251 \
+bhb_IN.UTF-8/UTF-8 \
+bho_IN/UTF-8 \
+bho_NP/UTF-8 \
+bi_VU/UTF-8 \
+bn_BD/UTF-8 \
+bn_IN/UTF-8 \
+bo_CN/UTF-8 \
+bo_IN/UTF-8 \
+br_FR.UTF-8/UTF-8 \
+br_FR/ISO-8859-1 \
+br_FR@euro/ISO-8859-15 \
+brx_IN/UTF-8 \
+bs_BA.UTF-8/UTF-8 \
+bs_BA/ISO-8859-2 \
+byn_ER/UTF-8 \
+ca_AD.UTF-8/UTF-8 \
+ca_AD/ISO-8859-15 \
+ca_ES.UTF-8/UTF-8 \
+ca_ES/ISO-8859-1 \
+ca_ES@euro/ISO-8859-15 \
+ca_ES@valencia/UTF-8 \
+ca_FR.UTF-8/UTF-8 \
+ca_FR/ISO-8859-15 \
+ca_IT.UTF-8/UTF-8 \
+ca_IT/ISO-8859-15 \
+ce_RU/UTF-8 \
+chr_US/UTF-8 \
+cmn_TW/UTF-8 \
+crh_UA/UTF-8 \
+cs_CZ.UTF-8/UTF-8 \
+cs_CZ/ISO-8859-2 \
+csb_PL/UTF-8 \
+cv_RU/UTF-8 \
+cy_GB.UTF-8/UTF-8 \
+cy_GB/ISO-8859-14 \
+da_DK.UTF-8/UTF-8 \
+da_DK/ISO-8859-1 \
+da_DK.ISO-8859-15/ISO-8859-15 \
+de_AT.UTF-8/UTF-8 \
+de_AT/ISO-8859-1 \
+de_AT@euro/ISO-8859-15 \
+de_BE.UTF-8/UTF-8 \
+de_BE/ISO-8859-1 \
+de_BE@euro/ISO-8859-15 \
+de_CH.UTF-8/UTF-8 \
+de_CH/ISO-8859-1 \
+de_DE.UTF-8/UTF-8 \
+de_DE/ISO-8859-1 \
+de_DE@euro/ISO-8859-15 \
+de_IT.UTF-8/UTF-8 \
+de_IT/ISO-8859-1 \
+de_LI.UTF-8/UTF-8 \
+de_LU.UTF-8/UTF-8 \
+de_LU/ISO-8859-1 \
+de_LU@euro/ISO-8859-15 \
+doi_IN/UTF-8 \
+dsb_DE/UTF-8 \
+dv_MV/UTF-8 \
+dz_BT/UTF-8 \
+el_GR.UTF-8/UTF-8 \
+el_GR/ISO-8859-7 \
+el_GR@euro/ISO-8859-7 \
+el_CY.UTF-8/UTF-8 \
+el_CY/ISO-8859-7 \
+en_AG/UTF-8 \
+en_AU.UTF-8/UTF-8 \
+en_AU/ISO-8859-1 \
+en_BW.UTF-8/UTF-8 \
+en_BW/ISO-8859-1 \
+en_CA.UTF-8/UTF-8 \
+en_CA/ISO-8859-1 \
+en_DK.UTF-8/UTF-8 \
+en_DK/ISO-8859-1 \
+en_GB.UTF-8/UTF-8 \
+en_GB/ISO-8859-1 \
+en_GB.ISO-8859-15/ISO-8859-15 \
+en_HK.UTF-8/UTF-8 \
+en_HK/ISO-8859-1 \
+en_IE.UTF-8/UTF-8 \
+en_IE/ISO-8859-1 \
+en_IE@euro/ISO-8859-15 \
+en_IL/UTF-8 \
+en_IN/UTF-8 \
+en_NG/UTF-8 \
+en_NZ.UTF-8/UTF-8 \
+en_NZ/ISO-8859-1 \
+en_PH.UTF-8/UTF-8 \
+en_PH/ISO-8859-1 \
+en_SC.UTF-8/UTF-8 \
+en_SG.UTF-8/UTF-8 \
+en_SG/ISO-8859-1 \
+en_US.UTF-8/UTF-8 \
+en_US/ISO-8859-1 \
+en_US.ISO-8859-15/ISO-8859-15 \
+en_ZA.UTF-8/UTF-8 \
+en_ZA/ISO-8859-1 \
+en_ZM/UTF-8 \
+en_ZW.UTF-8/UTF-8 \
+en_ZW/ISO-8859-1 \
+eo/UTF-8 \
+es_AR.UTF-8/UTF-8 \
+es_AR/ISO-8859-1 \
+es_BO.UTF-8/UTF-8 \
+es_BO/ISO-8859-1 \
+es_CL.UTF-8/UTF-8 \
+es_CL/ISO-8859-1 \
+es_CO.UTF-8/UTF-8 \
+es_CO/ISO-8859-1 \
+es_CR.UTF-8/UTF-8 \
+es_CR/ISO-8859-1 \
+es_CU/UTF-8 \
+es_DO.UTF-8/UTF-8 \
+es_DO/ISO-8859-1 \
+es_EC.UTF-8/UTF-8 \
+es_EC/ISO-8859-1 \
+es_ES.UTF-8/UTF-8 \
+es_ES/ISO-8859-1 \
+es_ES@euro/ISO-8859-15 \
+es_GT.UTF-8/UTF-8 \
+es_GT/ISO-8859-1 \
+es_HN.UTF-8/UTF-8 \
+es_HN/ISO-8859-1 \
+es_MX.UTF-8/UTF-8 \
+es_MX/ISO-8859-1 \
+es_NI.UTF-8/UTF-8 \
+es_NI/ISO-8859-1 \
+es_PA.UTF-8/UTF-8 \
+es_PA/ISO-8859-1 \
+es_PE.UTF-8/UTF-8 \
+es_PE/ISO-8859-1 \
+es_PR.UTF-8/UTF-8 \
+es_PR/ISO-8859-1 \
+es_PY.UTF-8/UTF-8 \
+es_PY/ISO-8859-1 \
+es_SV.UTF-8/UTF-8 \
+es_SV/ISO-8859-1 \
+es_US.UTF-8/UTF-8 \
+es_US/ISO-8859-1 \
+es_UY.UTF-8/UTF-8 \
+es_UY/ISO-8859-1 \
+es_VE.UTF-8/UTF-8 \
+es_VE/ISO-8859-1 \
+et_EE.UTF-8/UTF-8 \
+et_EE/ISO-8859-1 \
+et_EE.ISO-8859-15/ISO-8859-15 \
+eu_ES.UTF-8/UTF-8 \
+eu_ES/ISO-8859-1 \
+eu_ES@euro/ISO-8859-15 \
+fa_IR/UTF-8 \
+ff_SN/UTF-8 \
+fi_FI.UTF-8/UTF-8 \
+fi_FI/ISO-8859-1 \
+fi_FI@euro/ISO-8859-15 \
+fil_PH/UTF-8 \
+fo_FO.UTF-8/UTF-8 \
+fo_FO/ISO-8859-1 \
+fr_BE.UTF-8/UTF-8 \
+fr_BE/ISO-8859-1 \
+fr_BE@euro/ISO-8859-15 \
+fr_CA.UTF-8/UTF-8 \
+fr_CA/ISO-8859-1 \
+fr_CH.UTF-8/UTF-8 \
+fr_CH/ISO-8859-1 \
+fr_FR.UTF-8/UTF-8 \
+fr_FR/ISO-8859-1 \
+fr_FR@euro/ISO-8859-15 \
+fr_LU.UTF-8/UTF-8 \
+fr_LU/ISO-8859-1 \
+fr_LU@euro/ISO-8859-15 \
+fur_IT/UTF-8 \
+fy_NL/UTF-8 \
+fy_DE/UTF-8 \
+ga_IE.UTF-8/UTF-8 \
+ga_IE/ISO-8859-1 \
+ga_IE@euro/ISO-8859-15 \
+gd_GB.UTF-8/UTF-8 \
+gd_GB/ISO-8859-15 \
+gez_ER/UTF-8 \
+gez_ER@abegede/UTF-8 \
+gez_ET/UTF-8 \
+gez_ET@abegede/UTF-8 \
+gl_ES.UTF-8/UTF-8 \
+gl_ES/ISO-8859-1 \
+gl_ES@euro/ISO-8859-15 \
+gu_IN/UTF-8 \
+gv_GB.UTF-8/UTF-8 \
+gv_GB/ISO-8859-1 \
+ha_NG/UTF-8 \
+hak_TW/UTF-8 \
+he_IL.UTF-8/UTF-8 \
+he_IL/ISO-8859-8 \
+hi_IN/UTF-8 \
+hif_FJ/UTF-8 \
+hne_IN/UTF-8 \
+hr_HR.UTF-8/UTF-8 \
+hr_HR/ISO-8859-2 \
+hsb_DE/ISO-8859-2 \
+hsb_DE.UTF-8/UTF-8 \
+ht_HT/UTF-8 \
+hu_HU.UTF-8/UTF-8 \
+hu_HU/ISO-8859-2 \
+hy_AM/UTF-8 \
+hy_AM.ARMSCII-8/ARMSCII-8 \
+ia_FR/UTF-8 \
+id_ID.UTF-8/UTF-8 \
+id_ID/ISO-8859-1 \
+ig_NG/UTF-8 \
+ik_CA/UTF-8 \
+is_IS.UTF-8/UTF-8 \
+is_IS/ISO-8859-1 \
+it_CH.UTF-8/UTF-8 \
+it_CH/ISO-8859-1 \
+it_IT.UTF-8/UTF-8 \
+it_IT/ISO-8859-1 \
+it_IT@euro/ISO-8859-15 \
+iu_CA/UTF-8 \
+ja_JP.EUC-JP/EUC-JP \
+ja_JP.UTF-8/UTF-8 \
+ka_GE.UTF-8/UTF-8 \
+ka_GE/GEORGIAN-PS \
+kab_DZ/UTF-8 \
+kk_KZ.UTF-8/UTF-8 \
+kk_KZ/PT154 \
+kl_GL.UTF-8/UTF-8 \
+kl_GL/ISO-8859-1 \
+km_KH/UTF-8 \
+kn_IN/UTF-8 \
+ko_KR.EUC-KR/EUC-KR \
+ko_KR.UTF-8/UTF-8 \
+kok_IN/UTF-8 \
+ks_IN/UTF-8 \
+ks_IN@devanagari/UTF-8 \
+ku_TR.UTF-8/UTF-8 \
+ku_TR/ISO-8859-9 \
+kw_GB.UTF-8/UTF-8 \
+kw_GB/ISO-8859-1 \
+ky_KG/UTF-8 \
+lb_LU/UTF-8 \
+lg_UG.UTF-8/UTF-8 \
+lg_UG/ISO-8859-10 \
+li_BE/UTF-8 \
+li_NL/UTF-8 \
+lij_IT/UTF-8 \
+ln_CD/UTF-8 \
+lo_LA/UTF-8 \
+lt_LT.UTF-8/UTF-8 \
+lt_LT/ISO-8859-13 \
+lv_LV.UTF-8/UTF-8 \
+lv_LV/ISO-8859-13 \
+lzh_TW/UTF-8 \
+mag_IN/UTF-8 \
+mai_IN/UTF-8 \
+mai_NP/UTF-8 \
+mfe_MU/UTF-8 \
+mg_MG.UTF-8/UTF-8 \
+mg_MG/ISO-8859-15 \
+mhr_RU/UTF-8 \
+mi_NZ.UTF-8/UTF-8 \
+mi_NZ/ISO-8859-13 \
+miq_NI/UTF-8 \
+mjw_IN/UTF-8 \
+mk_MK.UTF-8/UTF-8 \
+mk_MK/ISO-8859-5 \
+ml_IN/UTF-8 \
+mn_MN/UTF-8 \
+mni_IN/UTF-8 \
+mr_IN/UTF-8 \
+ms_MY.UTF-8/UTF-8 \
+ms_MY/ISO-8859-1 \
+mt_MT.UTF-8/UTF-8 \
+mt_MT/ISO-8859-3 \
+my_MM/UTF-8 \
+nan_TW/UTF-8 \
+nan_TW@latin/UTF-8 \
+nb_NO.UTF-8/UTF-8 \
+nb_NO/ISO-8859-1 \
+nds_DE/UTF-8 \
+nds_NL/UTF-8 \
+ne_NP/UTF-8 \
+nhn_MX/UTF-8 \
+niu_NU/UTF-8 \
+niu_NZ/UTF-8 \
+nl_AW/UTF-8 \
+nl_BE.UTF-8/UTF-8 \
+nl_BE/ISO-8859-1 \
+nl_BE@euro/ISO-8859-15 \
+nl_NL.UTF-8/UTF-8 \
+nl_NL/ISO-8859-1 \
+nl_NL@euro/ISO-8859-15 \
+nn_NO.UTF-8/UTF-8 \
+nn_NO/ISO-8859-1 \
+nr_ZA/UTF-8 \
+nso_ZA/UTF-8 \
+oc_FR.UTF-8/UTF-8 \
+oc_FR/ISO-8859-1 \
+om_ET/UTF-8 \
+om_KE.UTF-8/UTF-8 \
+om_KE/ISO-8859-1 \
+or_IN/UTF-8 \
+os_RU/UTF-8 \
+pa_IN/UTF-8 \
+pa_PK/UTF-8 \
+pap_AW/UTF-8 \
+pap_CW/UTF-8 \
+pl_PL.UTF-8/UTF-8 \
+pl_PL/ISO-8859-2 \
+ps_AF/UTF-8 \
+pt_BR.UTF-8/UTF-8 \
+pt_BR/ISO-8859-1 \
+pt_PT.UTF-8/UTF-8 \
+pt_PT/ISO-8859-1 \
+pt_PT@euro/ISO-8859-15 \
+quz_PE/UTF-8 \
+raj_IN/UTF-8 \
+ro_RO.UTF-8/UTF-8 \
+ro_RO/ISO-8859-2 \
+ru_RU.KOI8-R/KOI8-R \
+ru_RU.UTF-8/UTF-8 \
+ru_RU/ISO-8859-5 \
+ru_UA.UTF-8/UTF-8 \
+ru_UA/KOI8-U \
+rw_RW/UTF-8 \
+sa_IN/UTF-8 \
+sah_RU/UTF-8 \
+sat_IN/UTF-8 \
+sc_IT/UTF-8 \
+sd_IN/UTF-8 \
+sd_IN@devanagari/UTF-8 \
+se_NO/UTF-8 \
+sgs_LT/UTF-8 \
+shn_MM/UTF-8 \
+shs_CA/UTF-8 \
+si_LK/UTF-8 \
+sid_ET/UTF-8 \
+sk_SK.UTF-8/UTF-8 \
+sk_SK/ISO-8859-2 \
+sl_SI.UTF-8/UTF-8 \
+sl_SI/ISO-8859-2 \
+sm_WS/UTF-8 \
+so_DJ.UTF-8/UTF-8 \
+so_DJ/ISO-8859-1 \
+so_ET/UTF-8 \
+so_KE.UTF-8/UTF-8 \
+so_KE/ISO-8859-1 \
+so_SO.UTF-8/UTF-8 \
+so_SO/ISO-8859-1 \
+sq_AL.UTF-8/UTF-8 \
+sq_AL/ISO-8859-1 \
+sq_MK/UTF-8 \
+sr_ME/UTF-8 \
+sr_RS/UTF-8 \
+sr_RS@latin/UTF-8 \
+ss_ZA/UTF-8 \
+st_ZA.UTF-8/UTF-8 \
+st_ZA/ISO-8859-1 \
+sv_FI.UTF-8/UTF-8 \
+sv_FI/ISO-8859-1 \
+sv_FI@euro/ISO-8859-15 \
+sv_SE.UTF-8/UTF-8 \
+sv_SE/ISO-8859-1 \
+sv_SE.ISO-8859-15/ISO-8859-15 \
+sw_KE/UTF-8 \
+sw_TZ/UTF-8 \
+szl_PL/UTF-8 \
+ta_IN/UTF-8 \
+ta_LK/UTF-8 \
+tcy_IN.UTF-8/UTF-8 \
+te_IN/UTF-8 \
+tg_TJ.UTF-8/UTF-8 \
+tg_TJ/KOI8-T \
+th_TH.UTF-8/UTF-8 \
+th_TH/TIS-620 \
+the_NP/UTF-8 \
+ti_ER/UTF-8 \
+ti_ET/UTF-8 \
+tig_ER/UTF-8 \
+tk_TM/UTF-8 \
+tl_PH.UTF-8/UTF-8 \
+tl_PH/ISO-8859-1 \
+tn_ZA/UTF-8 \
+to_TO/UTF-8 \
+tpi_PG/UTF-8 \
+tr_CY.UTF-8/UTF-8 \
+tr_CY/ISO-8859-9 \
+tr_TR.UTF-8/UTF-8 \
+tr_TR/ISO-8859-9 \
+ts_ZA/UTF-8 \
+tt_RU/UTF-8 \
+tt_RU@iqtelif/UTF-8 \
+ug_CN/UTF-8 \
+uk_UA.UTF-8/UTF-8 \
+uk_UA/KOI8-U \
+unm_US/UTF-8 \
+ur_IN/UTF-8 \
+ur_PK/UTF-8 \
+uz_UZ.UTF-8/UTF-8 \
+uz_UZ/ISO-8859-1 \
+uz_UZ@cyrillic/UTF-8 \
+ve_ZA/UTF-8 \
+vi_VN/UTF-8 \
+wa_BE/ISO-8859-1 \
+wa_BE@euro/ISO-8859-15 \
+wa_BE.UTF-8/UTF-8 \
+wae_CH/UTF-8 \
+wal_ET/UTF-8 \
+wo_SN/UTF-8 \
+xh_ZA.UTF-8/UTF-8 \
+xh_ZA/ISO-8859-1 \
+yi_US.UTF-8/UTF-8 \
+yi_US/CP1255 \
+yo_NG/UTF-8 \
+yue_HK/UTF-8 \
+yuw_PG/UTF-8 \
+zh_CN.GB18030/GB18030 \
+zh_CN.GBK/GBK \
+zh_CN.UTF-8/UTF-8 \
+zh_CN/GB2312 \
+zh_HK.UTF-8/UTF-8 \
+zh_HK/BIG5-HKSCS \
+zh_SG.UTF-8/UTF-8 \
+zh_SG.GBK/GBK \
+zh_SG/GB2312 \
+zh_TW.EUC-TW/EUC-TW \
+zh_TW.UTF-8/UTF-8 \
+zh_TW/BIG5 \
+zu_ZA.UTF-8/UTF-8 \
+zu_ZA/ISO-8859-1 \
diff --git a/SOURCES/bench.mk b/SOURCES/bench.mk
new file mode 100644
index 0000000..dfe46bd
--- /dev/null
+++ b/SOURCES/bench.mk
@@ -0,0 +1,77 @@
+objpfx = $(prefix)/$(ver)/usr/libexec/glibc-benchtests/
+
+bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 ffs ffsll \
+	      log log2 modf pow rint sin sincos sinh sqrt tan tanh
+
+bench-pthread := pthread_once
+
+bench := $(bench-math) $(bench-pthread)
+
+run-bench := $(prefix)/$(ver)/lib64/ld-linux-x86-64.so.2 --library-path $(prefix)/$(ver)/lib64 $${run}
+
+# String function benchmarks.
+string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
+		mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
+		strcat strchr strchrnul strcmp strcpy strcspn strlen \
+		strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \
+		strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok
+string-bench-all := $(string-bench)
+
+stdlib-bench := strtod
+
+benchset := $(string-bench-all) $(stdlib-bench)
+
+bench-malloc := malloc-thread
+
+binaries-bench := $(addprefix $(objpfx)bench-,$(bench))
+binaries-benchset := $(addprefix $(objpfx)bench-,$(benchset))
+binaries-bench-malloc := $(addprefix $(objpfx)bench-,$(bench-malloc))
+
+DETAILED_OPT :=
+
+ifdef DETAILED
+	DETAILED_OPT := -d
+endif
+
+bench: bench-set bench-func bench-malloc
+
+bench-set: $(binaries-benchset)
+	for run in $^; do \
+	  outfile=$(prefix)/$$(basename $${run}.$(ver).out); \
+	  echo "Running $${run}"; \
+	  $(run-bench) > $${outfile}.tmp; \
+	  mv $${outfile}{.tmp,}; \
+	done
+
+bench-malloc: $(binaries-bench-malloc)
+	run=$(objpfx)bench-malloc-thread; \
+	outfile=$(prefix)/$$(basename $${run}.$(ver).out); \
+	for thr in 1 8 16 32; do \
+	  echo "Running $${run} $${thr}"; \
+	  $(run-bench) $${thr} > $${outfile}.tmp; \
+	  mv $${outfile}{.tmp,}; \
+	done
+
+# Build and execute the benchmark functions.  This target generates JSON
+# formatted bench.out.  Each of the programs produce independent JSON output,
+# so one could even execute them individually and process it using any JSON
+# capable language or tool.
+bench-func: $(binaries-bench)
+	{ echo "{\"timing_type\": \"hp-timing\","; \
+	echo " \"functions\": {"; \
+	for run in $^; do \
+	  if ! [ "x$${run}" = "x$<" ]; then \
+	    echo ","; \
+	  fi; \
+	  echo "Running $${run}" >&2; \
+	  $(run-bench) $(DETAILED_OPT); \
+	done; \
+	echo; \
+	echo " }"; \
+	echo "}"; } > $(prefix)/bench.$(ver).out-tmp; \
+	if [ -f $(prefix)/bench.$(ver).out ]; then \
+	  mv -f $(prefix)/bench.$(ver).out{,.old}; \
+	fi; \
+	mv -f $(prefix)/bench.$(ver).out{-tmp,}
+#	scripts/validate_benchout.py bench.out \
+#		scripts/benchout.schema.json
diff --git a/SOURCES/build-locale-archive.c b/SOURCES/build-locale-archive.c
new file mode 100644
index 0000000..9183972
--- /dev/null
+++ b/SOURCES/build-locale-archive.c
@@ -0,0 +1,862 @@
+#define _GNU_SOURCE
+#include <assert.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <locale.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include "../locale/hashval.h"
+#define __LC_LAST 13
+#include "../locale/locarchive.h"
+#include "../crypt/md5.h"
+
+const char *alias_file = DATADIR "/locale/locale.alias";
+const char *locar_file = PREFIX "/lib/locale/locale-archive";
+const char *tmpl_file = PREFIX "/lib/locale/locale-archive.tmpl";
+const char *loc_path = PREFIX "/lib/locale/";
+/* Flags set by `--verbose` option.  */
+int be_quiet = 1;
+int verbose = 0;
+int max_locarchive_open_retry = 10;
+const char *output_prefix;
+
+/* Endianness should have been taken care of by localedef.  We don't need to do
+   additional swapping.  We need this variable exported however, since
+   locarchive.c uses it to determine if it needs to swap endianness of a value
+   before writing to or reading from the archive.  */
+bool swap_endianness_p = false;
+
+static const char *locnames[] =
+  {
+#define DEFINE_CATEGORY(category, category_name, items, a) \
+  [category] = category_name,
+#include "../locale/categories.def"
+#undef  DEFINE_CATEGORY
+  };
+
+static int
+is_prime (unsigned long candidate)
+{
+  /* No even number and none less than 10 will be passed here.  */
+  unsigned long int divn = 3;
+  unsigned long int sq = divn * divn;
+
+  while (sq < candidate && candidate % divn != 0)
+    {
+      ++divn;
+      sq += 4 * divn;
+      ++divn;
+    }
+
+  return candidate % divn != 0;
+}
+
+unsigned long
+next_prime (unsigned long seed)
+{
+  /* Make it definitely odd.  */
+  seed |= 1;
+
+  while (!is_prime (seed))
+    seed += 2;
+
+  return seed;
+}
+
+void
+error (int status, int errnum, const char *message, ...)
+{
+  va_list args;
+
+  va_start (args, message);
+  fflush (stdout);
+  fprintf (stderr, "%s: ", program_invocation_name);
+  vfprintf (stderr, message, args);
+  va_end (args);
+  if (errnum)
+    fprintf (stderr, ": %s", strerror (errnum));
+  putc ('\n', stderr);
+  fflush (stderr);
+  if (status)
+    exit (errnum == EROFS ? 0 : status);
+}
+
+void *
+xmalloc (size_t size)
+{
+  void *p = malloc (size);
+  if (p == NULL)
+    error (EXIT_FAILURE, errno, "could not allocate %zd bytes of memory", size);
+  return p;
+}
+
+static void
+open_tmpl_archive (struct locarhandle *ah)
+{
+  struct stat64 st;
+  int fd;
+  struct locarhead head;
+  const char *archivefname = ah->fname == NULL ? tmpl_file : ah->fname;
+
+  /* Open the archive.  We must have exclusive write access.  */
+  fd = open64 (archivefname, O_RDONLY);
+  if (fd == -1)
+    error (EXIT_FAILURE, errno, "cannot open locale archive template file \"%s\"",
+	   archivefname);
+
+  if (fstat64 (fd, &st) < 0)
+    error (EXIT_FAILURE, errno, "cannot stat locale archive template file \"%s\"",
+	   archivefname);
+
+  /* Read the header.  */
+  if (TEMP_FAILURE_RETRY (read (fd, &head, sizeof (head))) != sizeof (head))
+    error (EXIT_FAILURE, errno, "cannot read archive header");
+
+  ah->fd = fd;
+  ah->mmaped = (head.sumhash_offset
+		+ head.sumhash_size * sizeof (struct sumhashent));
+  if (ah->mmaped > (unsigned long) st.st_size)
+    error (EXIT_FAILURE, 0, "locale archive template file truncated");
+  ah->mmaped = st.st_size;
+  ah->reserved = st.st_size;
+
+  /* Now we know how large the administrative information part is.
+     Map all of it.  */
+  ah->addr = mmap64 (NULL, ah->mmaped, PROT_READ, MAP_SHARED, fd, 0);
+  if (ah->addr == MAP_FAILED)
+    error (EXIT_FAILURE, errno, "cannot map archive header");
+}
+
+/* Open the locale archive.  */
+extern void open_archive (struct locarhandle *ah, bool readonly);
+
+/* Close the locale archive.  */
+extern void close_archive (struct locarhandle *ah);
+
+/* Add given locale data to the archive.  */
+extern int add_locale_to_archive (struct locarhandle *ah, const char *name,
+				  locale_data_t data, bool replace);
+
+extern void add_alias (struct locarhandle *ah, const char *alias,
+		       bool replace, const char *oldname,
+		       uint32_t *locrec_offset_p);
+
+extern struct namehashent *
+insert_name (struct locarhandle *ah,
+	     const char *name, size_t name_len, bool replace);
+
+struct nameent
+{
+  char *name;
+  struct locrecent *locrec;
+};
+
+struct dataent
+{
+  const unsigned char *sum;
+  uint32_t file_offset;
+};
+
+static int
+nameentcmp (const void *a, const void *b)
+{
+  struct locrecent *la = ((const struct nameent *) a)->locrec;
+  struct locrecent *lb = ((const struct nameent *) b)->locrec;
+  uint32_t start_a = -1, end_a = 0;
+  uint32_t start_b = -1, end_b = 0;
+  int cnt;
+
+  for (cnt = 0; cnt < __LC_LAST; ++cnt)
+    if (cnt != LC_ALL)
+      {
+	if (la->record[cnt].offset < start_a)
+	  start_a = la->record[cnt].offset;
+	if (la->record[cnt].offset + la->record[cnt].len > end_a)
+	  end_a = la->record[cnt].offset + la->record[cnt].len;
+      }
+  assert (start_a != (uint32_t)-1);
+  assert (end_a != 0);
+
+  for (cnt = 0; cnt < __LC_LAST; ++cnt)
+    if (cnt != LC_ALL)
+      {
+	if (lb->record[cnt].offset < start_b)
+	  start_b = lb->record[cnt].offset;
+	if (lb->record[cnt].offset + lb->record[cnt].len > end_b)
+	  end_b = lb->record[cnt].offset + lb->record[cnt].len;
+      }
+  assert (start_b != (uint32_t)-1);
+  assert (end_b != 0);
+
+  if (start_a != start_b)
+    return (int)start_a - (int)start_b;
+  return (int)end_a - (int)end_b;
+}
+
+static int
+dataentcmp (const void *a, const void *b)
+{
+  if (((const struct dataent *) a)->file_offset
+      < ((const struct dataent *) b)->file_offset)
+    return -1;
+
+  if (((const struct dataent *) a)->file_offset
+      > ((const struct dataent *) b)->file_offset)
+    return 1;
+
+  return 0;
+}
+
+static int
+sumsearchfn (const void *key, const void *ent)
+{
+  uint32_t keyn = *(uint32_t *)key;
+  uint32_t entn = ((struct dataent *)ent)->file_offset;
+
+  if (keyn < entn)
+    return -1;
+  if (keyn > entn)
+    return 1;
+  return 0;
+}
+
+static void
+compute_data (struct locarhandle *ah, struct nameent *name, size_t sumused,
+	      struct dataent *files, locale_data_t data)
+{
+  int cnt;
+  struct locrecent *locrec = name->locrec;
+  struct dataent *file;
+  data[LC_ALL].addr = ((char *) ah->addr) + locrec->record[LC_ALL].offset;
+  data[LC_ALL].size = locrec->record[LC_ALL].len;
+  for (cnt = 0; cnt < __LC_LAST; ++cnt)
+    if (cnt != LC_ALL)
+      {
+	data[cnt].addr = ((char *) ah->addr) + locrec->record[cnt].offset;
+	data[cnt].size = locrec->record[cnt].len;
+	if (data[cnt].addr >= data[LC_ALL].addr
+	    && data[cnt].addr + data[cnt].size
+	       <= data[LC_ALL].addr + data[LC_ALL].size)
+	  __md5_buffer (data[cnt].addr, data[cnt].size, data[cnt].sum);
+	else
+	  {
+	    file = bsearch (&locrec->record[cnt].offset, files, sumused,
+			    sizeof (*files), sumsearchfn);
+	    if (file == NULL)
+	      error (EXIT_FAILURE, 0, "inconsistent template file");
+	    memcpy (data[cnt].sum, file->sum, sizeof (data[cnt].sum));
+	  }
+      }
+}
+
+static int
+fill_archive (struct locarhandle *tmpl_ah,
+	      const char *fname,
+	      size_t install_langs_count, char *install_langs_list[],
+	      size_t nlist, char *list[],
+	      const char *primary)
+{
+  struct locarhandle ah;
+  struct locarhead *head;
+  int result = 0;
+  struct nameent *names;
+  struct namehashent *namehashtab;
+  size_t cnt, used;
+  struct dataent *files;
+  struct sumhashent *sumhashtab;
+  size_t sumused;
+  struct locrecent *primary_locrec = NULL;
+  struct nameent *primary_nameent = NULL;
+
+  head = tmpl_ah->addr;
+  names = (struct nameent *) malloc (head->namehash_used
+				     * sizeof (struct nameent));
+  files = (struct dataent *) malloc (head->sumhash_used
+				     * sizeof (struct dataent));
+  if (names == NULL || files == NULL)
+    error (EXIT_FAILURE, errno, "could not allocate tables");
+
+  namehashtab = (struct namehashent *) ((char *) tmpl_ah->addr
+					+ head->namehash_offset);
+  sumhashtab = (struct sumhashent *) ((char *) tmpl_ah->addr
+				      + head->sumhash_offset);
+
+  for (cnt = used = 0; cnt < head->namehash_size; ++cnt)
+    if (namehashtab[cnt].locrec_offset != 0)
+      {
+	char * name;
+	int i;
+	assert (used < head->namehash_used);
+        name = tmpl_ah->addr + namehashtab[cnt].name_offset;
+        if (install_langs_count == 0)
+          {
+	    /* Always intstall the entry.  */
+            names[used].name = name;
+            names[used++].locrec
+                = (struct locrecent *) ((char *) tmpl_ah->addr +
+                                        namehashtab[cnt].locrec_offset);
+          }
+        else
+          {
+	    /* Only install the entry if the user asked for it via
+	       --install-langs.  */
+            for (i = 0; i < install_langs_count; i++)
+              {
+		/* Add one for "_" and one for the null terminator.  */
+		size_t len = strlen (install_langs_list[i]) + 2;
+		char *install_lang = (char *)xmalloc (len);
+                strcpy (install_lang, install_langs_list[i]);
+                if (strchr (install_lang, '_') == NULL)
+                  strcat (install_lang, "_");
+                if (strncmp (name, install_lang, strlen (install_lang)) == 0)
+                  {
+                    names[used].name = name;
+                    names[used++].locrec
+		      = (struct locrecent *) ((char *)tmpl_ah->addr
+					      + namehashtab[cnt].locrec_offset);
+                  }
+		free (install_lang);
+              }
+          }
+      }
+
+  /* Sort the names.  */
+  qsort (names, used, sizeof (struct nameent), nameentcmp);
+
+  for (cnt = sumused = 0; cnt < head->sumhash_size; ++cnt)
+    if (sumhashtab[cnt].file_offset != 0)
+      {
+	assert (sumused < head->sumhash_used);
+	files[sumused].sum = (const unsigned char *) sumhashtab[cnt].sum;
+	files[sumused++].file_offset = sumhashtab[cnt].file_offset;
+      }
+
+  /* Sort by file locations.  */
+  qsort (files, sumused, sizeof (struct dataent), dataentcmp);
+
+  /* Open the archive.  This call never returns if we cannot
+     successfully open the archive.  */
+  ah.fname = NULL;
+  if (fname != NULL)
+    ah.fname = fname;
+  open_archive (&ah, false);
+
+  if (primary != NULL)
+    {
+      for (cnt = 0; cnt < used; ++cnt)
+	if (strcmp (names[cnt].name, primary) == 0)
+	  break;
+      if (cnt < used)
+	{
+	  locale_data_t data;
+
+	  compute_data (tmpl_ah, &names[cnt], sumused, files, data);
+	  result |= add_locale_to_archive (&ah, primary, data, 0);
+	  primary_locrec = names[cnt].locrec;
+	  primary_nameent = &names[cnt];
+	}
+    }
+
+  for (cnt = 0; cnt < used; ++cnt)
+    if (&names[cnt] == primary_nameent)
+      continue;
+    else if ((cnt > 0 && names[cnt - 1].locrec == names[cnt].locrec)
+	     || names[cnt].locrec == primary_locrec)
+      {
+	const char *oldname;
+	struct namehashent *namehashent;
+	uint32_t locrec_offset;
+
+	if (names[cnt].locrec == primary_locrec)
+	  oldname = primary;
+	else
+	  oldname = names[cnt - 1].name;
+	namehashent = insert_name (&ah, oldname, strlen (oldname), true);
+	assert (namehashent->name_offset != 0);
+	assert (namehashent->locrec_offset != 0);
+	locrec_offset = namehashent->locrec_offset;
+	add_alias (&ah, names[cnt].name, 0, oldname, &locrec_offset);
+      }
+    else
+      {
+	locale_data_t data;
+
+	compute_data (tmpl_ah, &names[cnt], sumused, files, data);
+	result |= add_locale_to_archive (&ah, names[cnt].name, data, 0);
+      }
+
+  while (nlist-- > 0)
+    {
+      const char *fname = *list++;
+      size_t fnamelen = strlen (fname);
+      struct stat64 st;
+      DIR *dirp;
+      struct dirent64 *d;
+      int seen;
+      locale_data_t data;
+      int cnt;
+
+      /* First see whether this really is a directory and whether it
+	 contains all the require locale category files.  */
+      if (stat64 (fname, &st) < 0)
+	{
+	  error (0, 0, "stat of \"%s\" failed: %s: ignored", fname,
+		 strerror (errno));
+	  continue;
+	}
+      if (!S_ISDIR (st.st_mode))
+	{
+	  error (0, 0, "\"%s\" is no directory; ignored", fname);
+	  continue;
+	}
+
+      dirp = opendir (fname);
+      if (dirp == NULL)
+	{
+	  error (0, 0, "cannot open directory \"%s\": %s: ignored",
+		 fname, strerror (errno));
+	  continue;
+	}
+
+      seen = 0;
+      while ((d = readdir64 (dirp)) != NULL)
+	{
+	  for (cnt = 0; cnt < __LC_LAST; ++cnt)
+	    if (cnt != LC_ALL)
+	      if (strcmp (d->d_name, locnames[cnt]) == 0)
+		{
+		  unsigned char d_type;
+
+		  /* We have an object of the required name.  If it's
+		     a directory we have to look at a file with the
+		     prefix "SYS_".  Otherwise we have found what we
+		     are looking for.  */
+#ifdef _DIRENT_HAVE_D_TYPE
+		  d_type = d->d_type;
+
+		  if (d_type != DT_REG)
+#endif
+		    {
+		      char fullname[fnamelen + 2 * strlen (d->d_name) + 7];
+
+#ifdef _DIRENT_HAVE_D_TYPE
+		      if (d_type == DT_UNKNOWN)
+#endif
+			{
+			  strcpy (stpcpy (stpcpy (fullname, fname), "/"),
+				  d->d_name);
+
+			  if (stat64 (fullname, &st) == -1)
+			    /* We cannot stat the file, ignore it.  */
+			    break;
+
+			  d_type = IFTODT (st.st_mode);
+			}
+
+		      if (d_type == DT_DIR)
+			{
+			  /* We have to do more tests.  The file is a
+			     directory and it therefore must contain a
+			     regular file with the same name except a
+			     "SYS_" prefix.  */
+			  char *t = stpcpy (stpcpy (fullname, fname), "/");
+			  strcpy (stpcpy (stpcpy (t, d->d_name), "/SYS_"),
+				  d->d_name);
+
+			  if (stat64 (fullname, &st) == -1)
+			    /* There is no SYS_* file or we cannot
+			       access it.  */
+			    break;
+
+			  d_type = IFTODT (st.st_mode);
+			}
+		    }
+
+		  /* If we found a regular file (eventually after
+		     following a symlink) we are successful.  */
+		  if (d_type == DT_REG)
+		    ++seen;
+		  break;
+		}
+	}
+
+      closedir (dirp);
+
+      if (seen != __LC_LAST - 1)
+	{
+	  /* We don't have all locale category files.  Ignore the name.  */
+	  error (0, 0, "incomplete set of locale files in \"%s\"",
+		 fname);
+	  continue;
+	}
+
+      /* Add the files to the archive.  To do this we first compute
+	 sizes and the MD5 sums of all the files.  */
+      for (cnt = 0; cnt < __LC_LAST; ++cnt)
+	if (cnt != LC_ALL)
+	  {
+	    char fullname[fnamelen + 2 * strlen (locnames[cnt]) + 7];
+	    int fd;
+
+	    strcpy (stpcpy (stpcpy (fullname, fname), "/"), locnames[cnt]);
+	    fd = open64 (fullname, O_RDONLY);
+	    if (fd == -1 || fstat64 (fd, &st) == -1)
+	      {
+		/* Cannot read the file.  */
+		if (fd != -1)
+		  close (fd);
+		break;
+	      }
+
+	    if (S_ISDIR (st.st_mode))
+	      {
+		char *t;
+		close (fd);
+		t = stpcpy (stpcpy (fullname, fname), "/");
+		strcpy (stpcpy (stpcpy (t, locnames[cnt]), "/SYS_"),
+			locnames[cnt]);
+
+		fd = open64 (fullname, O_RDONLY);
+		if (fd == -1 || fstat64 (fd, &st) == -1
+		    || !S_ISREG (st.st_mode))
+		  {
+		    if (fd != -1)
+		      close (fd);
+		    break;
+		  }
+	      }
+
+	    /* Map the file.  */
+	    data[cnt].addr = mmap64 (NULL, st.st_size, PROT_READ, MAP_SHARED,
+				     fd, 0);
+	    if (data[cnt].addr == MAP_FAILED)
+	      {
+		/* Cannot map it.  */
+		close (fd);
+		break;
+	      }
+
+	    data[cnt].size = st.st_size;
+	    __md5_buffer (data[cnt].addr, st.st_size, data[cnt].sum);
+
+	    /* We don't need the file descriptor anymore.  */
+	    close (fd);
+	  }
+
+      if (cnt != __LC_LAST)
+	{
+	  while (cnt-- > 0)
+	    if (cnt != LC_ALL)
+	      munmap (data[cnt].addr, data[cnt].size);
+
+	  error (0, 0, "cannot read all files in \"%s\": ignored", fname);
+
+	  continue;
+	}
+
+      result |= add_locale_to_archive (&ah, basename (fname), data, 0);
+
+      for (cnt = 0; cnt < __LC_LAST; ++cnt)
+	if (cnt != LC_ALL)
+	  munmap (data[cnt].addr, data[cnt].size);
+    }
+
+  /* We are done.  */
+  close_archive (&ah);
+
+  return result;
+}
+
+void usage()
+{
+  printf ("\
+Usage: build-locale-archive [OPTION]... [TEMPLATE-FILE] [ARCHIVE-FILE]\n\
+ Builds a locale archive from a template file.\n\
+ Options:\n\
+  -h, --help                 Print this usage message.\n\
+  -v, --verbose              Verbose execution.\n\
+  -l, --install-langs=LIST   Only include locales given in LIST into the \n\
+                             locale archive.  LIST is a colon separated list\n\
+                             of locale prefixes, for example \"de:en:ja\".\n\
+                             The special argument \"all\" means to install\n\
+                             all languages and it must be present by itself.\n\
+                             If \"all\" is present with any other language it\n\
+                             will be treated as the name of a locale.\n\
+                             If the --install-langs option is missing, all\n\
+                             locales are installed. The colon separated list\n\
+                             can contain any strings matching the beginning of\n\
+                             locale names.\n\
+                             If a string does not contain a \"_\", it is added.\n\
+                             Examples:\n\
+                               --install-langs=\"en\"\n\
+                                 installs en_US, en_US.iso88591,\n\
+                                 en_US.iso885915, en_US.utf8,\n\
+                                 en_GB ...\n\
+                               --install-langs=\"en_US.utf8\"\n\
+                                 installs only en_US.utf8.\n\
+                               --install-langs=\"ko\"\n\
+                                 installs ko_KR, ko_KR.euckr,\n\
+                                 ko_KR.utf8 but *not* kok_IN\n\
+                                 because \"ko\" does not contain\n\
+                                 \"_\" and it is silently added\n\
+                               --install-langs\"ko:kok\"\n\
+                                 installs ko_KR, ko_KR.euckr,\n\
+                                 ko_KR.utf8, kok_IN, and\n\
+                                 kok_IN.utf8.\n\
+                               --install-langs=\"POSIX\" will\n\
+                                 installs *no* locales at all\n\
+                                 because POSIX matches none of\n\
+                                 the locales. Actually, any string\n\
+                                 matching nothing will do that.\n\
+                                 POSIX and C will always be\n\
+                                 available because they are\n\
+                                 builtin.\n\
+                             Aliases are installed as well,\n\
+                             i.e. --install-langs=\"de\"\n\
+                             will install not only every locale starting with\n\
+                             \"de\" but also the aliases \"deutsch\"\n\
+                             and and \"german\" although the latter does not\n\
+                             start with \"de\".\n\
+\n\
+  If the arguments TEMPLATE-FILE and ARCHIVE-FILE are not given the locations\n\
+  where the glibc used expects these files are used by default.\n\
+");
+}
+
+int main (int argc, char *argv[])
+{
+  char path[4096];
+  DIR *dirp;
+  struct dirent64 *d;
+  struct stat64 st;
+  char *list[16384], *primary;
+  char *lang;
+  int install_langs_count = 0;
+  int i;
+  char *install_langs_arg, *ila_start;
+  char **install_langs_list = NULL;
+  unsigned int cnt = 0;
+  struct locarhandle tmpl_ah;
+  char *new_locar_fname = NULL;
+  size_t loc_path_len = strlen (loc_path);
+
+  while (1)
+    {
+      int c;
+
+      static struct option long_options[] =
+        {
+            {"help",            no_argument,       0, 'h'},
+            {"verbose",         no_argument,       0, 'v'},
+            {"install-langs",   required_argument, 0, 'l'},
+            {0, 0, 0, 0}
+        };
+      /* getopt_long stores the option index here. */
+      int option_index = 0;
+
+      c = getopt_long (argc, argv, "vhl:",
+                       long_options, &option_index);
+
+      /* Detect the end of the options. */
+      if (c == -1)
+        break;
+
+      switch (c)
+        {
+        case 0:
+          printf ("unknown option %s", long_options[option_index].name);
+          if (optarg)
+            printf (" with arg %s", optarg);
+          printf ("\n");
+          usage ();
+          exit (1);
+
+        case 'v':
+          verbose = 1;
+          be_quiet = 0;
+          break;
+
+        case 'h':
+          usage ();
+          exit (0);
+
+        case 'l':
+          install_langs_arg = ila_start = strdup (optarg);
+          /* If the argument to --install-lang is "all", do
+             not limit the list of languages to install and install
+             them all.  We do not support installing a single locale
+	     called "all".  */
+#define MAGIC_INSTALL_ALL "all"
+          if (install_langs_arg != NULL
+	      && install_langs_arg[0] != '\0'
+	      && !(strncmp(install_langs_arg, MAGIC_INSTALL_ALL,
+			   strlen(MAGIC_INSTALL_ALL)) == 0
+		   && strlen (install_langs_arg) == 3))
+            {
+	      /* Count the number of languages we will install.  */
+              while (true)
+                {
+                  lang = strtok(install_langs_arg, ":;,");
+                  if (lang == NULL)
+                    break;
+                  install_langs_count++;
+                  install_langs_arg = NULL;
+                }
+	      free (ila_start);
+
+	      /* Reject an entire string made up of delimiters.  */
+	      if (install_langs_count == 0)
+		break;
+
+	      /* Copy the list.  */
+	      install_langs_list = (char **)xmalloc (sizeof(char *) * install_langs_count);
+	      install_langs_arg = ila_start = strdup (optarg);
+	      install_langs_count = 0;
+	      while (true)
+                {
+                  lang = strtok(install_langs_arg, ":;,");
+                  if (lang == NULL)
+                    break;
+                  install_langs_list[install_langs_count] = lang;
+		  install_langs_count++;
+                  install_langs_arg = NULL;
+                }
+            }
+          break;
+
+        case '?':
+          /* getopt_long already printed an error message. */
+          usage ();
+          exit (0);
+
+        default:
+          abort ();
+        }
+    }
+  tmpl_ah.fname = NULL;
+  if (optind < argc)
+    tmpl_ah.fname = argv[optind];
+  if (optind + 1 < argc)
+    new_locar_fname = argv[optind + 1];
+  if (verbose)
+    {
+      if (tmpl_ah.fname)
+        printf("input archive file specified on command line: %s\n",
+               tmpl_ah.fname);
+      else
+        printf("using default input archive file.\n");
+      if (new_locar_fname)
+        printf("output archive file specified on command line: %s\n",
+               new_locar_fname);
+      else
+        printf("using default output archive file.\n");
+    }
+
+  dirp = opendir (loc_path);
+  if (dirp == NULL)
+    error (EXIT_FAILURE, errno, "cannot open directory \"%s\"", loc_path);
+
+  open_tmpl_archive (&tmpl_ah);
+
+  if (new_locar_fname)
+    unlink (new_locar_fname);
+  else
+    unlink (locar_file);
+  primary = getenv ("LC_ALL");
+  if (primary == NULL)
+    primary = getenv ("LANG");
+  if (primary != NULL)
+    {
+      if (strncmp (primary, "ja", 2) != 0
+	  && strncmp (primary, "ko", 2) != 0
+	  && strncmp (primary, "zh", 2) != 0)
+	{
+	  char *ptr = malloc (strlen (primary) + strlen (".utf8") + 1), *p, *q;
+	  /* This leads to invalid locales sometimes:
+	     de_DE.iso885915@euro -> de_DE.utf8@euro */
+	  if (ptr != NULL)
+	    {
+	      p = ptr;
+	      q = primary;
+	      while (*q && *q != '.' && *q != '@')
+		*p++ = *q++;
+	      if (*q == '.')
+		while (*q && *q != '@')
+		  q++;
+	      p = stpcpy (p, ".utf8");
+	      strcpy (p, q);
+	      primary = ptr;
+	    }
+	  else
+	    primary = NULL;
+	}
+    }
+
+  memcpy (path, loc_path, loc_path_len);
+
+  while ((d = readdir64 (dirp)) != NULL)
+    {
+      if (strcmp (d->d_name, ".") == 0 || strcmp (d->d_name, "..") == 0)
+	continue;
+      if (strchr (d->d_name, '_') == NULL)
+	continue;
+
+      size_t d_name_len = strlen (d->d_name);
+      if (loc_path_len + d_name_len + 1 > sizeof (path))
+	{
+	  error (0, 0, "too long filename \"%s\"", d->d_name);
+	  continue;
+	}
+
+      memcpy (path + loc_path_len, d->d_name, d_name_len + 1);
+      if (stat64 (path, &st) < 0)
+	{
+	  error (0, errno, "cannot stat \"%s\"", path);
+	  continue;
+	}
+      if (! S_ISDIR (st.st_mode))
+	continue;
+      if (cnt == 16384)
+	{
+	  error (0, 0, "too many directories in \"%s\"", loc_path);
+	  break;
+	}
+      list[cnt] = strdup (path);
+      if (list[cnt] == NULL)
+	{
+	  error (0, errno, "cannot add file to list \"%s\"", path);
+	  continue;
+	}
+      if (primary != NULL && cnt > 0 && strcmp (primary, d->d_name) == 0)
+	{
+	  char *p = list[0];
+	  list[0] = list[cnt];
+	  list[cnt] = p;
+	}
+      cnt++;
+    }
+  closedir (dirp);
+  /* Store the archive to the file specified as the second argument on the
+     command line or the default locale archive.  */
+  fill_archive (&tmpl_ah, new_locar_fname,
+                install_langs_count, install_langs_list,
+                cnt, list, primary);
+  close_archive (&tmpl_ah);
+  truncate (tmpl_file, 0);
+  if (install_langs_count > 0)
+    {
+      free (ila_start);
+      free (install_langs_list);
+    }
+  char *tz_argv[] = { "/usr/sbin/tzdata-update", NULL };
+  execve (tz_argv[0], (char *const *)tz_argv, (char *const *)&tz_argv[1]);
+  exit (0);
+}
diff --git a/SOURCES/glibc-asflags.patch b/SOURCES/glibc-asflags.patch
new file mode 100644
index 0000000..9bd733f
--- /dev/null
+++ b/SOURCES/glibc-asflags.patch
@@ -0,0 +1,25 @@
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Jul 4 16:16:57 2018 +0200
+
+    Makeconfig (ASFLAGS): Always append required assembler flags.
+
+Submitted upstream here:
+
+  https://sourceware.org/ml/libc-alpha/2018-07/msg00077.html
+
+Otherwise, we lose essential flags such as -Wa,--noexecstack due to
+the way += works in make due to the ASFLAGS command line override.
+
+diff --git a/Makeconfig b/Makeconfig
+index b0b27f0113ac18b8..92e76d6200bbcd5b 100644
+--- a/Makeconfig
++++ b/Makeconfig
+@@ -1047,7 +1047,7 @@ endif
+ ifndef ASFLAGS
+ ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
+ endif
+-ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)
++override ASFLAGS += -Werror=undef $(ASFLAGS-config) $(asflags-cpu)
+ 
+ ifndef BUILD_CC
+ BUILD_CC = $(CC)
diff --git a/SOURCES/glibc-bench-compare b/SOURCES/glibc-bench-compare
new file mode 100755
index 0000000..84e3aba
--- /dev/null
+++ b/SOURCES/glibc-bench-compare
@@ -0,0 +1,153 @@
+#!/usr/bin/bash
+# This script can be invoked as follows:
+#
+# glibc-bench-compare [options] <BUILD> [BUILD]
+#
+# Options may be one of the following:
+#
+# -t		The BUILD arguments are task ids and not a version-release string
+# -a ARCH	Do comparison for ARCH architecture
+#
+# If any of the above options are given, both BUILD arguments must be given.
+# Otherwise, if only one BUILD is specified, then it is compared against the
+# installed glibc.
+
+# Silence the pushd/popd messages
+pushd() {
+	command pushd "$@" > /dev/null 2>&1
+}
+
+popd() {
+	command popd "$@" > /dev/null 2>&1
+}
+
+# Clean up any downloaded files before we exit
+trap "rm -rf /tmp/glibc-bench-compare.$BASHPID.*" EXIT
+
+task=0
+arch=$(uname -i)
+options=0
+path=0
+installed=
+
+# Look for any commandline options
+while getopts ":tpa:" opt; do
+	case $opt in
+		p)
+		path=1
+		;;
+		t)
+		task=1
+		options=1
+		echo "Not implemented."
+		exit 1
+		;;
+		a)
+		arch=$OPTARG
+		options=1
+		;;
+		*)
+		;;
+	esac
+done
+
+# Done, now shift all option arguments out.
+shift $((OPTIND-1))
+
+if [ $# -gt 2 ] || [ $# -eq 0 ] || [ $# -lt 2 -a $options -eq 1 ]; then
+	echo "Usage: $0 [OPTIONS] <old> [new]"
+	echo
+	echo "OPTIONS:"
+	echo -e "\t-t\tCompare two brew tasks"
+	echo -e "\t-a ARCH\tGet rpms for the ARCH architecture"
+	echo -e "\t-p\tCompare built rpms in two paths."
+	echo -e "\t\tThis minimally needs glibc, glibc-common and glibc-benchtests"
+	exit 1
+fi
+
+if [ -z $2 ]; then
+	new="$1"
+	old=$(rpm --queryformat "%{VERSION}-%{RELEASE}\n" -q glibc | head -1)
+	installed=$old
+else
+	new="$2"
+	old="$1"
+fi
+
+decompress_rpms() {
+	# We were given a path to the rpms.  Figure out the version-release and
+	# decompress the rpms.
+	if [ -n $1 ]; then
+		vr=$(rpm --queryformat="%{VERSION}-%{RELEASE}" -qp $1/glibc-2*.rpm | head -1)
+		mkdir $vr && pushd $vr
+	fi
+
+	for r in $1*.rpm; do
+		( rpm2cpio $r | cpio -di ) > /dev/null
+	done
+
+	if [ -n $1 ]; then
+		popd
+		echo $vr
+	fi
+}
+
+# Get rpms for a build and decompress them
+get_build() {
+	echo "Processing build $1"
+	mkdir $1 && pushd $1
+	brew buildinfo "glibc-$1" |
+	sed -n -e "s|/mnt/koji\(.\+$arch.\+\)|http://kojipkgs.fedoraproject.org\1|p" |
+	while read url; do
+		echo "Downloading $url"
+		wget -q $url
+	done
+	decompress_rpms
+
+	echo "Removing rpms"
+	rm -f $1/*.rpm
+
+	popd
+}
+
+# Run benchmarks for a build
+run_bench() {
+	if [ -z $1 ]; then
+		make DETAILED=1 ver=$installed prefix= -f /usr/libexec/glibc-benchtests/bench.mk bench
+	else
+		make DETAILED=1 ver=$1 prefix=$PWD -f $1/usr/libexec/glibc-benchtests/bench.mk bench
+	fi
+}
+
+# Get absolute paths if needed, since we will change into the working directory
+# next.
+if [ $path -eq 1 ]; then
+	old_path=$(realpath $old)/
+	new_path=$(realpath $new)/
+fi
+
+tmpdir=$(mktemp -p /tmp -d glibc-bench-compare.$$.XXXX)
+pushd $tmpdir
+
+# Get both builds.
+if [ $path -eq 0 ]; then
+	if [ -z $installed ]; then
+		get_build $old
+	fi
+	get_build $new
+else
+	old=$(decompress_rpms $old_path)
+	new=$(decompress_rpms $new_path)
+fi
+
+# make bench for each of those.
+if [ -z $installed ]; then
+	run_bench $old
+else
+	run_bench
+fi
+run_bench $new
+
+# Now run the comparison script.
+$old/usr/libexec/glibc-benchtests/compare_bench.py $old/usr/libexec/glibc-benchtests/benchout.schema.json \
+	bench.$old.out bench.$new.out
diff --git a/SOURCES/glibc-c-utf8-locale.patch b/SOURCES/glibc-c-utf8-locale.patch
new file mode 100644
index 0000000..7215e15
--- /dev/null
+++ b/SOURCES/glibc-c-utf8-locale.patch
@@ -0,0 +1,286 @@
+Short description: Add C.UTF-8 support.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-submitted
+
+This patch needs to upstream as part of Carlos O'Donell
+<carlos@redhat.com>'s work on enabling upstream C.UTF-8 support. This
+work is currently blocked on cleaning up the test results to prove that
+full code-point sorting is working as intended.
+
+Note that this patch does not provide full code-point sorting as
+expected.
+
+This patch needs to upstream as soon as possible since it would be nice
+to have this in F29 and fixed.
+
+From 2eda7b462b415105f5a05c1323372d4e39d46439 Mon Sep 17 00:00:00 2001
+From: Mike FABIAN <mfabian@redhat.com>
+Date: Mon, 10 Aug 2015 15:58:12 +0200
+Subject: [PATCH] Add a C.UTF-8 locale
+
+---
+ localedata/SUPPORTED |   1 +
+ localedata/locales/C | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 239 insertions(+)
+ create mode 100644 localedata/locales/C
+
+diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED
+index 8ca023e..2a78391 100644
+--- a/localedata/SUPPORTED
++++ b/localedata/SUPPORTED
+@@ -1,6 +1,7 @@
+ # This file names the currently supported and somewhat tested locales.
+ # If you have any additions please file a glibc bug report.
+ SUPPORTED-LOCALES=\
++C.UTF-8/UTF-8 \
+ aa_DJ.UTF-8/UTF-8 \
+ aa_DJ/ISO-8859-1 \
+ aa_ER/UTF-8 \
+diff --git a/localedata/locales/C b/localedata/locales/C
+new file mode 100644
+index 0000000..fdf460e
+--- /dev/null
++++ b/localedata/locales/C
+@@ -0,0 +1,238 @@
++escape_char /
++comment_char %
++% Locale for C locale in UTF-8
++
++LC_IDENTIFICATION
++title      "C locale"
++source     ""
++address    ""
++contact    ""
++email      "mfabian@redhat.com"
++tel        ""
++fax        ""
++language   "C"
++territory  ""
++revision   "1.0"
++date       "2015-08-10"
++%
++category  "i18n:2012";LC_IDENTIFICATION
++category  "i18n:2012";LC_CTYPE
++category  "i18n:2012";LC_COLLATE
++category  "i18n:2012";LC_TIME
++category  "i18n:2012";LC_NUMERIC
++category  "i18n:2012";LC_MONETARY
++category  "i18n:2012";LC_MESSAGES
++category  "i18n:2012";LC_PAPER
++category  "i18n:2012";LC_NAME
++category  "i18n:2012";LC_ADDRESS
++category  "i18n:2012";LC_TELEPHONE
++category  "i18n:2012";LC_MEASUREMENT
++END LC_IDENTIFICATION
++
++LC_CTYPE
++copy "i18n"
++
++translit_start
++include "translit_combining";""
++translit_end
++
++END LC_CTYPE
++
++LC_COLLATE
++order_start forward
++<U0000>
++..
++<UFFFF>
++<U10000>
++..
++<U1FFFF>
++<U20000>
++..
++<U2FFFF>
++<UE0000>
++..
++<UEFFFF>
++<UF0000>
++..
++<UFFFFF>
++<U100000>
++..
++<U10FFFF>
++UNDEFINED
++order_end
++END LC_COLLATE
++
++LC_MONETARY
++% This is the 14652 i18n fdcc-set definition for
++% the LC_MONETARY category
++% (except for the int_curr_symbol and currency_symbol, they are empty in
++% the 14652 i18n fdcc-set definition and also empty in
++% glibc/locale/C-monetary.c. But localedef complains in that case).
++%
++% Using "USD" for int_curr_symbol. But maybe "XXX" would be better?
++% XXX is "No currency" (https://en.wikipedia.org/wiki/ISO_4217)
++int_curr_symbol     "<U0055><U0053><U0044><U0020>"
++% Using "$" for currency_symbol. But maybe <U00A4> would be better?
++% U+00A4 is the "generic currency symbol"
++% (https://en.wikipedia.org/wiki/Currency_sign_%28typography%29)
++currency_symbol     "<U0024>"
++mon_decimal_point   "<U002E>"
++mon_thousands_sep   ""
++mon_grouping        -1
++positive_sign       ""
++negative_sign       "<U002D>"
++int_frac_digits     -1
++frac_digits         -1
++p_cs_precedes       -1
++int_p_sep_by_space  -1
++p_sep_by_space      -1
++n_cs_precedes       -1
++int_n_sep_by_space  -1
++n_sep_by_space      -1
++p_sign_posn         -1
++n_sign_posn         -1
++%
++END LC_MONETARY
++
++LC_NUMERIC
++% This is the POSIX Locale definition for
++% the LC_NUMERIC category.
++%
++decimal_point   "<U002E>"
++thousands_sep   ""
++grouping        -1
++END LC_NUMERIC
++
++LC_TIME
++% This is the POSIX Locale definition for
++% the LC_TIME category.
++%
++% Abbreviated weekday names (%a)
++abday       "<U0053><U0075><U006E>";"<U004D><U006F><U006E>";/
++            "<U0054><U0075><U0065>";"<U0057><U0065><U0064>";/
++            "<U0054><U0068><U0075>";"<U0046><U0072><U0069>";/
++            "<U0053><U0061><U0074>"
++
++% Full weekday names (%A)
++day         "<U0053><U0075><U006E><U0064><U0061><U0079>";/
++            "<U004D><U006F><U006E><U0064><U0061><U0079>";/
++            "<U0054><U0075><U0065><U0073><U0064><U0061><U0079>";/
++            "<U0057><U0065><U0064><U006E><U0065><U0073><U0064><U0061><U0079>";/
++            "<U0054><U0068><U0075><U0072><U0073><U0064><U0061><U0079>";/
++            "<U0046><U0072><U0069><U0064><U0061><U0079>";/
++            "<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>"
++
++% Abbreviated month names (%b)
++abmon       "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
++            "<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/
++            "<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/
++            "<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
++            "<U0053><U0065><U0070>";"<U004F><U0063><U0074>";/
++            "<U004E><U006F><U0076>";"<U0044><U0065><U0063>"
++
++% Full month names (%B)
++mon         "<U004A><U0061><U006E><U0075><U0061><U0072><U0079>";/
++            "<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0079>";/
++            "<U004D><U0061><U0072><U0063><U0068>";/
++            "<U0041><U0070><U0072><U0069><U006C>";/
++            "<U004D><U0061><U0079>";/
++            "<U004A><U0075><U006E><U0065>";/
++            "<U004A><U0075><U006C><U0079>";/
++            "<U0041><U0075><U0067><U0075><U0073><U0074>";/
++            "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/
++            "<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/
++            "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
++            "<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
++
++% Week description, consists of three fields:
++% 1. Number of days in a week.
++% 2. Gregorian date that is a first weekday (19971130 for Sunday, 19971201 for Monday).
++% 3. The weekday number to be contained in the first week of the year.
++%
++% ISO 8601 conforming applications should use the values 7, 19971201 (a
++% Monday), and 4 (Thursday), respectively.
++week    7;19971201;4
++first_weekday	1
++first_workday	1
++
++% Appropriate date and time representation (%c)
++%	"%a %b %e %H:%M:%S %Y"
++d_t_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0059>"
++
++% Appropriate date representation (%x)
++%	"%m/%d/%y"
++d_fmt   "<U0025><U006D><U002F><U0025><U0064><U002F><U0025><U0079>"
++
++% Appropriate time representation (%X)
++%	"%H:%M:%S"
++t_fmt   "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
++
++% Appropriate AM/PM time representation (%r)
++%	"%I:%M:%S %p"
++t_fmt_ampm "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0070>"
++
++% Equivalent of AM/PM (%p)      "AM"/"PM"
++%
++am_pm	"<U0041><U004D>";"<U0050><U004D>"
++
++% Appropriate date representation (date(1))   "%a %b %e %H:%M:%S %Z %Y"
++date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U0020><U0025><U0059>"
++END LC_TIME
++
++LC_MESSAGES
++% This is the POSIX Locale definition for
++% the LC_NUMERIC category.
++%
++yesexpr "<U005E><U005B><U0079><U0059><U005D>"
++noexpr  "<U005E><U005B><U006E><U004E><U005D>"
++yesstr  "<U0059><U0065><U0073>"
++nostr   "<U004E><U006F>"
++END LC_MESSAGES
++
++LC_PAPER
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_PAPER category.
++% (A4 paper, this is also used in the built in C/POSIX
++% locale in glibc/locale/C-paper.c)
++height   297
++width    210
++END LC_PAPER
++
++LC_NAME
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_NAME category.
++% "%p%t%g%t%m%t%f"
++% (also used in the built in C/POSIX locale in glibc/locale/C-name.c)
++name_fmt    "<U0025><U0070><U0025><U0074><U0025><U0067><U0025><U0074>/
++<U0025><U006D><U0025><U0074><U0025><U0066>"
++END LC_NAME
++
++LC_ADDRESS
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_ADDRESS category.
++% "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N"
++% (also used in the built in C/POSIX locale in glibc/locale/C-address.c)
++postal_fmt    "<U0025><U0061><U0025><U004E><U0025><U0066><U0025><U004E>/
++<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/
++<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
++<U004E><U0025><U0043><U002D><U0025><U007A><U0020><U0025><U0054><U0025>/
++<U004E><U0025><U0063><U0025><U004E>"
++END LC_ADDRESS
++
++LC_TELEPHONE
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_TELEPHONE category.
++% "+%c %a %l"
++tel_int_fmt    "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
++<U006C>"
++% (also used in the built in C/POSIX locale in glibc/locale/C-telephone.c)
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++% This is the ISO/IEC 14652 "i18n" definition for
++% the LC_MEASUREMENT category.
++% (same as in the built in C/POSIX locale in glibc/locale/C-measurement.c)
++%metric
++measurement    1
++END LC_MEASUREMENT
++
+-- 
+2.4.3
+
diff --git a/SOURCES/glibc-cs-path.patch b/SOURCES/glibc-cs-path.patch
new file mode 100644
index 0000000..aafa741
--- /dev/null
+++ b/SOURCES/glibc-cs-path.patch
@@ -0,0 +1,15 @@
+Short description: Adjust CS_PATH return value.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+In Fedora we should return only /usr/bin because /bin is just a symlink
+to /usr/bin after MoveToUsr transition (which glibc has not really
+completed).
+
+diff -pruN a/sysdeps/unix/confstr.h b/sysdeps/unix/confstr.h
+--- a/sysdeps/unix/confstr.h	2012-12-25 08:32:13.000000000 +0530
++++ b/sysdeps/unix/confstr.h	2014-09-05 20:02:55.698275219 +0530
+@@ -1 +1 @@
+-#define	CS_PATH	"/bin:/usr/bin"
++#define	CS_PATH	"/usr/bin"
diff --git a/SOURCES/glibc-fedora-__libc_multiple_libcs.patch b/SOURCES/glibc-fedora-__libc_multiple_libcs.patch
new file mode 100644
index 0000000..256ef20
--- /dev/null
+++ b/SOURCES/glibc-fedora-__libc_multiple_libcs.patch
@@ -0,0 +1,91 @@
+Short description: Cleanup use of _dl_starting_up.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: https://sourceware.org/ml/libc-alpha/2014-02/msg00589.html
+
+Upstream discussions:
+https://sourceware.org/ml/libc-alpha/2014-02/msg00580.html
+
+Based on the following commit:
+~~~
+From 16552c01a66633c9e412984d9d92616bd4e5303c Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@redhat.com>
+Date: Fri, 11 Jun 2010 11:04:11 +0200
+Subject: [PATCH] Properly set __libc_multiple_libcs
+
+	* elf/rtld.c (_dl_starting_up): Always define.
+	(dl_main): Always set _dl_starting_up.
+	* elf/dl-support.c (_dl_starting_up): Always define.
+	* elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
+
+---
+ChangeLog        |    7 +++++++
+elf/dl-init.c    |    4 ----
+elf/dl-support.c |    2 --
+elf/rtld.c       |    4 ----
+4 files changed, 7 insertions(+), 10 deletions(-)
+~~~
+
+This patch needs to go upstream to get cleaned up, but has always involed
+analysis of the GNU/Hurd parts of the change and that stalled out, but
+perhaps with build-many-glibcs we can now test these changes more easily.
+
+Index: b/elf/dl-init.c
+===================================================================
+--- a/elf/dl-init.c
++++ b/elf/dl-init.c
+@@ -119,8 +119,6 @@ _dl_init (struct link_map *main_map, int
+   while (i-- > 0)
+     call_init (main_map->l_initfini[i], argc, argv, env);
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+   /* Finished starting up.  */
+   _dl_starting_up = 0;
+-#endif
+ }
+Index: b/elf/dl-support.c
+===================================================================
+--- a/elf/dl-support.c
++++ b/elf/dl-support.c
+@@ -117,10 +117,8 @@ struct r_scope_elem _dl_initial_searchli
+     .r_nlist = 1,
+   };
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+ /* Nonzero during startup.  */
+ int _dl_starting_up = 1;
+-#endif
+ 
+ /* Random data provided by the kernel.  */
+ void *_dl_random;
+Index: b/elf/rtld.c
+===================================================================
+--- a/elf/rtld.c
++++ b/elf/rtld.c
+@@ -214,7 +214,6 @@ audit_list_iter_next (struct audit_list_
+   return iter->previous->name;
+ }
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+ /* Set nonzero during loading and initialization of executable and
+    libraries, cleared before the executable's entry point runs.  This
+    must not be initialized to nonzero, because the unused dynamic
+@@ -224,7 +223,6 @@ audit_list_iter_next (struct audit_list_
+    never be called.  */
+ int _dl_starting_up = 0;
+ rtld_hidden_def (_dl_starting_up)
+-#endif
+ 
+ /* This is the structure which defines all variables global to ld.so
+    (except those which cannot be added for some reason).  */
+@@ -898,10 +896,8 @@ dl_main (const ElfW(Phdr) *phdr,
+   /* Process the environment variable which control the behaviour.  */
+   process_envvars (&mode);
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+   /* Set up a flag which tells we are just starting.  */
+   _dl_starting_up = 1;
+-#endif
+ 
+   if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
+     {
diff --git a/SOURCES/glibc-fedora-linux-tcsetattr.patch b/SOURCES/glibc-fedora-linux-tcsetattr.patch
new file mode 100644
index 0000000..3ae7e27
--- /dev/null
+++ b/SOURCES/glibc-fedora-linux-tcsetattr.patch
@@ -0,0 +1,61 @@
+Short description: Fedora-specific workaround for kernel pty bug.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-submitted
+
+This is a Fedora-specific workaround for a kernel bug where calling
+ioctl on a pty will silently ignore the invalid c_cflag. The
+workaround is to use TCGETS to verify the setting matches. This is
+not upstream and needs to either be removed or submitted upstream
+after analysis.
+
+Index: b/sysdeps/unix/sysv/linux/tcsetattr.c
+===================================================================
+--- a/sysdeps/unix/sysv/linux/tcsetattr.c
++++ b/sysdeps/unix/sysv/linux/tcsetattr.c
+@@ -45,6 +45,7 @@ __tcsetattr (int fd, int optional_action
+ {
+   struct __kernel_termios k_termios;
+   unsigned long int cmd;
++  int retval;
+ 
+   switch (optional_actions)
+     {
+@@ -75,7 +76,36 @@ __tcsetattr (int fd, int optional_action
+   memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
+ 	  __KERNEL_NCCS * sizeof (cc_t));
+ 
+-  return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++  retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++
++  if (retval == 0 && cmd == TCSETS)
++    {
++      /* The Linux kernel has a bug which silently ignore the invalid
++        c_cflag on pty. We have to check it here. */
++      int save = errno;
++      retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
++      if (retval)
++       {
++         /* We cannot verify if the setting is ok. We don't return
++            an error (?). */
++         __set_errno (save);
++         retval = 0;
++       }
++      else if ((termios_p->c_cflag & (PARENB | CREAD))
++              != (k_termios.c_cflag & (PARENB | CREAD))
++              || ((termios_p->c_cflag & CSIZE)
++                  && ((termios_p->c_cflag & CSIZE)
++                      != (k_termios.c_cflag & CSIZE))))
++       {
++         /* It looks like the Linux kernel silently changed the
++            PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
++            error. */
++         __set_errno (EINVAL);
++         retval = -1;
++       }
++    }
++
++  return retval;
+ }
+ weak_alias (__tcsetattr, tcsetattr)
+ libc_hidden_def (tcsetattr)
diff --git a/SOURCES/glibc-fedora-localedata-rh61908.patch b/SOURCES/glibc-fedora-localedata-rh61908.patch
new file mode 100644
index 0000000..518253d
--- /dev/null
+++ b/SOURCES/glibc-fedora-localedata-rh61908.patch
@@ -0,0 +1,49 @@
+Short description: Add 4 ISO-8859-15 locales to SUPPORTED for Euro symbol.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #61908
+Upstream status: not-needed
+
+Very early RHL 7.3 requirement to add these locales so users can
+get access to Euro symbol. We should review this bug and decide if
+the UTF-8 locales are now serving the same purpose and drop the
+additional locales.
+
+* Tue Mar 26 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-28
+- add a couple of .ISO-8859-15 locales (#61908)
+
+diff -Nrup a/localedata/SUPPORTED b/localedata/SUPPORTED
+--- a/localedata/SUPPORTED	2012-11-25 12:59:31.000000000 -0700
++++ b/localedata/SUPPORTED	2012-11-26 12:58:43.298223018 -0700
+@@ -89,6 +89,7 @@ cy_GB.UTF-8/UTF-8 \
+ cy_GB/ISO-8859-14 \
+ da_DK.UTF-8/UTF-8 \
+ da_DK/ISO-8859-1 \
++da_DK.ISO-8859-15/ISO-8859-15 \
+ de_AT.UTF-8/UTF-8 \
+ de_AT/ISO-8859-1 \
+ de_AT@euro/ISO-8859-15 \
+@@ -121,6 +122,7 @@ en_DK.UTF-8/UTF-8 \
+ en_DK/ISO-8859-1 \
+ en_GB.UTF-8/UTF-8 \
+ en_GB/ISO-8859-1 \
++en_GB.ISO-8859-15/ISO-8859-15 \
+ en_HK.UTF-8/UTF-8 \
+ en_HK/ISO-8859-1 \
+ en_IE.UTF-8/UTF-8 \
+@@ -136,6 +138,7 @@ en_SG.UTF-8/UTF-8 \
+ en_SG/ISO-8859-1 \
+ en_US.UTF-8/UTF-8 \
+ en_US/ISO-8859-1 \
++en_US.ISO-8859-15/ISO-8859-15 \
+ en_ZA.UTF-8/UTF-8 \
+ en_ZA/ISO-8859-1 \
+ en_ZM/UTF-8 \
+@@ -385,6 +388,7 @@ sv_FI/ISO-8859-1 \
+ sv_FI@euro/ISO-8859-15 \
+ sv_SE.UTF-8/UTF-8 \
+ sv_SE/ISO-8859-1 \
++sv_SE.ISO-8859-15/ISO-8859-15 \
+ sw_KE/UTF-8 \
+ sw_TZ/UTF-8 \
+ szl_PL/UTF-8 \
diff --git a/SOURCES/glibc-fedora-localedef.patch b/SOURCES/glibc-fedora-localedef.patch
new file mode 100644
index 0000000..787951f
--- /dev/null
+++ b/SOURCES/glibc-fedora-localedef.patch
@@ -0,0 +1,21 @@
+Short description: Fedora-specific glibc install locale changes.
+Author(s):  Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+The Fedora glibc build and install does not need the normal install
+behaviour which updates the locale archive. The Fedora install phase
+in the spec file of the rpm will handle this manually.
+
+diff --git a/localedata/Makefile b/localedata/Makefile
+index a5f3c92d58954dfc..56719c7c714aa0f1 100644
+--- a/localedata/Makefile
++++ b/localedata/Makefile
+@@ -218,6 +218,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-locales-dir
+ 	echo -n '...'; \
+ 	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
+ 	$(LOCALEDEF) $$flags --alias-file=../intl/locale.alias \
++		     --no-archive \
+ 		     -i locales/$$input -f charmaps/$$charset \
+ 		     $(addprefix --prefix=,$(install_root)) $$locale \
+ 	&& echo ' done'; \
diff --git a/SOURCES/glibc-fedora-locarchive.patch b/SOURCES/glibc-fedora-locarchive.patch
new file mode 100644
index 0000000..299b0f0
--- /dev/null
+++ b/SOURCES/glibc-fedora-locarchive.patch
@@ -0,0 +1,46 @@
+Short description: Allow access to internal locale archive functions.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+This is a part of commit glibc-2.3.3-1492-ga891c7b,
+needed for fedora/build-locale-archive.c only.
+
+2007-04-16  Jakub Jelinek  <jakub@redhat.com>
+
+	* locale/programs/locarchive.c (add_alias, insert_name): Remove static.
+
+diff -Nrup a/locale/programs/locarchive.c b/locale/programs/locarchive.c
+--- a/locale/programs/locarchive.c	2012-06-05 07:42:49.000000000 -0600
++++ b/locale/programs/locarchive.c	2012-06-07 12:15:21.585319540 -0600
+@@ -252,9 +252,9 @@ oldlocrecentcmp (const void *a, const vo
+ /* forward decls for below */
+ static uint32_t add_locale (struct locarhandle *ah, const char *name,
+ 			    locale_data_t data, bool replace);
+-static void add_alias (struct locarhandle *ah, const char *alias,
+-		       bool replace, const char *oldname,
+-		       uint32_t *locrec_offset_p);
++void add_alias (struct locarhandle *ah, const char *alias,
++		bool replace, const char *oldname,
++		uint32_t *locrec_offset_p);
+ 
+ 
+ static bool
+@@ -635,7 +635,7 @@ close_archive (struct locarhandle *ah)
+ #include "../../intl/explodename.c"
+ #include "../../intl/l10nflist.c"
+ 
+-static struct namehashent *
++struct namehashent *
+ insert_name (struct locarhandle *ah,
+ 	     const char *name, size_t name_len, bool replace)
+ {
+@@ -693,7 +693,7 @@ insert_name (struct locarhandle *ah,
+   return &namehashtab[idx];
+ }
+ 
+-static void
++void
+ add_alias (struct locarhandle *ah, const char *alias, bool replace,
+ 	   const char *oldname, uint32_t *locrec_offset_p)
+ {
diff --git a/SOURCES/glibc-fedora-manual-dircategory.patch b/SOURCES/glibc-fedora-manual-dircategory.patch
new file mode 100644
index 0000000..11c2656
--- /dev/null
+++ b/SOURCES/glibc-fedora-manual-dircategory.patch
@@ -0,0 +1,31 @@
+Short description: Place glibc info into "Libraries" category.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+The category names for libraries is completely random including
+"Libraries", "GNU Libraries", "GNU libraries", and "Software libraries."
+In the GNU info manual the "Software libraries" category is given as an
+example, but really we need to standardize on a category for upstream.
+I suggest we drop this change after some upstream discussion.
+
+From 4820b9175535e13df79ce816106016040014916e Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Fri, 3 Nov 2006 16:31:21 +0000
+Subject: [PATCH] Change @dircategory.
+
+---
+ manual/libc.texinfo |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- a/manual/libc.texinfo
++++ b/manual/libc.texinfo
+@@ -7,7 +7,7 @@
+ @include macros.texi
+ 
+ @comment Tell install-info what to do.
+-@dircategory Software libraries
++@dircategory Libraries
+ @direntry
+ * Libc: (libc).                 C library.
+ @end direntry
diff --git a/SOURCES/glibc-fedora-nis-rh188246.patch b/SOURCES/glibc-fedora-nis-rh188246.patch
new file mode 100644
index 0000000..5ec2237
--- /dev/null
+++ b/SOURCES/glibc-fedora-nis-rh188246.patch
@@ -0,0 +1,31 @@
+Short description: Fedora-specific enabling batch read in NSS.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #188246
+Upstream status: not-submitted
+
+Enable batch read in NSS. It's not clear if this is always a win or
+just a win for NIS+, this needs to be analyzed and sent upstream or
+removed.
+
+From baba5d9461d4e8a581ac26fe4412ad783ffc73e7 Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Mon, 1 May 2006 08:02:53 +0000
+Subject: [PATCH] Enable SETENT_BATCH_READ nis/nss option by default
+
+* Mon May  1 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-4
+- SETENT_BATCH_READ /etc/default/nss option for speeding up
+  some usages of NIS+ (#188246)
+
+diff --git a/nis/nss b/nis/nss
+--- a/nis/nss
++++ b/nis/nss
+@@ -25,7 +25,7 @@
+ #  memory with every getXXent() call.  Otherwise each getXXent() call
+ #  might result into a network communication with the server to get
+ #  the next entry.
+-#SETENT_BATCH_READ=TRUE
++SETENT_BATCH_READ=TRUE
+ #
+ # ADJUNCT_AS_SHADOW
+ #  If set to TRUE, the passwd routines in the NIS NSS module will not
diff --git a/SOURCES/glibc-fedora-nscd.patch b/SOURCES/glibc-fedora-nscd.patch
new file mode 100644
index 0000000..6f8f764
--- /dev/null
+++ b/SOURCES/glibc-fedora-nscd.patch
@@ -0,0 +1,20 @@
+Short description: NSCD must use nscd user.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+Fedora-specific configuration adjustment to introduce the nscd user.
+(Upstream does not assume this user exists.)
+
+diff -Nrup a/nscd/nscd.conf b/nscd/nscd.conf
+--- a/nscd/nscd.conf	2012-06-05 07:42:49.000000000 -0600
++++ b/nscd/nscd.conf	2012-06-07 12:15:21.818318670 -0600
+@@ -33,7 +33,7 @@
+ #	logfile			/var/log/nscd.log
+ #	threads			4
+ #	max-threads		32
+-#	server-user		nobody
++	server-user		nscd
+ #	stat-user		somebody
+ 	debug-level		0
+ #	reload-count		5
diff --git a/SOURCES/glibc-fedora-streams-rh436349.patch b/SOURCES/glibc-fedora-streams-rh436349.patch
new file mode 100644
index 0000000..0d8f7d9
--- /dev/null
+++ b/SOURCES/glibc-fedora-streams-rh436349.patch
@@ -0,0 +1,38 @@
+Short description: Do not define _XOPEN_STREAMS.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-Fedora: #436349
+Upstream status: not-submitted
+
+This patch should go upstream. Not defining _XOPEN_STREAMS is the
+same as setting it to -1 for POSIX conformance. The headers setting
+needs to be reviewed indepedently.
+
+This is part of commit glibc-2.3.3-1564-gd0b6ac6
+
+* Fri Mar 14 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-11
+- remove <stropts.h>, define _XOPEN_STREAMS -1 (#436349)
+
+diff -Nrup a/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h b/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
+--- a/sysdeps/unix/sysv/linux/bits/posix_opt.h	2012-06-05 07:42:49.000000000 -0600
++++ b/sysdeps/unix/sysv/linux/bits/posix_opt.h	2012-06-07 12:15:21.817318674 -0600
+@@ -188,4 +188,7 @@
+ /* Typed memory objects are not available.  */
+ #define _POSIX_TYPED_MEMORY_OBJECTS	-1
+ 
++/* Streams are not available.  */
++#define _XOPEN_STREAMS	-1
++
+ #endif /* bits/posix_opt.h */
+diff -Nrup a/streams/Makefile b/streams/Makefile
+--- a/streams/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ b/streams/Makefile	2012-06-07 12:15:21.824318649 -0600
+@@ -20,7 +20,7 @@
+ 
+ include ../Makeconfig
+ 
+-headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
++#headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
+ routines	= isastream getmsg getpmsg putmsg putpmsg fattach fdetach
+ 
+ include ../Rules
diff --git a/SOURCES/glibc-nscd-sysconfig.patch b/SOURCES/glibc-nscd-sysconfig.patch
new file mode 100644
index 0000000..03dee9e
--- /dev/null
+++ b/SOURCES/glibc-nscd-sysconfig.patch
@@ -0,0 +1,21 @@
+Short description: Provide options to nscd startup.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+Fedora-specific nscd startup configuration file.
+
+diff --git a/nscd/nscd.service b/nscd/nscd.service
+index b7428a3..19ba185 100644
+--- a/nscd/nscd.service
++++ b/nscd/nscd.service
+@@ -5,7 +5,8 @@ Description=Name Service Cache Daemon
+ 
+ [Service]
+ Type=forking
+-ExecStart=/usr/sbin/nscd
++EnvironmentFile=-/etc/sysconfig/nscd
++ExecStart=/usr/sbin/nscd $NSCD_OPTIONS
+ ExecStop=/usr/sbin/nscd --shutdown
+ ExecReload=/usr/sbin/nscd -i passwd
+ ExecReload=/usr/sbin/nscd -i group
diff --git a/SOURCES/glibc-post_upgrade.patch b/SOURCES/glibc-post_upgrade.patch
new file mode 100644
index 0000000..a64adfc
--- /dev/null
+++ b/SOURCES/glibc-post_upgrade.patch
@@ -0,0 +1,272 @@
+Short description: RPM Post-upgrade cleanup program.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Upstream status: not-needed
+
+A helper program is needed to clean up the system configuration
+early during RPM package installation, so that other scriptlets
+can run successfully.
+
+diff --git a/elf/Makefile b/elf/Makefile
+index 2a432d8beebcd207..368dcae477fff2ae 100644
+--- a/elf/Makefile
++++ b/elf/Makefile
+@@ -117,6 +117,14 @@ others-extras   = $(ldconfig-modules)
+ endif
+ endif
+ 
++# This needs to be statically linked because it is executed at a time
++# when there might be incompatible shared objects on disk, and the
++# purpose of this program is to remove them (among other things).
++others-static += glibc_post_upgrade
++others += glibc_post_upgrade
++glibc_post_upgrade-modules := static-stubs
++CFLAGS-glibc_post_upgrade.c += -DGCONV_MODULES_DIR='"$(gconvdir)"'
++
+ # To find xmalloc.c and xstrdup.c
+ vpath %.c ../locale/programs
+ 
+@@ -559,6 +567,8 @@ $(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
+ 
+ $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
+ 
++$(objpfx)glibc_post_upgrade: $(glibc_post_upgrade-modules:%=$(objpfx)%.o)
++
+ SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
+ CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
+ 		    -D'SLIBDIR="$(slibdir)"'
+diff --git a/elf/glibc_post_upgrade.c b/elf/glibc_post_upgrade.c
+new file mode 100644
+index 0000000000000000..19b59f70e2308032
+--- /dev/null
++++ b/elf/glibc_post_upgrade.c
+@@ -0,0 +1,229 @@
++#include <sys/types.h>
++#include <sys/wait.h>
++#include <stdio.h>
++#include <errno.h>
++#include <unistd.h>
++#include <sys/time.h>
++#include <dirent.h>
++#include <stddef.h>
++#include <fcntl.h>
++#include <string.h>
++
++#define LD_SO_CONF "/etc/ld.so.conf"
++#define ICONVCONFIG "/usr/sbin/iconvconfig"
++
++#define verbose_exec(failcode, path...) \
++  do                                                    \
++    {                                                   \
++      char *const arr[] = { path, NULL };               \
++      vexec (failcode, arr);                            \
++    } while (0)
++
++__attribute__((noinline)) static void vexec (int failcode, char *const path[]);
++__attribute__((noinline)) static void says (const char *str);
++__attribute__((noinline)) static void sayn (long num);
++__attribute__((noinline)) static void message (char *const path[]);
++
++int
++main (void)
++{
++  char initpath[256];
++
++  char buffer[4096];
++  struct pref {
++    const char *p;
++    int len;
++  } prefix[] = { { "libc-", 5 }, { "libm-", 5 },
++                 { "librt-", 6 }, { "libpthread-", 11 },
++                 { "librtkaio-", 10 }, { "libthread_db-", 13 } };
++  int i, j, fd;
++  off_t base;
++  ssize_t ret;
++
++  /* In order to support in-place upgrades, we must immediately remove
++     obsolete platform directories after installing a new glibc
++     version.  RPM only deletes files removed by updates near the end
++     of the transaction.  If we did not remove the obsolete platform
++     directories here, they would be preferred by the dynamic linker
++     during the execution of subsequent RPM scriptlets, likely
++     resulting in process startup failures.  */
++  const char *remove_dirs[] =
++    {
++#if defined (__i386__)
++      "/lib/i686",
++      "/lib/i686/nosegneg",
++#elif defined (__powerpc64__) && _CALL_ELF != 2
++      "/lib64/power6",
++#endif
++    };
++  for (j = 0; j < sizeof (remove_dirs) / sizeof (remove_dirs[0]); ++j)
++    {
++      size_t rmlen = strlen (remove_dirs[j]);
++      fd = open (remove_dirs[j], O_RDONLY);
++      if (fd >= 0
++          && (ret = getdirentries (fd, buffer, sizeof (buffer), &base))
++             >= (ssize_t) offsetof (struct dirent, d_name))
++        {
++          for (base = 0; base + offsetof (struct dirent, d_name) < ret; )
++            {
++              struct dirent *d = (struct dirent *) (buffer + base);
++
++              for (i = 0; i < sizeof (prefix) / sizeof (prefix[0]); i++)
++                if (! strncmp (d->d_name, prefix[i].p, prefix[i].len))
++                  {
++                    char *p = d->d_name + prefix[i].len;
++
++                    while (*p == '.' || (*p >= '0' && *p <= '9')) p++;
++                    if (p[0] == 's' && p[1] == 'o' && p[2] == '\0'
++                        && p + 3 - d->d_name
++                           < sizeof (initpath) - rmlen - 1)
++                      {
++                        memcpy (initpath, remove_dirs[j], rmlen);
++                        initpath[rmlen] = '/';
++                        strcpy (initpath + rmlen + 1, d->d_name);
++                        unlink (initpath);
++                        break;
++                      }
++                  }
++              base += d->d_reclen;
++            }
++          close (fd);
++        }
++    }
++
++  int ldsocfd = open (LD_SO_CONF, O_RDONLY);
++  struct stat ldsocst;
++  if (ldsocfd >= 0 && fstat (ldsocfd, &ldsocst) >= 0)
++    {
++      char p[ldsocst.st_size + 1];
++      if (read (ldsocfd, p, ldsocst.st_size) == ldsocst.st_size)
++        {
++          p[ldsocst.st_size] = '\0';
++          if (strstr (p, "include ld.so.conf.d/*.conf") == NULL)
++            {
++              close (ldsocfd);
++              ldsocfd = open (LD_SO_CONF, O_WRONLY | O_TRUNC);
++              if (ldsocfd >= 0)
++                {
++                  size_t slen = strlen ("include ld.so.conf.d/*.conf\n");
++                  if (write (ldsocfd, "include ld.so.conf.d/*.conf\n", slen)
++                      != slen
++                      || write (ldsocfd, p, ldsocst.st_size) != ldsocst.st_size)
++                    _exit (109);
++                }
++            }
++        }
++      if (ldsocfd >= 0)
++        close (ldsocfd);
++    }
++
++  /* If installing bi-arch glibc, rpm sometimes doesn't unpack all files
++     before running one of the lib's %post scriptlet.  /sbin/ldconfig will
++     then be run by the other arch's %post.  */
++  if (! access ("/sbin/ldconfig", X_OK))
++    verbose_exec (110,
++                  (char *) "/sbin/ldconfig",
++                  (char *) "/sbin/ldconfig");
++
++  if (! utimes (GCONV_MODULES_DIR "/gconv-modules.cache", NULL))
++    {
++      const char *iconv_cache = GCONV_MODULES_DIR "/gconv-modules.cache";
++      const char *iconv_dir = GCONV_MODULES_DIR;
++      verbose_exec (113,
++                    (char *) ICONVCONFIG,
++                    (char *) "/usr/sbin/iconvconfig",
++                    (char *) "-o",
++                    (char *) iconv_cache,
++                    (char *) "--nostdlib",
++                    (char *) iconv_dir);
++    }
++
++  _exit(0);
++}
++
++void
++vexec (int failcode, char *const path[])
++{
++  pid_t pid;
++  int status, save_errno;
++  int devnull = 0;
++
++  if (failcode < 0)
++    {
++      devnull = 1;
++      failcode = -failcode;
++    }
++  pid = vfork ();
++  if (pid == 0)
++    {
++      int fd;
++      if (devnull && (fd = open ("/dev/null", O_WRONLY)) >= 0)
++        {
++          dup2 (fd, 1);
++          dup2 (fd, 2);
++          close (fd);
++        }
++      execv (path[0], path + 1);
++      save_errno = errno;
++      message (path);
++      says (" exec failed with errno ");
++      sayn (save_errno);
++      says ("\n");
++      _exit (failcode);
++    }
++  else if (pid < 0)
++    {
++      save_errno = errno;
++      message (path);
++      says (" fork failed with errno ");
++      sayn (save_errno);
++      says ("\n");
++      _exit (failcode + 1);
++    }
++  if (waitpid (0, &status, 0) != pid || !WIFEXITED (status))
++    {
++      message (path);
++      says (" child terminated abnormally\n");
++      _exit (failcode + 2);
++    }
++  if (WEXITSTATUS (status))
++    {
++      message (path);
++      says (" child exited with exit code ");
++      sayn (WEXITSTATUS (status));
++      says ("\n");
++      _exit (WEXITSTATUS (status));
++    }
++}
++
++static void
++says (const char *str)
++{
++  write (1, str, strlen (str));
++}
++
++static void
++sayn (long num)
++{
++  char string[sizeof (long) * 3 + 1];
++  char *p = string + sizeof (string) - 1;
++
++  *p = '\0';
++  if (num == 0)
++    *--p = '0';
++  else
++    while (num)
++      {
++        *--p = '0' + num % 10;
++        num = num / 10;
++      }
++
++  says (p);
++}
++
++static void
++message (char *const path[])
++{
++  says ("/usr/sbin/glibc_post_upgrade: While trying to execute ");
++  says (path[0]);
++}
diff --git a/SOURCES/glibc-python3.patch b/SOURCES/glibc-python3.patch
new file mode 100644
index 0000000..a9a7a4f
--- /dev/null
+++ b/SOURCES/glibc-python3.patch
@@ -0,0 +1,40 @@
+Use python3 for installed executable python scripts.
+
+Fedora is a Python3-only distribution:
+https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
+
+This fixes build failures where builders may strictly enforce only
+python3 during a transitional phase.
+
+Author: Carlos O'Donell <carlos@redhat.com>
+
+diff --git a/benchtests/scripts/compare_bench.py b/benchtests/scripts/compare_bench.py
+index ea25f778c09bba9d..b53beb3c6e32c3cf 100755
+--- a/benchtests/scripts/compare_bench.py
++++ b/benchtests/scripts/compare_bench.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ # Copyright (C) 2015-2018 Free Software Foundation, Inc.
+ # This file is part of the GNU C Library.
+ #
+diff --git a/benchtests/scripts/import_bench.py b/benchtests/scripts/import_bench.py
+index 602b3f954d4801a6..76bf1528a5418748 100644
+--- a/benchtests/scripts/import_bench.py
++++ b/benchtests/scripts/import_bench.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ # Copyright (C) 2015-2018 Free Software Foundation, Inc.
+ # This file is part of the GNU C Library.
+ #
+diff --git a/benchtests/scripts/validate_benchout.py b/benchtests/scripts/validate_benchout.py
+index 6147f05bec3a4844..9a5c7947ee4ed7e9 100755
+--- a/benchtests/scripts/validate_benchout.py
++++ b/benchtests/scripts/validate_benchout.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ # Copyright (C) 2014-2018 Free Software Foundation, Inc.
+ # This file is part of the GNU C Library.
+ #
diff --git a/SOURCES/glibc-rh1070416.patch b/SOURCES/glibc-rh1070416.patch
new file mode 100644
index 0000000..0975e0f
--- /dev/null
+++ b/SOURCES/glibc-rh1070416.patch
@@ -0,0 +1,38 @@
+Short description: Add syslog.target dependency.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-Fedora: #1070416
+Upstream status: not-needed
+
+Fedora-specific changes to the nscd.service file.
+See also: glibc-nscd-sysconfig.patch.
+
+--- a/nscd/nscd.service
++++ b/nscd/nscd.service
+@@ -2,6 +2,7 @@
+ 
+ [Unit]
+ Description=Name Service Cache Daemon
++After=syslog.target
+ 
+ [Service]
+ Type=forking
+@@ -17,3 +18,4 @@
+ 
+ [Install]
+ WantedBy=multi-user.target
++Also=nscd.socket
+diff --git a/nscd/nscd.socket b/nscd/nscd.socket
+new file mode 100644
+index 0000000..7e512d5
+--- /dev/null
++++ b/nscd/nscd.socket
+@@ -0,0 +1,8 @@
++[Unit]
++Description=Name Service Cache Daemon Socket
++
++[Socket]
++ListenDatagram=/var/run/nscd/socket
++
++[Install]
++WantedBy=sockets.target
diff --git a/SOURCES/glibc-rh1577365.patch b/SOURCES/glibc-rh1577365.patch
new file mode 100644
index 0000000..c1e30d4
--- /dev/null
+++ b/SOURCES/glibc-rh1577365.patch
@@ -0,0 +1,22 @@
+Please see the following bug for a complete summary:
+https://bugzilla.redhat.com/show_bug.cgi?id=1615608
+
+Index: glibc-2.28/manual/startup.texi
+===================================================================
+--- glibc-2.28.orig/manual/startup.texi
++++ glibc-2.28/manual/startup.texi
+@@ -1005,14 +1005,6 @@ This function actually terminates the pr
+ intercept this signal; see @ref{Signal Handling}.
+ @end deftypefun
+ 
+-@c Put in by rms.  Don't remove.
+-@cartouche
+-@strong{Future Change Warning:} Proposed Federal censorship regulations
+-may prohibit us from giving you information about the possibility of
+-calling this function.  We would be required to say that this is not an
+-acceptable way of terminating a program.
+-@end cartouche
+-
+ @node Termination Internals
+ @subsection Termination Internals
+ 
diff --git a/SOURCES/glibc-rh1614253.patch b/SOURCES/glibc-rh1614253.patch
new file mode 100644
index 0000000..ae4b43d
--- /dev/null
+++ b/SOURCES/glibc-rh1614253.patch
@@ -0,0 +1,254 @@
+commit 4b25485f03158959cff45379eecc1d73c7dcdd11
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Aug 10 11:19:26 2018 +0200
+
+    Linux: Rewrite __old_getdents64 [BZ #23497]
+    
+    Commit 298d0e3129c0b5137f4989275b13fe30d0733c4d ("Consolidate Linux
+    getdents{64} implementation") broke the implementation because it does
+    not take into account struct offset differences.
+    
+    The new implementation is close to the old one, before the
+    consolidation, but has been cleaned up slightly.
+    
+    (cherry picked from commit 690652882b499defb3d950dfeff8fe421d13cab5)
+
+diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
+index f71cc39c7e257a0a..773aaea0e980bdd6 100644
+--- a/sysdeps/unix/sysv/linux/Makefile
++++ b/sysdeps/unix/sysv/linux/Makefile
+@@ -161,6 +161,7 @@ inhibit-glue = yes
+ 
+ ifeq ($(subdir),dirent)
+ sysdep_routines += getdirentries getdirentries64
++tests-internal += tst-readdir64-compat
+ endif
+ 
+ ifeq ($(subdir),nis)
+diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c
+index 3bde0cf4f0226f95..bc140b5a7fac3040 100644
+--- a/sysdeps/unix/sysv/linux/getdents64.c
++++ b/sysdeps/unix/sysv/linux/getdents64.c
+@@ -33,41 +33,80 @@ strong_alias (__getdents64, __getdents)
+ # include <shlib-compat.h>
+ 
+ # if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+-# include <olddirent.h>
++#  include <olddirent.h>
++#  include <unistd.h>
+ 
+-/* kernel definition of as of 3.2.  */
+-struct compat_linux_dirent
++static ssize_t
++handle_overflow (int fd, __off64_t offset, ssize_t count)
+ {
+-  /* Both d_ino and d_off are compat_ulong_t which are defined in all
+-     architectures as 'u32'.  */
+-  uint32_t        d_ino;
+-  uint32_t        d_off;
+-  unsigned short  d_reclen;
+-  char            d_name[1];
+-};
++  /* If this is the first entry in the buffer, we can report the
++     error.  */
++  if (count == 0)
++    {
++      __set_errno (EOVERFLOW);
++      return -1;
++    }
++
++  /* Otherwise, seek to the overflowing entry, so that the next call
++     will report the error, and return the data read so far..  */
++  if (__lseek64 (fd, offset, SEEK_SET) != 0)
++    return -1;
++  return count;
++}
+ 
+ ssize_t
+ __old_getdents64 (int fd, char *buf, size_t nbytes)
+ {
+-  ssize_t retval = INLINE_SYSCALL_CALL (getdents, fd, buf, nbytes);
++  /* We do not move the individual directory entries.  This is only
++     possible if the target type (struct __old_dirent64) is smaller
++     than the source type.  */
++  _Static_assert (offsetof (struct __old_dirent64, d_name)
++		  <= offsetof (struct dirent64, d_name),
++		  "__old_dirent64 is larger than dirent64");
++  _Static_assert (__alignof__ (struct __old_dirent64)
++		  <= __alignof__ (struct dirent64),
++		  "alignment of __old_dirent64 is larger than dirent64");
+ 
+-  /* The kernel added the d_type value after the name.  Change this now.  */
+-  if (retval != -1)
++  ssize_t retval = INLINE_SYSCALL_CALL (getdents64, fd, buf, nbytes);
++  if (retval > 0)
+     {
+-      union
+-      {
+-	struct compat_linux_dirent k;
+-	struct dirent u;
+-      } *kbuf = (void *) buf;
+-
+-      while ((char *) kbuf < buf + retval)
++      char *p = buf;
++      char *end = buf + retval;
++      while (p < end)
+ 	{
+-	  char d_type = *((char *) kbuf + kbuf->k.d_reclen - 1);
+-	  memmove (kbuf->u.d_name, kbuf->k.d_name,
+-		   strlen (kbuf->k.d_name) + 1);
+-	  kbuf->u.d_type = d_type;
++	  struct dirent64 *source = (struct dirent64 *) p;
++
++	  /* Copy out the fixed-size data.  */
++	  __ino_t ino = source->d_ino;
++	  __off64_t offset = source->d_off;
++	  unsigned int reclen = source->d_reclen;
++	  unsigned char type = source->d_type;
++
++	  /* Check for ino_t overflow.  */
++	  if (__glibc_unlikely (ino != source->d_ino))
++	    return handle_overflow (fd, offset, p - buf);
++
++	  /* Convert to the target layout.  Use a separate struct and
++	     memcpy to side-step aliasing issues.  */
++	  struct __old_dirent64 result;
++	  result.d_ino = ino;
++	  result.d_off = offset;
++	  result.d_reclen = reclen;
++	  result.d_type = type;
++
++	  /* Write the fixed-sized part of the result to the
++	     buffer.  */
++	  size_t result_name_offset = offsetof (struct __old_dirent64, d_name);
++	  memcpy (p, &result, result_name_offset);
++
++	  /* Adjust the position of the name if necessary.  Copy
++	     everything until the end of the record, including the
++	     terminating NUL byte.  */
++	  if (result_name_offset != offsetof (struct dirent64, d_name))
++	    memmove (p + result_name_offset, source->d_name,
++		     reclen - offsetof (struct dirent64, d_name));
+ 
+-	  kbuf = (void *) ((char *) kbuf + kbuf->k.d_reclen);
++	  p += reclen;
+ 	}
+      }
+   return retval;
+diff --git a/sysdeps/unix/sysv/linux/tst-readdir64-compat.c b/sysdeps/unix/sysv/linux/tst-readdir64-compat.c
+new file mode 100644
+index 0000000000000000..43c4a8477c7403c5
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/tst-readdir64-compat.c
+@@ -0,0 +1,111 @@
++/* Test readdir64 compatibility symbol.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <dirent.h>
++#include <dlfcn.h>
++#include <errno.h>
++#include <shlib-compat.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <string.h>
++#include <support/check.h>
++
++/* Copied from <olddirent.h>.  */
++struct __old_dirent64
++  {
++    __ino_t d_ino;
++    __off64_t d_off;
++    unsigned short int d_reclen;
++    unsigned char d_type;
++    char d_name[256];
++  };
++
++typedef struct __old_dirent64 *(*compat_readdir64_type) (DIR *);
++
++#if TEST_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)
++struct __old_dirent64 *compat_readdir64 (DIR *);
++compat_symbol_reference (libc, compat_readdir64, readdir64, GLIBC_2_1);
++#endif
++
++static int
++do_test (void)
++{
++#if TEST_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)
++
++  /* Directory stream using the non-compat readdir64 symbol.  The test
++     checks against this.  */
++  DIR *dir_reference = opendir (".");
++  TEST_VERIFY_EXIT (dir_reference != NULL);
++  DIR *dir_test = opendir (".");
++  TEST_VERIFY_EXIT (dir_test != NULL);
++
++  /* This loop assumes that the enumeration order is consistent for
++     two different handles.  Nothing should write to the current
++     directory (in the source tree) while this test runs, so there
++     should not be any difference due to races.  */
++  size_t count = 0;
++  while (true)
++    {
++      errno = 0;
++      struct dirent64 *entry_reference = readdir64 (dir_reference);
++      if (entry_reference == NULL && errno != 0)
++        FAIL_EXIT1 ("readdir64 entry %zu: %m\n", count);
++      struct __old_dirent64 *entry_test = compat_readdir64 (dir_test);
++      if (entry_reference == NULL)
++        {
++          if (errno == EOVERFLOW)
++            {
++              TEST_VERIFY (entry_reference->d_ino
++                           != (__ino_t) entry_reference->d_ino);
++              printf ("info: inode number overflow at entry %zu\n", count);
++              break;
++            }
++          if (errno != 0)
++            FAIL_EXIT1 ("compat readdir64 entry %zu: %m\n", count);
++        }
++
++      /* Check that both streams end at the same time.  */
++      if (entry_reference == NULL)
++        {
++          TEST_VERIFY (entry_test == NULL);
++          break;
++        }
++      else
++        TEST_VERIFY_EXIT (entry_test != NULL);
++
++      /* Check that the entries are the same.  */
++      TEST_COMPARE_BLOB (entry_reference->d_name,
++                         strlen (entry_reference->d_name),
++                         entry_test->d_name, strlen (entry_test->d_name));
++      TEST_COMPARE (entry_reference->d_ino, entry_test->d_ino);
++      TEST_COMPARE (entry_reference->d_off, entry_test->d_off);
++      TEST_COMPARE (entry_reference->d_type, entry_test->d_type);
++      TEST_COMPARE (entry_reference->d_reclen, entry_test->d_reclen);
++
++      ++count;
++    }
++  printf ("info: %zu directory entries found\n", count);
++  TEST_VERIFY (count >= 3);     /* ".", "..", and some source files.  */
++
++  TEST_COMPARE (closedir (dir_test), 0);
++  TEST_COMPARE (closedir (dir_reference), 0);
++#endif
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1614979.patch b/SOURCES/glibc-rh1614979.patch
new file mode 100644
index 0000000..c97ae2c
--- /dev/null
+++ b/SOURCES/glibc-rh1614979.patch
@@ -0,0 +1,154 @@
+commit d524fa6c35e675eedbd8fe6cdf4db0b49c658026
+Author: H.J. Lu <hjl.tools@gmail.com>
+Date:   Thu Nov 8 10:06:58 2018 -0800
+
+    Check multiple NT_GNU_PROPERTY_TYPE_0 notes [BZ #23509]
+    
+    Linkers group input note sections with the same name into one output
+    note section with the same name.  One output note section is placed in
+    one PT_NOTE segment.  Since new linkers merge input .note.gnu.property
+    sections into one output .note.gnu.property section, there is only
+    one NT_GNU_PROPERTY_TYPE_0 note in one PT_NOTE segment with new linkers.
+    Since older linkers treat input .note.gnu.property section as a generic
+    note section and just concatenate all input .note.gnu.property sections
+    into one output .note.gnu.property section without merging them, we may
+    see multiple NT_GNU_PROPERTY_TYPE_0 notes in one PT_NOTE segment with
+    older linkers.
+    
+    When an older linker is used to created the program on CET-enabled OS,
+    the linker output has a single .note.gnu.property section with multiple
+    NT_GNU_PROPERTY_TYPE_0 notes, some of which have IBT and SHSTK enable
+    bits set even if the program isn't CET enabled.  Such programs will
+    crash on CET-enabled machines.  This patch updates the note parser:
+    
+    1. Skip note parsing if a NT_GNU_PROPERTY_TYPE_0 note has been processed.
+    2. Check multiple NT_GNU_PROPERTY_TYPE_0 notes.
+    
+            [BZ #23509]
+            * sysdeps/x86/dl-prop.h (_dl_process_cet_property_note): Skip
+            note parsing if a NT_GNU_PROPERTY_TYPE_0 note has been processed.
+            Update the l_cet field when processing NT_GNU_PROPERTY_TYPE_0 note.
+            Check multiple NT_GNU_PROPERTY_TYPE_0 notes.
+            * sysdeps/x86/link_map.h (l_cet): Expand to 3 bits,  Add
+            lc_unknown.
+
+diff --git a/sysdeps/x86/dl-prop.h b/sysdeps/x86/dl-prop.h
+index 26c3131ac5e2d080..9ab890d12bb99133 100644
+--- a/sysdeps/x86/dl-prop.h
++++ b/sysdeps/x86/dl-prop.h
+@@ -49,6 +49,10 @@ _dl_process_cet_property_note (struct link_map *l,
+ 			      const ElfW(Addr) align)
+ {
+ #if CET_ENABLED
++  /* Skip if we have seen a NT_GNU_PROPERTY_TYPE_0 note before.  */
++  if (l->l_cet != lc_unknown)
++    return;
++
+   /* The NT_GNU_PROPERTY_TYPE_0 note must be aliged to 4 bytes in
+      32-bit objects and to 8 bytes in 64-bit objects.  Skip notes
+      with incorrect alignment.  */
+@@ -57,6 +61,9 @@ _dl_process_cet_property_note (struct link_map *l,
+ 
+   const ElfW(Addr) start = (ElfW(Addr)) note;
+ 
++  unsigned int feature_1 = 0;
++  unsigned int last_type = 0;
++
+   while ((ElfW(Addr)) (note + 1) - start < size)
+     {
+       /* Find the NT_GNU_PROPERTY_TYPE_0 note.  */
+@@ -64,10 +71,18 @@ _dl_process_cet_property_note (struct link_map *l,
+ 	  && note->n_type == NT_GNU_PROPERTY_TYPE_0
+ 	  && memcmp (note + 1, "GNU", 4) == 0)
+ 	{
++	  /* Stop if we see more than one GNU property note which may
++	     be generated by the older linker.  */
++	  if (l->l_cet != lc_unknown)
++	    return;
++
++	  /* Check CET status now.  */
++	  l->l_cet = lc_none;
++
+ 	  /* Check for invalid property.  */
+ 	  if (note->n_descsz < 8
+ 	      || (note->n_descsz % sizeof (ElfW(Addr))) != 0)
+-	    break;
++	    return;
+ 
+ 	  /* Start and end of property array.  */
+ 	  unsigned char *ptr = (unsigned char *) (note + 1) + 4;
+@@ -78,9 +93,15 @@ _dl_process_cet_property_note (struct link_map *l,
+ 	      unsigned int type = *(unsigned int *) ptr;
+ 	      unsigned int datasz = *(unsigned int *) (ptr + 4);
+ 
++	      /* Property type must be in ascending order.  */
++	      if (type < last_type)
++		return;
++
+ 	      ptr += 8;
+ 	      if ((ptr + datasz) > ptr_end)
+-		break;
++		return;
++
++	      last_type = type;
+ 
+ 	      if (type == GNU_PROPERTY_X86_FEATURE_1_AND)
+ 		{
+@@ -89,14 +110,18 @@ _dl_process_cet_property_note (struct link_map *l,
+ 		     we stop the search regardless if its size is correct
+ 		     or not.  There is no point to continue if this note
+ 		     is ill-formed.  */
+-		  if (datasz == 4)
+-		    {
+-		      unsigned int feature_1 = *(unsigned int *) ptr;
+-		      if ((feature_1 & GNU_PROPERTY_X86_FEATURE_1_IBT))
+-			l->l_cet |= lc_ibt;
+-		      if ((feature_1 & GNU_PROPERTY_X86_FEATURE_1_SHSTK))
+-			l->l_cet |= lc_shstk;
+-		    }
++		  if (datasz != 4)
++		    return;
++
++		  feature_1 = *(unsigned int *) ptr;
++
++		  /* Keep searching for the next GNU property note
++		     generated by the older linker.  */
++		  break;
++		}
++	      else if (type > GNU_PROPERTY_X86_FEATURE_1_AND)
++		{
++		  /* Stop since property type is in ascending order.  */
+ 		  return;
+ 		}
+ 
+@@ -112,6 +137,12 @@ _dl_process_cet_property_note (struct link_map *l,
+ 	      + ELF_NOTE_NEXT_OFFSET (note->n_namesz, note->n_descsz,
+ 				      align));
+     }
++
++  /* We get here only if there is one or no GNU property note.  */
++  if ((feature_1 & GNU_PROPERTY_X86_FEATURE_1_IBT))
++    l->l_cet |= lc_ibt;
++  if ((feature_1 & GNU_PROPERTY_X86_FEATURE_1_SHSTK))
++    l->l_cet |= lc_shstk;
+ #endif
+ }
+ 
+diff --git a/sysdeps/x86/link_map.h b/sysdeps/x86/link_map.h
+index ef1206a9d2396a6f..9367ed08896794a4 100644
+--- a/sysdeps/x86/link_map.h
++++ b/sysdeps/x86/link_map.h
+@@ -19,8 +19,9 @@
+ /* If this object is enabled with CET.  */
+ enum
+   {
+-    lc_none = 0,			 /* Not enabled with CET.  */
+-    lc_ibt = 1 << 0,			 /* Enabled with IBT.  */
+-    lc_shstk = 1 << 1,			 /* Enabled with STSHK.  */
++    lc_unknown = 0,			 /* Unknown CET status.  */
++    lc_none = 1 << 0,			 /* Not enabled with CET.  */
++    lc_ibt = 1 << 1,			 /* Enabled with IBT.  */
++    lc_shstk = 1 << 2,			 /* Enabled with STSHK.  */
+     lc_ibt_and_shstk = lc_ibt | lc_shstk /* Enabled with both.  */
+-  } l_cet:2;
++  } l_cet:3;
diff --git a/SOURCES/glibc-rh1615781.patch b/SOURCES/glibc-rh1615781.patch
new file mode 100644
index 0000000..a12ea17
--- /dev/null
+++ b/SOURCES/glibc-rh1615781.patch
@@ -0,0 +1,28 @@
+commit d05b05d1570ba3ae354a2f5a3cfeefb373b09979
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Aug 13 14:28:07 2018 +0200
+
+    error, error_at_line: Add missing va_end calls
+    
+    (cherry picked from commit b7b52b9dec337a08a89bc67638773be652eba332)
+
+diff --git a/misc/error.c b/misc/error.c
+index b4e8b6c93886b737..03378e2f2aa6251e 100644
+--- a/misc/error.c
++++ b/misc/error.c
+@@ -319,6 +319,7 @@ error (int status, int errnum, const char *message, ...)
+ 
+   va_start (args, message);
+   error_tail (status, errnum, message, args);
++  va_end (args);
+ 
+ #ifdef _LIBC
+   _IO_funlockfile (stderr);
+@@ -390,6 +391,7 @@ error_at_line (int status, int errnum, const char *file_name,
+ 
+   va_start (args, message);
+   error_tail (status, errnum, message, args);
++  va_end (args);
+ 
+ #ifdef _LIBC
+   _IO_funlockfile (stderr);
diff --git a/SOURCES/glibc-rh1615784.patch b/SOURCES/glibc-rh1615784.patch
new file mode 100644
index 0000000..0c12c9c
--- /dev/null
+++ b/SOURCES/glibc-rh1615784.patch
@@ -0,0 +1,35 @@
+commit bfcfa22589f2b4277a65e60c6b736b6bbfbd87d0
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Aug 14 10:51:07 2018 +0200
+
+    nscd: Deallocate existing user names in file parser
+    
+    This avoids a theoretical memory leak (theoretical because it depends on
+    multiple server-user/stat-user directives in the configuration file).
+    
+    (cherry picked from commit 2d7acfac3ebf266dcbc82d0d6cc576f626953a03)
+
+diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c
+index 265a02434dd26c29..7293b795b6bcf71e 100644
+--- a/nscd/nscd_conf.c
++++ b/nscd/nscd_conf.c
+@@ -190,7 +190,10 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
+ 	  if (!arg1)
+ 	    error (0, 0, _("Must specify user name for server-user option"));
+ 	  else
+-	    server_user = xstrdup (arg1);
++	    {
++	      free ((char *) server_user);
++	      server_user = xstrdup (arg1);
++	    }
+ 	}
+       else if (strcmp (entry, "stat-user") == 0)
+ 	{
+@@ -198,6 +201,7 @@ nscd_parse_file (const char *fname, struct database_dyn dbs[lastdb])
+ 	    error (0, 0, _("Must specify user name for stat-user option"));
+ 	  else
+ 	    {
++	      free ((char *) stat_user);
+ 	      stat_user = xstrdup (arg1);
+ 
+ 	      struct passwd *pw = getpwnam (stat_user);
diff --git a/SOURCES/glibc-rh1615790.patch b/SOURCES/glibc-rh1615790.patch
new file mode 100644
index 0000000..f0fbdc7
--- /dev/null
+++ b/SOURCES/glibc-rh1615790.patch
@@ -0,0 +1,306 @@
+commit 2f498f3d140ab5152bd784df2be7af7d9c5e63ed
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Aug 14 10:57:48 2018 +0200
+
+    nss_files: Fix file stream leak in aliases lookup [BZ #23521]
+    
+    In order to get a clean test case, it was necessary to fix partially
+    fixed bug 23522 as well.
+    
+    (cherry picked from commit e95c6f61920a0f9237cfb292fa44ad500e1df09b)
+
+diff --git a/nss/Makefile b/nss/Makefile
+index 66fac7f5b8a4c0d8..5209fc0456dd6786 100644
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -65,6 +65,7 @@ ifeq (yes,$(build-shared))
+ tests += tst-nss-files-hosts-erange
+ tests += tst-nss-files-hosts-multi
+ tests += tst-nss-files-hosts-getent
++tests += tst-nss-files-alias-leak
+ endif
+ 
+ # If we have a thread library then we can test cancellation against
+@@ -171,3 +172,5 @@ endif
+ $(objpfx)tst-nss-files-hosts-erange: $(libdl)
+ $(objpfx)tst-nss-files-hosts-multi: $(libdl)
+ $(objpfx)tst-nss-files-hosts-getent: $(libdl)
++$(objpfx)tst-nss-files-alias-leak: $(libdl)
++$(objpfx)tst-nss-files-alias-leak.out: $(objpfx)/libnss_files.so
+diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
+index cfd34b66b921bbff..35b0bfc5d2479ab6 100644
+--- a/nss/nss_files/files-alias.c
++++ b/nss/nss_files/files-alias.c
+@@ -221,6 +221,13 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 			{
+ 			  while (! feof_unlocked (listfile))
+ 			    {
++			      if (room_left < 2)
++				{
++				  free (old_line);
++				  fclose (listfile);
++				  goto no_more_room;
++				}
++
+ 			      first_unused[room_left - 1] = '\xff';
+ 			      line = fgets_unlocked (first_unused, room_left,
+ 						     listfile);
+@@ -229,6 +236,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 			      if (first_unused[room_left - 1] != '\xff')
+ 				{
+ 				  free (old_line);
++				  fclose (listfile);
+ 				  goto no_more_room;
+ 				}
+ 
+@@ -256,6 +264,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
+ 						       + __alignof__ (char *)))
+ 					{
+ 					  free (old_line);
++					  fclose (listfile);
+ 					  goto no_more_room;
+ 					}
+ 				      room_left -= ((first_unused - cp)
+diff --git a/nss/tst-nss-files-alias-leak.c b/nss/tst-nss-files-alias-leak.c
+new file mode 100644
+index 0000000000000000..26d38e2dba1ddaf3
+--- /dev/null
++++ b/nss/tst-nss-files-alias-leak.c
+@@ -0,0 +1,237 @@
++/* Check for file descriptor leak in alias :include: processing (bug 23521).
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <aliases.h>
++#include <array_length.h>
++#include <dlfcn.h>
++#include <errno.h>
++#include <gnu/lib-names.h>
++#include <nss.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/namespace.h>
++#include <support/support.h>
++#include <support/temp_file.h>
++#include <support/test-driver.h>
++#include <support/xstdio.h>
++#include <support/xunistd.h>
++
++static struct support_chroot *chroot_env;
++
++/* Number of the aliases for the "many" user.  This must be large
++   enough to trigger reallocation for the pointer array, but result in
++   answers below the maximum size tried in do_test.  */
++enum { many_aliases = 30 };
++
++static void
++prepare (int argc, char **argv)
++{
++  chroot_env = support_chroot_create
++    ((struct support_chroot_configuration) { } );
++
++  char *path = xasprintf ("%s/etc/aliases", chroot_env->path_chroot);
++  add_temp_file (path);
++  support_write_file_string
++    (path,
++     "user1: :include:/etc/aliases.user1\n"
++     "user2: :include:/etc/aliases.user2\n"
++     "comment: comment1, :include:/etc/aliases.comment\n"
++     "many: :include:/etc/aliases.many\n");
++  free (path);
++
++  path = xasprintf ("%s/etc/aliases.user1", chroot_env->path_chroot);
++  add_temp_file (path);
++  support_write_file_string (path, "alias1\n");
++  free (path);
++
++  path = xasprintf ("%s/etc/aliases.user2", chroot_env->path_chroot);
++  add_temp_file (path);
++  support_write_file_string (path, "alias1a, alias2\n");
++  free (path);
++
++  path = xasprintf ("%s/etc/aliases.comment", chroot_env->path_chroot);
++  add_temp_file (path);
++  support_write_file_string
++    (path,
++     /* The line must be longer than the line with the :include:
++        directive in /etc/aliases.  */
++     "# Long line.  ##############################################\n"
++     "comment2\n");
++  free (path);
++
++  path = xasprintf ("%s/etc/aliases.many", chroot_env->path_chroot);
++  add_temp_file (path);
++  FILE *fp = xfopen (path, "w");
++  for (int i = 0; i < many_aliases; ++i)
++    fprintf (fp, "a%d\n", i);
++  TEST_VERIFY_EXIT (! ferror (fp));
++  xfclose (fp);
++  free (path);
++}
++
++/* The names of the users to test.  */
++static const char *users[] = { "user1", "user2", "comment", "many" };
++
++static void
++check_aliases (int id, const struct aliasent *e)
++{
++  TEST_VERIFY_EXIT (id >= 0 || id < array_length (users));
++  const char *name = users[id];
++  TEST_COMPARE_BLOB (e->alias_name, strlen (e->alias_name),
++                     name, strlen (name));
++
++  switch (id)
++    {
++    case 0:
++      TEST_COMPARE (e->alias_members_len, 1);
++      TEST_COMPARE_BLOB (e->alias_members[0], strlen (e->alias_members[0]),
++                         "alias1", strlen ("alias1"));
++      break;
++
++    case 1:
++      TEST_COMPARE (e->alias_members_len, 2);
++      TEST_COMPARE_BLOB (e->alias_members[0], strlen (e->alias_members[0]),
++                         "alias1a", strlen ("alias1a"));
++      TEST_COMPARE_BLOB (e->alias_members[1], strlen (e->alias_members[1]),
++                         "alias2", strlen ("alias2"));
++      break;
++
++    case 2:
++      TEST_COMPARE (e->alias_members_len, 2);
++      TEST_COMPARE_BLOB (e->alias_members[0], strlen (e->alias_members[0]),
++                         "comment1", strlen ("comment1"));
++      TEST_COMPARE_BLOB (e->alias_members[1], strlen (e->alias_members[1]),
++                         "comment2", strlen ("comment2"));
++      break;
++
++    case 3:
++      TEST_COMPARE (e->alias_members_len, many_aliases);
++      for (int i = 0; i < e->alias_members_len; ++i)
++        {
++          char alias[30];
++          int len = snprintf (alias, sizeof (alias), "a%d", i);
++          TEST_VERIFY_EXIT (len > 0);
++          TEST_COMPARE_BLOB (e->alias_members[i], strlen (e->alias_members[i]),
++                             alias, len);
++        }
++      break;
++    }
++}
++
++static int
++do_test (void)
++{
++  /* Make sure we don't try to load the module in the chroot.  */
++  if (dlopen (LIBNSS_FILES_SO, RTLD_NOW) == NULL)
++    FAIL_EXIT1 ("could not load " LIBNSS_FILES_SO ": %s", dlerror ());
++
++  /* Some of these descriptors will become unavailable if there is a
++     file descriptor leak.  10 is chosen somewhat arbitrarily.  The
++     array must be longer than the number of files opened by nss_files
++     at the same time (currently that number is 2).  */
++  int next_descriptors[10];
++  for (size_t i = 0; i < array_length (next_descriptors); ++i)
++    {
++      next_descriptors[i] = dup (0);
++      TEST_VERIFY_EXIT (next_descriptors[i] > 0);
++    }
++  for (size_t i = 0; i < array_length (next_descriptors); ++i)
++    xclose (next_descriptors[i]);
++
++  support_become_root ();
++  if (!support_can_chroot ())
++    return EXIT_UNSUPPORTED;
++
++  __nss_configure_lookup ("aliases", "files");
++
++  xchroot (chroot_env->path_chroot);
++
++  /* Attempt various buffer sizes.  If the operation succeeds, we
++     expect correct data.  */
++  for (int id = 0; id < array_length (users); ++id)
++    {
++      bool found = false;
++      for (size_t size = 1; size <= 1000; ++size)
++        {
++          void *buffer = malloc (size);
++          struct aliasent result;
++          struct aliasent *res;
++          errno = EINVAL;
++          int ret = getaliasbyname_r (users[id], &result, buffer, size, &res);
++          if (ret == 0)
++            {
++              if (res != NULL)
++                {
++                  found = true;
++                  check_aliases (id, res);
++                }
++              else
++                {
++                  support_record_failure ();
++                  printf ("error: failed lookup for user \"%s\", size %zu\n",
++                          users[id], size);
++                }
++            }
++          else if (ret != ERANGE)
++            {
++              support_record_failure ();
++              printf ("error: invalid return code %d (user \%s\", size %zu)\n",
++                      ret, users[id], size);
++            }
++          free (buffer);
++
++          /* Make sure that we did not have a file descriptor leak.  */
++          for (size_t i = 0; i < array_length (next_descriptors); ++i)
++            {
++              int new_fd = dup (0);
++              if (new_fd != next_descriptors[i])
++                {
++                  support_record_failure ();
++                  printf ("error: descriptor %d at index %zu leaked"
++                          " (user \"%s\", size %zu)\n",
++                          next_descriptors[i], i, users[id], size);
++
++                  /* Close unexpected descriptor, the leak probing
++                     descriptors, and the leaked descriptor
++                     next_descriptors[i].  */
++                  xclose (new_fd);
++                  for (size_t j = 0; j <= i; ++j)
++                    xclose (next_descriptors[j]);
++                  goto next_size;
++                }
++            }
++          for (size_t i = 0; i < array_length (next_descriptors); ++i)
++            xclose (next_descriptors[i]);
++
++        next_size:
++          ;
++        }
++      if (!found)
++        {
++          support_record_failure ();
++          printf ("error: user %s not found\n", users[id]);
++        }
++    }
++
++  support_chroot_free (chroot_env);
++  return 0;
++}
++
++#define PREPARE prepare
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1622675.patch b/SOURCES/glibc-rh1622675.patch
new file mode 100644
index 0000000..ba473cd
--- /dev/null
+++ b/SOURCES/glibc-rh1622675.patch
@@ -0,0 +1,27 @@
+commit aa8a3e4cdef20c50cb20f008864fff05cbfbdf29
+Author: Martin Kuchta <martin.kuchta@netapp.com>
+Date:   Mon Aug 27 18:54:46 2018 +0200
+
+    pthread_cond_broadcast: Fix waiters-after-spinning case [BZ #23538]
+    
+    (cherry picked from commit 99ea93ca31795469d2a1f1570f17a5c39c2eb7e2)
+
+diff --git a/nptl/pthread_cond_common.c b/nptl/pthread_cond_common.c
+index 8e425eb01eceabec..479e54febb417675 100644
+--- a/nptl/pthread_cond_common.c
++++ b/nptl/pthread_cond_common.c
+@@ -405,8 +405,12 @@ __condvar_quiesce_and_switch_g1 (pthread_cond_t *cond, uint64_t wseq,
+ 	{
+ 	  /* There is still a waiter after spinning.  Set the wake-request
+ 	     flag and block.  Relaxed MO is fine because this is just about
+-	     this futex word.  */
+-	  r = atomic_fetch_or_relaxed (cond->__data.__g_refs + g1, 1);
++	     this futex word.
++
++	     Update r to include the set wake-request flag so that the upcoming
++	     futex_wait only blocks if the flag is still set (otherwise, we'd
++	     violate the basic client-side futex protocol).  */
++	  r = atomic_fetch_or_relaxed (cond->__data.__g_refs + g1, 1) | 1;
+ 
+ 	  if ((r >> 1) > 0)
+ 	    futex_wait_simple (cond->__data.__g_refs + g1, r, private);
diff --git a/SOURCES/glibc-rh1622678-1.patch b/SOURCES/glibc-rh1622678-1.patch
new file mode 100644
index 0000000..4d94590
--- /dev/null
+++ b/SOURCES/glibc-rh1622678-1.patch
@@ -0,0 +1,41 @@
+commit 58559f14437d2aa71753a29fed435efa06aa4576
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date:   Tue Aug 28 21:54:28 2018 +0200
+
+    regex: fix uninitialized memory access
+    
+    I introduced this bug into gnulib in commit
+    8335a4d6c7b4448cd0bcb6d0bebf1d456bcfdb17 dated 2006-04-10;
+    eventually it was merged into glibc.  The bug was found by
+    project-repo <bugs@feusi.co> and reported here:
+    https://lists.gnu.org/r/sed-devel/2018-08/msg00017.html
+    Diagnosis and draft fix reported by Assaf Gordon here:
+    https://lists.gnu.org/r/bug-gnulib/2018-08/msg00071.html
+    https://lists.gnu.org/r/bug-gnulib/2018-08/msg00142.html
+    * posix/regex_internal.c (build_wcs_upper_buffer):
+    Fix bug when mbrtowc returns 0.
+    
+    (cherry picked from commit bc680b336971305cb39896b30d72dc7101b62242)
+
+diff --git a/posix/regex_internal.c b/posix/regex_internal.c
+index 7f0083b918de6530..b10588f1ccbb1992 100644
+--- a/posix/regex_internal.c
++++ b/posix/regex_internal.c
+@@ -317,7 +317,7 @@ build_wcs_upper_buffer (re_string_t *pstr)
+ 	  mbclen = __mbrtowc (&wc,
+ 			      ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
+ 			       + byte_idx), remain_len, &pstr->cur_state);
+-	  if (BE (mbclen < (size_t) -2, 1))
++	  if (BE (0 < mbclen && mbclen < (size_t) -2, 1))
+ 	    {
+ 	      wchar_t wcu = __towupper (wc);
+ 	      if (wcu != wc)
+@@ -386,7 +386,7 @@ build_wcs_upper_buffer (re_string_t *pstr)
+ 	else
+ 	  p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
+ 	mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+-	if (BE (mbclen < (size_t) -2, 1))
++	if (BE (0 < mbclen && mbclen < (size_t) -2, 1))
+ 	  {
+ 	    wchar_t wcu = __towupper (wc);
+ 	    if (wcu != wc)
diff --git a/SOURCES/glibc-rh1622678-2.patch b/SOURCES/glibc-rh1622678-2.patch
new file mode 100644
index 0000000..ecf37f7
--- /dev/null
+++ b/SOURCES/glibc-rh1622678-2.patch
@@ -0,0 +1,226 @@
+commit 0b79004569e5ce1669136b8c41564c3809730f15
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Aug 28 12:57:46 2018 +0200
+
+    regex: Add test tst-regcomp-truncated [BZ #23578]
+    
+    (cherry picked from commit 761404b74d9853ce1608195e24f25b78a910591a)
+
+diff --git a/posix/Makefile b/posix/Makefile
+index 00c62841a282f15a..83162123f9c927a0 100644
+--- a/posix/Makefile
++++ b/posix/Makefile
+@@ -96,7 +96,7 @@ tests		:= test-errno tstgetopt testfnm runtests runptests \
+ 		   tst-posix_fadvise tst-posix_fadvise64 \
+ 		   tst-sysconf-empty-chroot tst-glob_symlinks tst-fexecve \
+ 		   tst-glob-tilde test-ssize-max tst-spawn4 bug-regex37 \
+-		   bug-regex38
++		   bug-regex38 tst-regcomp-truncated
+ tests-internal	:= bug-regex5 bug-regex20 bug-regex33 \
+ 		   tst-rfc3484 tst-rfc3484-2 tst-rfc3484-3 \
+ 		   tst-glob_lstat_compat tst-spawn4-compat
+@@ -194,6 +194,7 @@ $(objpfx)tst-regex2.out: $(gen-locales)
+ $(objpfx)tst-regexloc.out: $(gen-locales)
+ $(objpfx)tst-rxspencer.out: $(gen-locales)
+ $(objpfx)tst-rxspencer-no-utf8.out: $(gen-locales)
++$(objpfx)tst-regcomp-truncated.out: $(gen-locales)
+ endif
+ 
+ # If we will use the generic uname implementation, we must figure out what
+diff --git a/posix/tst-regcomp-truncated.c b/posix/tst-regcomp-truncated.c
+new file mode 100644
+index 0000000000000000..a4a1581bbc2b39eb
+--- /dev/null
++++ b/posix/tst-regcomp-truncated.c
+@@ -0,0 +1,191 @@
++/* Test compilation of truncated regular expressions.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This test constructs various patterns in an attempt to trigger
++   over-reading the regular expression compiler, such as bug
++   23578.  */
++
++#include <array_length.h>
++#include <errno.h>
++#include <locale.h>
++#include <regex.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/next_to_fault.h>
++#include <support/support.h>
++#include <support/test-driver.h>
++#include <wchar.h>
++
++/* Locales to test.  */
++static const char locales[][17] =
++  {
++    "C",
++    "en_US.UTF-8",
++    "de_DE.ISO-8859-1",
++  };
++
++/* Syntax options.  Will be combined with other flags.  */
++static const reg_syntax_t syntaxes[] =
++  {
++    RE_SYNTAX_EMACS,
++    RE_SYNTAX_AWK,
++    RE_SYNTAX_GNU_AWK,
++    RE_SYNTAX_POSIX_AWK,
++    RE_SYNTAX_GREP,
++    RE_SYNTAX_EGREP,
++    RE_SYNTAX_POSIX_EGREP,
++    RE_SYNTAX_POSIX_BASIC,
++    RE_SYNTAX_POSIX_EXTENDED,
++    RE_SYNTAX_POSIX_MINIMAL_EXTENDED,
++  };
++
++/* Trailing characters placed after the initial character.  */
++static const char trailing_strings[][4] =
++  {
++    "",
++    "[",
++    "\\",
++    "[\\",
++    "(",
++    "(\\",
++    "\\(",
++  };
++
++static int
++do_test (void)
++{
++  /* Staging buffer for the constructed regular expression.  */
++  char buffer[16];
++
++  /* Allocation used to detect over-reading by the regular expression
++     compiler.  */
++  struct support_next_to_fault ntf
++    = support_next_to_fault_allocate (sizeof (buffer));
++
++  /* Arbitrary Unicode codepoint at which we stop generating
++     characters.  We do not probe the whole range because that would
++     take too long due to combinatorical exploision as the result of
++     combination with other flags.  */
++  static const wchar_t last_character = 0xfff;
++
++  for (size_t locale_idx = 0; locale_idx < array_length (locales);
++       ++ locale_idx)
++    {
++      if (setlocale (LC_ALL, locales[locale_idx]) == NULL)
++        {
++          support_record_failure ();
++          printf ("error: setlocale (\"%s\"): %m", locales[locale_idx]);
++          continue;
++        }
++      if (test_verbose > 0)
++        printf ("info: testing locale \"%s\"\n", locales[locale_idx]);
++
++      for (wchar_t wc = 0; wc <= last_character; ++wc)
++        {
++          char *after_wc;
++          if (wc == 0)
++            {
++              /* wcrtomb treats L'\0' in a special way.  */
++              *buffer = '\0';
++              after_wc = &buffer[1];
++            }
++          else
++            {
++              mbstate_t ps = { };
++              size_t ret = wcrtomb (buffer, wc, &ps);
++              if (ret == (size_t) -1)
++                {
++                  /* EILSEQ means that the target character set
++                     cannot encode the character.  */
++                  if (errno != EILSEQ)
++                    {
++                      support_record_failure ();
++                      printf ("error: wcrtomb (0x%x) failed: %m\n",
++                              (unsigned) wc);
++                    }
++                  continue;
++                }
++              TEST_VERIFY_EXIT (ret != 0);
++              after_wc = &buffer[ret];
++            }
++
++          for (size_t trailing_idx = 0;
++               trailing_idx < array_length (trailing_strings);
++               ++trailing_idx)
++            {
++              char *after_trailing
++                = stpcpy (after_wc, trailing_strings[trailing_idx]);
++
++              for (int do_nul = 0; do_nul < 2; ++do_nul)
++                {
++                  char *after_nul;
++                  if (do_nul)
++                    {
++                      *after_trailing = '\0';
++                      after_nul = &after_trailing[1];
++                    }
++                  else
++                    after_nul = after_trailing;
++
++                  size_t length = after_nul - buffer;
++
++                  /* Make sure that the faulting region starts
++                     after the used portion of the buffer.  */
++                  char *ntf_start = ntf.buffer + sizeof (buffer) - length;
++                  memcpy (ntf_start, buffer, length);
++
++                  for (const reg_syntax_t *psyntax = syntaxes;
++                       psyntax < array_end (syntaxes); ++psyntax)
++                    for (int do_icase = 0; do_icase < 2; ++do_icase)
++                      {
++                        re_syntax_options = *psyntax;
++                        if (do_icase)
++                          re_syntax_options |= RE_ICASE;
++
++                        regex_t reg;
++                        memset (&reg, 0, sizeof (reg));
++                        const char *msg = re_compile_pattern
++                          (ntf_start, length, &reg);
++                        if (msg != NULL)
++                          {
++                            if (test_verbose > 0)
++                              {
++                                char *quoted = support_quote_blob
++                                  (buffer, length);
++                                printf ("info: compilation failed for pattern"
++                                        " \"%s\", syntax 0x%lx: %s\n",
++                                        quoted, re_syntax_options, msg);
++                                free (quoted);
++                              }
++                          }
++                        else
++                          regfree (&reg);
++                      }
++                }
++            }
++        }
++    }
++
++  support_next_to_fault_free (&ntf);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1623536-2.patch b/SOURCES/glibc-rh1623536-2.patch
new file mode 100644
index 0000000..63d141b
--- /dev/null
+++ b/SOURCES/glibc-rh1623536-2.patch
@@ -0,0 +1,34 @@
+commit 3a67c72c1512f778304a5644dea2fcf5bdece274
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Thu Sep 27 12:37:06 2018 +0200
+
+    Fix stack overflow in tst-setcontext9 (bug 23717)
+    
+    The function f1a, executed on a stack of size 32k, allocates an object of
+    size 32k on the stack.  Make the stack variables static to reduce
+    excessive stack usage.
+    
+    (cherry picked from commit f841c97e515a1673485a2b12b3c280073d737890)
+
+diff --git a/stdlib/tst-setcontext9.c b/stdlib/tst-setcontext9.c
+index db8355766ca7b906..009928235dd5987e 100644
+--- a/stdlib/tst-setcontext9.c
++++ b/stdlib/tst-setcontext9.c
+@@ -58,7 +58,7 @@ f1b (void)
+ static void
+ f1a (void)
+ {
+-  char st2[32768];
++  static char st2[32768];
+   puts ("start f1a");
+   if (getcontext (&ctx[2]) != 0)
+     {
+@@ -93,7 +93,7 @@ f1a (void)
+ static int
+ do_test (void)
+ {
+-  char st1[32768];
++  static char st1[32768];
+   puts ("making contexts");
+   if (getcontext (&ctx[0]) != 0)
+     {
diff --git a/SOURCES/glibc-rh1623536.patch b/SOURCES/glibc-rh1623536.patch
new file mode 100644
index 0000000..8352b3d
--- /dev/null
+++ b/SOURCES/glibc-rh1623536.patch
@@ -0,0 +1,100 @@
+commit a55e109709af55e6ed67d3f9536cac5d929c982e
+Author: Carlos O'Donell <carlos@redhat.com>
+Date:   Wed Sep 5 01:16:42 2018 -0400
+
+    Fix tst-setcontext9 for optimized small stacks.
+    
+    If the compiler reduces the stack usage in function f1 before calling
+    into function f2, then when we swapcontext back to f1 and continue
+    execution we may overwrite registers that were spilled to the stack
+    while f2 was executing.  Later when we return to f2 the corrupt
+    registers will be reloaded from the stack and the test will crash.  This
+    was most commonly observed on i686 with __x86.get_pc_thunk.dx and
+    needing to save and restore $edx.  Overall i686 has few registers and
+    the spilling to the stack is bound to happen, therefore the solution to
+    making this test robust is to split function f1 into two parts f1a and
+    f1b, and allocate f1b it's own stack such that subsequent execution does
+    not overwrite the stack in use by function f2.
+    
+    Tested on i686 and x86_64.
+    
+    Signed-off-by: Carlos O'Donell <carlos@redhat.com>
+    (cherry picked from commit 791b350dc725545e3f9b5db0f97ebdbc60c9735f)
+
+diff --git a/stdlib/tst-setcontext9.c b/stdlib/tst-setcontext9.c
+index 4636ce9030fa38a7..db8355766ca7b906 100644
+--- a/stdlib/tst-setcontext9.c
++++ b/stdlib/tst-setcontext9.c
+@@ -41,26 +41,55 @@ f2 (void)
+ }
+ 
+ static void
+-f1 (void)
++f1b (void)
+ {
+-  puts ("start f1");
+-  if (getcontext (&ctx[2]) != 0)
+-    {
+-      printf ("%s: getcontext: %m\n", __FUNCTION__);
+-      exit (EXIT_FAILURE);
+-    }
+   if (done)
+     {
+-      puts ("set context in f1");
++      puts ("set context in f1b");
+       if (setcontext (&ctx[3]) != 0)
+ 	{
+ 	  printf ("%s: setcontext: %m\n", __FUNCTION__);
+ 	  exit (EXIT_FAILURE);
+ 	}
+     }
++  exit (EXIT_FAILURE);
++}
++
++static void
++f1a (void)
++{
++  char st2[32768];
++  puts ("start f1a");
++  if (getcontext (&ctx[2]) != 0)
++    {
++      printf ("%s: getcontext: %m\n", __FUNCTION__);
++      exit (EXIT_FAILURE);
++    }
++  ctx[2].uc_stack.ss_sp = st2;
++  ctx[2].uc_stack.ss_size = sizeof st2;
++  ctx[2].uc_link = &ctx[0];
++  makecontext (&ctx[2], (void (*) (void)) f1b, 0);
+   f2 ();
+ }
+ 
++/* The execution path through the test looks like this:
++   do_test (call)
++   -> "making contexts"
++   -> "swap contexts"
++   f1a (via swapcontext to ctx[1], with alternate stack)
++   -> "start f1a"
++   f2 (call)
++   -> "swap contexts in f2"
++   f1b (via swapcontext to ctx[2], with alternate stack)
++   -> "set context in f1b"
++   do_test (via setcontext to ctx[3], main stack)
++   -> "setcontext"
++   f2 (via setcontext to ctx[4], with alternate stack)
++   -> "end f2"
++
++   We must use an alternate stack for f1b, because if we don't then the
++   result of executing an earlier caller may overwrite registers
++   spilled to the stack in f2.  */
+ static int
+ do_test (void)
+ {
+@@ -79,7 +108,7 @@ do_test (void)
+   ctx[1].uc_stack.ss_sp = st1;
+   ctx[1].uc_stack.ss_size = sizeof st1;
+   ctx[1].uc_link = &ctx[0];
+-  makecontext (&ctx[1], (void (*) (void)) f1, 0);
++  makecontext (&ctx[1], (void (*) (void)) f1a, 0);
+   puts ("swap contexts");
+   if (swapcontext (&ctx[3], &ctx[1]) != 0)
+     {
diff --git a/SOURCES/glibc-rh1631293-1.patch b/SOURCES/glibc-rh1631293-1.patch
new file mode 100644
index 0000000..fc2a74e
--- /dev/null
+++ b/SOURCES/glibc-rh1631293-1.patch
@@ -0,0 +1,29 @@
+commit e7d22db29cfdd2f1fb97a70a76fa53d151569945
+Author: Mingli Yu <Mingli.Yu@windriver.com>
+Date:   Thu Sep 20 12:41:13 2018 +0200
+
+    Linux gethostid: Check for NULL value from gethostbyname_r [BZ #23679]
+    
+    A NULL value can happen with certain gethostbyname_r failures.
+    
+    (cherry picked from commit 1214ba06e6771acb953a190091b0f6055c64fd25)
+
+diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
+index 2e20f034dc134cc7..ee0190e7f945db1f 100644
+--- a/sysdeps/unix/sysv/linux/gethostid.c
++++ b/sysdeps/unix/sysv/linux/gethostid.c
+@@ -102,12 +102,12 @@ gethostid (void)
+     {
+       int ret = __gethostbyname_r (hostname, &hostbuf,
+ 				   tmpbuf.data, tmpbuf.length, &hp, &herr);
+-      if (ret == 0)
++      if (ret == 0 && hp != NULL)
+ 	break;
+       else
+ 	{
+ 	  /* Enlarge the buffer on ERANGE.  */
+-	  if (herr == NETDB_INTERNAL && errno == ERANGE)
++	  if (ret != 0 && herr == NETDB_INTERNAL && errno == ERANGE)
+ 	    {
+ 	      if (!scratch_buffer_grow (&tmpbuf))
+ 		return 0;
diff --git a/SOURCES/glibc-rh1631293-2.patch b/SOURCES/glibc-rh1631293-2.patch
new file mode 100644
index 0000000..4eef814
--- /dev/null
+++ b/SOURCES/glibc-rh1631293-2.patch
@@ -0,0 +1,146 @@
+commit 307d04334d516bb180f484a2b283f97310bfee66
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Sep 20 12:03:01 2018 +0200
+
+    misc: New test misc/tst-gethostid
+    
+    The empty /etc/hosts file used to trigger bug 23679.
+    
+    (cherry picked from commit db9a8ad4ff3fc58e3773a9a4d0cabe3c1bc9c94c)
+
+diff --git a/misc/Makefile b/misc/Makefile
+index b7be2bc19a6f7ed5..c9f81515ac9aef2c 100644
+--- a/misc/Makefile
++++ b/misc/Makefile
+@@ -86,6 +86,11 @@ tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
+ 	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
+ 	 tst-preadvwritev2 tst-preadvwritev64v2
+ 
++# Tests which need libdl.
++ifeq (yes,$(build-shared))
++tests += tst-gethostid
++endif
++
+ tests-internal := tst-atomic tst-atomic-long tst-allocate_once
+ tests-static := tst-empty
+ 
+@@ -145,3 +150,5 @@ tst-allocate_once-ENV = MALLOC_TRACE=$(objpfx)tst-allocate_once.mtrace
+ $(objpfx)tst-allocate_once-mem.out: $(objpfx)tst-allocate_once.out
+ 	$(common-objpfx)malloc/mtrace $(objpfx)tst-allocate_once.mtrace > $@; \
+ 	$(evaluate-test)
++
++$(objpfx)tst-gethostid: $(libdl)
+diff --git a/misc/tst-gethostid.c b/misc/tst-gethostid.c
+new file mode 100644
+index 0000000000000000..1490aaf3f517ff1d
+--- /dev/null
++++ b/misc/tst-gethostid.c
+@@ -0,0 +1,108 @@
++/* Basic test for gethostid.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <gnu/lib-names.h>
++#include <nss.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/namespace.h>
++#include <support/support.h>
++#include <support/temp_file.h>
++#include <support/xdlfcn.h>
++#include <support/xstdio.h>
++#include <support/xunistd.h>
++#include <unistd.h>
++
++/* Initial test is run outside a chroot, to increase the likelihood of
++   success.  */
++static void
++outside_chroot (void *closure)
++{
++  long id = gethostid ();
++  printf ("info: host ID outside chroot: 0x%lx\n", id);
++}
++
++/* The same, but this time perform a chroot operation.  */
++static void
++in_chroot (void *closure)
++{
++  const char *chroot_path = closure;
++  xchroot (chroot_path);
++  long id = gethostid ();
++  printf ("info: host ID in chroot: 0x%lx\n", id);
++}
++
++static int
++do_test (void)
++{
++  support_isolate_in_subprocess (outside_chroot, NULL);
++
++  /* Now run the test inside a chroot.  */
++  support_become_root ();
++  if (!support_can_chroot ())
++    /* Cannot perform further tests.  */
++    return 0;
++
++  /* Only use nss_files.  */
++  __nss_configure_lookup ("hosts", "files");
++
++  /* Load the DSO outside of the chroot.  */
++  xdlopen (LIBNSS_FILES_SO, RTLD_LAZY);
++
++  char *chroot_dir = support_create_temp_directory ("tst-gethostid-");
++  support_isolate_in_subprocess (in_chroot, chroot_dir);
++
++  /* Tests with /etc/hosts in the chroot.  */
++  {
++    char *path = xasprintf ("%s/etc", chroot_dir);
++    add_temp_file (path);
++    xmkdir (path, 0777);
++    free (path);
++    path = xasprintf ("%s/etc/hosts", chroot_dir);
++    add_temp_file (path);
++
++    FILE *fp = xfopen (path, "w");
++    xfclose (fp);
++    printf ("info: chroot test with an empty /etc/hosts file\n");
++    support_isolate_in_subprocess (in_chroot, chroot_dir);
++
++    char hostname[1024];
++    int ret = gethostname (hostname, sizeof (hostname));
++    if (ret < 0)
++      printf ("warning: invalid result from gethostname: %d\n", ret);
++    else if (strlen (hostname) == 0)
++      puts ("warning: gethostname returned empty string");
++    else
++      {
++        printf ("info: chroot test with IPv6 address in /etc/hosts for: %s\n",
++                hostname);
++        fp = xfopen (path, "w");
++        /* Use an IPv6 address to induce another lookup failure.  */
++        fprintf (fp, "2001:db8::1 %s\n", hostname);
++        xfclose (fp);
++        support_isolate_in_subprocess (in_chroot, chroot_dir);
++      }
++    free (path);
++  }
++  free (chroot_dir);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1631722.patch b/SOURCES/glibc-rh1631722.patch
new file mode 100644
index 0000000..30d9ea5
--- /dev/null
+++ b/SOURCES/glibc-rh1631722.patch
@@ -0,0 +1,108 @@
+commit 0ef2f4400c06927af34c515555f68840a70ba409
+Author: Wilco Dijkstra <wdijkstr@arm.com>
+Date:   Wed Sep 19 16:50:18 2018 +0100
+
+    Fix strstr bug with huge needles (bug 23637)
+    
+    The generic strstr in GLIBC 2.28 fails to match huge needles.  The optimized
+    AVAILABLE macro reads ahead a large fixed amount to reduce the overhead of
+    repeatedly checking for the end of the string.  However if the needle length
+    is larger than this, two_way_long_needle may confuse this as meaning the end
+    of the string and return NULL.  This is fixed by adding the needle length to
+    the amount to read ahead.
+    
+            [BZ #23637]
+            * string/test-strstr.c (pr23637): New function.
+            (test_main): Add tests with longer needles.
+            * string/strcasestr.c (AVAILABLE): Fix readahead distance.
+            * string/strstr.c (AVAILABLE): Likewise.
+    
+        (cherry picked from commit 83a552b0bb9fc2a5e80a0ab3723c0a80ce1db9f2)
+
+diff --git a/string/strcasestr.c b/string/strcasestr.c
+index 5909fe3cdba88e47..421764bd1b0ff22e 100644
+--- a/string/strcasestr.c
++++ b/string/strcasestr.c
+@@ -37,8 +37,9 @@
+ /* Two-Way algorithm.  */
+ #define RETURN_TYPE char *
+ #define AVAILABLE(h, h_l, j, n_l)			\
+-  (((j) + (n_l) <= (h_l)) || ((h_l) += __strnlen ((void*)((h) + (h_l)), 512), \
+-			      (j) + (n_l) <= (h_l)))
++  (((j) + (n_l) <= (h_l)) \
++   || ((h_l) += __strnlen ((void*)((h) + (h_l)), (n_l) + 512), \
++       (j) + (n_l) <= (h_l)))
+ #define CHECK_EOL (1)
+ #define RET0_IF_0(a) if (!a) goto ret0
+ #define CANON_ELEMENT(c) TOLOWER (c)
+diff --git a/string/strstr.c b/string/strstr.c
+index 265e9f310ce507ce..79ebcc75329d0b17 100644
+--- a/string/strstr.c
++++ b/string/strstr.c
+@@ -33,8 +33,9 @@
+ 
+ #define RETURN_TYPE char *
+ #define AVAILABLE(h, h_l, j, n_l)			\
+-  (((j) + (n_l) <= (h_l)) || ((h_l) += __strnlen ((void*)((h) + (h_l)), 512), \
+-			      (j) + (n_l) <= (h_l)))
++  (((j) + (n_l) <= (h_l)) \
++   || ((h_l) += __strnlen ((void*)((h) + (h_l)), (n_l) + 512), \
++       (j) + (n_l) <= (h_l)))
+ #define CHECK_EOL (1)
+ #define RET0_IF_0(a) if (!a) goto ret0
+ #define FASTSEARCH(S,C,N) (void*) strchr ((void*)(S), (C))
+diff --git a/string/test-strstr.c b/string/test-strstr.c
+index 8d99716ff39cc2c2..5861b01b73e4c315 100644
+--- a/string/test-strstr.c
++++ b/string/test-strstr.c
+@@ -151,6 +151,32 @@ check2 (void)
+     }
+ }
+ 
++#define N 1024
++
++static void
++pr23637 (void)
++{
++  char *h = (char*) buf1;
++  char *n = (char*) buf2;
++
++  for (int i = 0; i < N; i++)
++    {
++      n[i] = 'x';
++      h[i] = ' ';
++      h[i + N] = 'x';
++    }
++
++  n[N] = '\0';
++  h[N * 2] = '\0';
++
++  /* Ensure we don't match at the first 'x'.  */
++  h[0] = 'x';
++
++  char *exp_result = stupid_strstr (h, n);
++  FOR_EACH_IMPL (impl, 0)
++    check_result (impl, h, n, exp_result);
++}
++
+ static int
+ test_main (void)
+ {
+@@ -158,6 +184,7 @@ test_main (void)
+ 
+   check1 ();
+   check2 ();
++  pr23637 ();
+ 
+   printf ("%23s", "");
+   FOR_EACH_IMPL (impl, 0)
+@@ -202,6 +229,9 @@ test_main (void)
+ 	do_test (15, 9, hlen, klen, 1);
+ 	do_test (15, 15, hlen, klen, 0);
+ 	do_test (15, 15, hlen, klen, 1);
++
++	do_test (15, 15, hlen + klen * 4, klen * 4, 0);
++	do_test (15, 15, hlen + klen * 4, klen * 4, 1);
+       }
+ 
+   do_test (0, 0, page_size - 1, 16, 0);
diff --git a/SOURCES/glibc-rh1631730.patch b/SOURCES/glibc-rh1631730.patch
new file mode 100644
index 0000000..cc59bac
--- /dev/null
+++ b/SOURCES/glibc-rh1631730.patch
@@ -0,0 +1,82 @@
+commit 2339d6a55eb7a7e040ae888e906adc49eeb59eab
+Author: H.J. Lu <hjl.tools@gmail.com>
+Date:   Wed Sep 12 08:40:59 2018 -0700
+
+    i386: Use ENTRY and END in start.S [BZ #23606]
+    
+    Wrapping the _start function with ENTRY and END to insert ENDBR32 at
+    function entry when CET is enabled.  Since _start now includes CFI,
+    without "cfi_undefined (eip)", unwinder may not terminate at _start
+    and we will get
+    
+    Program received signal SIGSEGV, Segmentation fault.
+    0xf7dc661e in ?? () from /lib/libgcc_s.so.1
+    Missing separate debuginfos, use: dnf debuginfo-install libgcc-8.2.1-3.0.fc28.i686
+    (gdb) bt
+     #0  0xf7dc661e in ?? () from /lib/libgcc_s.so.1
+     #1  0xf7dc7c18 in _Unwind_Backtrace () from /lib/libgcc_s.so.1
+     #2  0xf7f0d809 in __GI___backtrace (array=array@entry=0xffffc7d0,
+        size=size@entry=20) at ../sysdeps/i386/backtrace.c:127
+     #3  0x08049254 in compare (p1=p1@entry=0xffffcad0, p2=p2@entry=0xffffcad4)
+        at backtrace-tst.c:12
+     #4  0xf7e2a28c in msort_with_tmp (p=p@entry=0xffffca5c, b=b@entry=0xffffcad0,
+        n=n@entry=2) at msort.c:65
+     #5  0xf7e29f64 in msort_with_tmp (n=2, b=0xffffcad0, p=0xffffca5c)
+        at msort.c:53
+     #6  msort_with_tmp (p=p@entry=0xffffca5c, b=b@entry=0xffffcad0, n=n@entry=5)
+        at msort.c:53
+     #7  0xf7e29f64 in msort_with_tmp (n=5, b=0xffffcad0, p=0xffffca5c)
+        at msort.c:53
+     #8  msort_with_tmp (p=p@entry=0xffffca5c, b=b@entry=0xffffcad0, n=n@entry=10)
+        at msort.c:53
+     #9  0xf7e29f64 in msort_with_tmp (n=10, b=0xffffcad0, p=0xffffca5c)
+        at msort.c:53
+     #10 msort_with_tmp (p=p@entry=0xffffca5c, b=b@entry=0xffffcad0, n=n@entry=20)
+        at msort.c:53
+     #11 0xf7e2a5b6 in msort_with_tmp (n=20, b=0xffffcad0, p=0xffffca5c)
+        at msort.c:297
+     #12 __GI___qsort_r (b=b@entry=0xffffcad0, n=n@entry=20, s=s@entry=4,
+        cmp=cmp@entry=0x8049230 <compare>, arg=arg@entry=0x0) at msort.c:297
+     #13 0xf7e2a84d in __GI_qsort (b=b@entry=0xffffcad0, n=n@entry=20, s=s@entry=4,
+        cmp=cmp@entry=0x8049230 <compare>) at msort.c:308
+     #14 0x080490f6 in main (argc=2, argv=0xffffcbd4) at backtrace-tst.c:39
+    
+    FAIL: debug/backtrace-tst
+    
+            [BZ #23606]
+            * sysdeps/i386/start.S: Include <sysdep.h>
+            (_start): Use ENTRY/END to insert ENDBR32 at entry when CET is
+            enabled.  Add cfi_undefined (eip).
+    
+    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
+    
+    (cherry picked from commit 5a274db4ea363d6b0b92933f085a92daaf1be2f2)
+
+diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S
+index 91035fa83fb7ee38..e35e9bd31b2cea30 100644
+--- a/sysdeps/i386/start.S
++++ b/sysdeps/i386/start.S
+@@ -52,10 +52,11 @@
+ 					NULL
+ */
+ 
+-	.text
+-	.globl _start
+-	.type _start,@function
+-_start:
++#include <sysdep.h>
++
++ENTRY (_start)
++	/* Clearing frame pointer is insufficient, use CFI.  */
++	cfi_undefined (eip)
+ 	/* Clear the frame pointer.  The ABI suggests this be done, to mark
+ 	   the outermost frame obviously.  */
+ 	xorl %ebp, %ebp
+@@ -131,6 +132,7 @@ _start:
+ 1:	movl	(%esp), %ebx
+ 	ret
+ #endif
++END (_start)
+ 
+ /* To fulfill the System V/i386 ABI we need this symbol.  Yuck, it's so
+    meaningless since we don't support machines < 80386.  */
diff --git a/SOURCES/glibc-rh1635779.patch b/SOURCES/glibc-rh1635779.patch
new file mode 100644
index 0000000..e79fc37
--- /dev/null
+++ b/SOURCES/glibc-rh1635779.patch
@@ -0,0 +1,483 @@
+commit e5d262effe3a87164308a3f37e61b32d0348692a
+Author: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
+Date:   Fri Nov 30 18:05:32 2018 -0200
+
+    Fix _dl_profile_fixup data-dependency issue (Bug 23690)
+    
+    There is a data-dependency between the fields of struct l_reloc_result
+    and the field used as the initialization guard. Users of the guard
+    expect writes to the structure to be observable when they also observe
+    the guard initialized. The solution for this problem is to use an acquire
+    and release load and store to ensure previous writes to the structure are
+    observable if the guard is initialized.
+    
+    The previous implementation used DL_FIXUP_VALUE_ADDR (l_reloc_result->addr)
+    as the initialization guard, making it impossible for some architectures
+    to load and store it atomically, i.e. hppa and ia64, due to its larger size.
+    
+    This commit adds an unsigned int to l_reloc_result to be used as the new
+    initialization guard of the struct, making it possible to load and store
+    it atomically in all architectures. The fix ensures that the values
+    observed in l_reloc_result are consistent and do not lead to crashes.
+    The algorithm is documented in the code in elf/dl-runtime.c
+    (_dl_profile_fixup). Not all data races have been eliminated.
+    
+    Tested with build-many-glibcs and on powerpc, powerpc64, and powerpc64le.
+    
+            [BZ #23690]
+            * elf/dl-runtime.c (_dl_profile_fixup): Guarantee memory
+            modification order when accessing reloc_result->addr.
+            * include/link.h (reloc_result): Add field init.
+            * nptl/Makefile (tests): Add tst-audit-threads.
+            (modules-names): Add tst-audit-threads-mod1 and
+            tst-audit-threads-mod2.
+            Add rules to build tst-audit-threads.
+            * nptl/tst-audit-threads-mod1.c: New file.
+            * nptl/tst-audit-threads-mod2.c: Likewise.
+            * nptl/tst-audit-threads.c: Likewise.
+            * nptl/tst-audit-threads.h: Likewise.
+    
+    Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
+    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+
+diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
+index 63bbc89776..3d2f4a7a76 100644
+--- a/elf/dl-runtime.c
++++ b/elf/dl-runtime.c
+@@ -183,10 +183,36 @@ _dl_profile_fixup (
+   /* This is the address in the array where we store the result of previous
+      relocations.  */
+   struct reloc_result *reloc_result = &l->l_reloc_result[reloc_index];
+-  DL_FIXUP_VALUE_TYPE *resultp = &reloc_result->addr;
+ 
+-  DL_FIXUP_VALUE_TYPE value = *resultp;
+-  if (DL_FIXUP_VALUE_CODE_ADDR (value) == 0)
++ /* CONCURRENCY NOTES:
++
++  Multiple threads may be calling the same PLT sequence and with
++  LD_AUDIT enabled they will be calling into _dl_profile_fixup to
++  update the reloc_result with the result of the lazy resolution.
++  The reloc_result guard variable is reloc_init, and we use
++  acquire/release loads and store to it to ensure that the results of
++  the structure are consistent with the loaded value of the guard.
++  This does not fix all of the data races that occur when two or more
++  threads read reloc_result->reloc_init with a value of zero and read
++  and write to that reloc_result concurrently.  The expectation is
++  generally that while this is a data race it works because the
++  threads write the same values.  Until the data races are fixed
++  there is a potential for problems to arise from these data races.
++  The reloc result updates should happen in parallel but there should
++  be an atomic RMW which does the final update to the real result
++  entry (see bug 23790).
++
++  The following code uses reloc_result->init set to 0 to indicate if it is
++  the first time this object is being relocated, otherwise 1 which
++  indicates the object has already been relocated.
++
++  Reading/Writing from/to reloc_result->reloc_init must not happen
++  before previous writes to reloc_result complete as they could
++  end-up with an incomplete struct.  */
++  DL_FIXUP_VALUE_TYPE value;
++  unsigned int init = atomic_load_acquire (&reloc_result->init);
++
++  if (init == 0)
+     {
+       /* This is the first time we have to relocate this object.  */
+       const ElfW(Sym) *const symtab
+@@ -346,19 +372,31 @@ _dl_profile_fixup (
+ 
+       /* Store the result for later runs.  */
+       if (__glibc_likely (! GLRO(dl_bind_not)))
+-	*resultp = value;
++	{
++	  reloc_result->addr = value;
++	  /* Guarantee all previous writes complete before
++	     init is updated.  See CONCURRENCY NOTES earlier  */
++	  atomic_store_release (&reloc_result->init, 1);
++	}
++      init = 1;
+     }
++  else
++    value = reloc_result->addr;
+ 
+   /* By default we do not call the pltexit function.  */
+   long int framesize = -1;
+ 
++
+ #ifdef SHARED
+   /* Auditing checkpoint: report the PLT entering and allow the
+      auditors to change the value.  */
+-  if (DL_FIXUP_VALUE_CODE_ADDR (value) != 0 && GLRO(dl_naudit) > 0
++  if (GLRO(dl_naudit) > 0
+       /* Don't do anything if no auditor wants to intercept this call.  */
+       && (reloc_result->enterexit & LA_SYMB_NOPLTENTER) == 0)
+     {
++      /* Sanity check:  DL_FIXUP_VALUE_CODE_ADDR (value) should have been
++	 initialized earlier in this function or in another thread.  */
++      assert (DL_FIXUP_VALUE_CODE_ADDR (value) != 0);
+       ElfW(Sym) *defsym = ((ElfW(Sym) *) D_PTR (reloc_result->bound,
+ 						l_info[DT_SYMTAB])
+ 			   + reloc_result->boundndx);
+diff --git a/include/link.h b/include/link.h
+index 5924594548..83b1c34b7b 100644
+--- a/include/link.h
++++ b/include/link.h
+@@ -216,6 +216,10 @@ struct link_map
+       unsigned int boundndx;
+       uint32_t enterexit;
+       unsigned int flags;
++      /* CONCURRENCY NOTE: This is used to guard the concurrent initialization
++	 of the relocation result across multiple threads.  See the more
++	 detailed notes in elf/dl-runtime.c.  */
++      unsigned int init;
+     } *l_reloc_result;
+ 
+     /* Pointer to the version information if available.  */
+diff --git a/nptl/Makefile b/nptl/Makefile
+index 982e43adfa..98b0aa01c7 100644
+--- a/nptl/Makefile
++++ b/nptl/Makefile
+@@ -382,7 +382,8 @@ tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \
+ 	 tst-cleanupx0 tst-cleanupx1 tst-cleanupx2 tst-cleanupx3 tst-cleanupx4 \
+ 	 tst-oncex3 tst-oncex4
+ ifeq ($(build-shared),yes)
+-tests += tst-atfork2 tst-tls4 tst-_res1 tst-fini1 tst-compat-forwarder
++tests += tst-atfork2 tst-tls4 tst-_res1 tst-fini1 tst-compat-forwarder \
++	 tst-audit-threads
+ tests-internal += tst-tls3 tst-tls3-malloc tst-tls5 tst-stackguard1
+ tests-nolibpthread += tst-fini1
+ ifeq ($(have-z-execstack),yes)
+@@ -394,7 +395,8 @@ modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \
+ 		tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \
+ 		tst-tls5modd tst-tls5mode tst-tls5modf tst-stack4mod \
+ 		tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod \
+-		tst-join7mod tst-compat-forwarder-mod
++		tst-join7mod tst-compat-forwarder-mod tst-audit-threads-mod1 \
++		tst-audit-threads-mod2
+ extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \
+ 		   tst-cleanup4aux.o tst-cleanupx4aux.o
+ test-extras += tst-cleanup4aux tst-cleanupx4aux
+@@ -712,6 +714,14 @@ $(objpfx)tst-compat-forwarder: $(objpfx)tst-compat-forwarder-mod.so
+ 
+ tst-mutex10-ENV = GLIBC_TUNABLES=glibc.elision.enable=1
+ 
++# Protect against a build using -Wl,-z,now.
++LDFLAGS-tst-audit-threads-mod1.so = -Wl,-z,lazy
++LDFLAGS-tst-audit-threads-mod2.so = -Wl,-z,lazy
++LDFLAGS-tst-audit-threads = -Wl,-z,lazy
++$(objpfx)tst-audit-threads: $(objpfx)tst-audit-threads-mod2.so
++$(objpfx)tst-audit-threads.out: $(objpfx)tst-audit-threads-mod1.so
++tst-audit-threads-ENV = LD_AUDIT=$(objpfx)tst-audit-threads-mod1.so
++
+ # The tests here better do not run in parallel
+ ifneq ($(filter %tests,$(MAKECMDGOALS)),)
+ .NOTPARALLEL:
+diff --git a/nptl/tst-audit-threads-mod1.c b/nptl/tst-audit-threads-mod1.c
+new file mode 100644
+index 0000000000..615d5ee512
+--- /dev/null
++++ b/nptl/tst-audit-threads-mod1.c
+@@ -0,0 +1,74 @@
++/* Dummy audit library for test-audit-threads.
++
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <elf.h>
++#include <link.h>
++#include <stdio.h>
++#include <assert.h>
++#include <string.h>
++
++/* We must use a dummy LD_AUDIT module to force the dynamic loader to
++   *not* update the real PLT, and instead use a cached value for the
++   lazy resolution result.  It is the update of that cached value that
++   we are testing for correctness by doing this.  */
++
++/* Library to be audited.  */
++#define LIB "tst-audit-threads-mod2.so"
++/* CALLNUM is the number of retNum functions.  */
++#define CALLNUM 7999
++
++#define CONCATX(a, b) __CONCAT (a, b)
++
++static int previous = 0;
++
++unsigned int
++la_version (unsigned int ver)
++{
++  return 1;
++}
++
++unsigned int
++la_objopen (struct link_map *map, Lmid_t lmid, uintptr_t *cookie)
++{
++  return LA_FLG_BINDTO | LA_FLG_BINDFROM;
++}
++
++uintptr_t
++CONCATX(la_symbind, __ELF_NATIVE_CLASS) (ElfW(Sym) *sym,
++					unsigned int ndx,
++					uintptr_t *refcook,
++					uintptr_t *defcook,
++					unsigned int *flags,
++					const char *symname)
++{
++  const char * retnum = "retNum";
++  char * num = strstr (symname, retnum);
++  int n;
++  /* Validate if the symbols are getting called in the correct order.
++     This code is here to verify binutils does not optimize out the PLT
++     entries that require the symbol binding.  */
++  if (num != NULL)
++    {
++      n = atoi (num);
++      assert (n >= previous);
++      assert (n <= CALLNUM);
++      previous = n;
++    }
++  return sym->st_value;
++}
+diff --git a/nptl/tst-audit-threads-mod2.c b/nptl/tst-audit-threads-mod2.c
+new file mode 100644
+index 0000000000..f9817dd3dc
+--- /dev/null
++++ b/nptl/tst-audit-threads-mod2.c
+@@ -0,0 +1,22 @@
++/* Shared object with a huge number of functions for test-audit-threads.
++
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Define all the retNumN functions in a library.  */
++#define definenum
++#include "tst-audit-threads.h"
+diff --git a/nptl/tst-audit-threads.c b/nptl/tst-audit-threads.c
+new file mode 100644
+index 0000000000..e4bf433bd8
+--- /dev/null
++++ b/nptl/tst-audit-threads.c
+@@ -0,0 +1,97 @@
++/* Test multi-threading using LD_AUDIT.
++
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This test uses a dummy LD_AUDIT library (test-audit-threads-mod1) and a
++   library with a huge number of functions in order to validate lazy symbol
++   binding with an audit library.  We use one thread per CPU to test that
++   concurrent lazy resolution does not have any defects which would cause
++   the process to fail.  We use an LD_AUDIT library to force the testing of
++   the relocation resolution caching code in the dynamic loader i.e.
++   _dl_runtime_profile and _dl_profile_fixup.  */
++
++#include <support/xthread.h>
++#include <strings.h>
++#include <stdlib.h>
++#include <sys/sysinfo.h>
++
++static int do_test (void);
++
++/* This test usually takes less than 3s to run.  However, there are cases that
++   take up to 30s.  */
++#define TIMEOUT 60
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
++
++/* Declare the functions we are going to call.  */
++#define externnum
++#include "tst-audit-threads.h"
++#undef externnum
++
++int num_threads;
++pthread_barrier_t barrier;
++
++void
++sync_all (int num)
++{
++  pthread_barrier_wait (&barrier);
++}
++
++void
++call_all_ret_nums (void)
++{
++  /* Call each function one at a time from all threads.  */
++#define callnum
++#include "tst-audit-threads.h"
++#undef callnum
++}
++
++void *
++thread_main (void *unused)
++{
++  call_all_ret_nums ();
++  return NULL;
++}
++
++#define STR2(X) #X
++#define STR(X) STR2(X)
++
++static int
++do_test (void)
++{
++  int i;
++  pthread_t *threads;
++
++  num_threads = get_nprocs ();
++  if (num_threads <= 1)
++    num_threads = 2;
++
++  /* Used to synchronize all the threads after calling each retNumN.  */
++  xpthread_barrier_init (&barrier, NULL, num_threads);
++
++  threads = (pthread_t *) xcalloc (num_threads, sizeof(pthread_t));
++  for (i = 0; i < num_threads; i++)
++    threads[i] = xpthread_create(NULL, thread_main, NULL);
++
++  for (i = 0; i < num_threads; i++)
++    xpthread_join(threads[i]);
++
++  free (threads);
++
++  return 0;
++}
+diff --git a/nptl/tst-audit-threads.h b/nptl/tst-audit-threads.h
+new file mode 100644
+index 0000000000..1c9ecc08df
+--- /dev/null
++++ b/nptl/tst-audit-threads.h
+@@ -0,0 +1,92 @@
++/* Helper header for test-audit-threads.
++
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* We use this helper to create a large number of functions, all of
++   which will be resolved lazily and thus have their PLT updated.
++   This is done to provide enough functions that we can statistically
++   observe a thread vs. PLT resolution failure if one exists.  */
++
++#define CONCAT(a, b) a ## b
++#define NUM(x, y) CONCAT (x, y)
++
++#define FUNC10(x)	\
++  FUNC (NUM (x, 0));	\
++  FUNC (NUM (x, 1));	\
++  FUNC (NUM (x, 2));	\
++  FUNC (NUM (x, 3));	\
++  FUNC (NUM (x, 4));	\
++  FUNC (NUM (x, 5));	\
++  FUNC (NUM (x, 6));	\
++  FUNC (NUM (x, 7));	\
++  FUNC (NUM (x, 8));	\
++  FUNC (NUM (x, 9))
++
++#define FUNC100(x)	\
++  FUNC10 (NUM (x, 0));	\
++  FUNC10 (NUM (x, 1));	\
++  FUNC10 (NUM (x, 2));	\
++  FUNC10 (NUM (x, 3));	\
++  FUNC10 (NUM (x, 4));	\
++  FUNC10 (NUM (x, 5));	\
++  FUNC10 (NUM (x, 6));	\
++  FUNC10 (NUM (x, 7));	\
++  FUNC10 (NUM (x, 8));	\
++  FUNC10 (NUM (x, 9))
++
++#define FUNC1000(x)		\
++  FUNC100 (NUM (x, 0));		\
++  FUNC100 (NUM (x, 1));		\
++  FUNC100 (NUM (x, 2));		\
++  FUNC100 (NUM (x, 3));		\
++  FUNC100 (NUM (x, 4));		\
++  FUNC100 (NUM (x, 5));		\
++  FUNC100 (NUM (x, 6));		\
++  FUNC100 (NUM (x, 7));		\
++  FUNC100 (NUM (x, 8));		\
++  FUNC100 (NUM (x, 9))
++
++#define FUNC7000()	\
++  FUNC1000 (1);		\
++  FUNC1000 (2);		\
++  FUNC1000 (3);		\
++  FUNC1000 (4);		\
++  FUNC1000 (5);		\
++  FUNC1000 (6);		\
++  FUNC1000 (7);
++
++#ifdef FUNC
++# undef FUNC
++#endif
++
++#ifdef externnum
++# define FUNC(x) extern int CONCAT (retNum, x) (void)
++#endif
++
++#ifdef definenum
++# define FUNC(x) int CONCAT (retNum, x) (void) { return x; }
++#endif
++
++#ifdef callnum
++# define FUNC(x) CONCAT (retNum, x) (); sync_all (x)
++#endif
++
++/* A value of 7000 functions is chosen as an arbitrarily large
++   number of functions that will allow us enough attempts to
++   verify lazy resolution operation.  */
++FUNC7000 ();
diff --git a/SOURCES/glibc-rh1638520.patch b/SOURCES/glibc-rh1638520.patch
new file mode 100644
index 0000000..e52b7e5
--- /dev/null
+++ b/SOURCES/glibc-rh1638520.patch
@@ -0,0 +1,35 @@
+commit ed643089cd3251038863d32e67ec47b94cd557f3
+Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
+Date:   Tue Oct 9 14:31:28 2018 +0100
+
+    Increase timeout of libio/tst-readline
+    
+    Increase timeout from the default 20s to 100s. This test makes close to
+    20 million syscalls with distribution:
+    
+    12327675 read
+     4143204 lseek
+      929475 close
+      929471 openat
+       92817 fstat
+        1431 write
+    ...
+    
+    The default timeout assumes each can finish in 1us on average which
+    is not true on slow machines.
+    
+    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+    
+            * libio/tst-readline.c (TIMEOUT): Define.
+
+diff --git a/libio/tst-readline.c b/libio/tst-readline.c
+index 9322ef68da5e38a9..63f5227760d88c63 100644
+--- a/libio/tst-readline.c
++++ b/libio/tst-readline.c
+@@ -232,5 +232,6 @@ do_test (void)
+   return 0;
+ }
+ 
++#define TIMEOUT 100
+ #define PREPARE prepare
+ #include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1638523-1.patch b/SOURCES/glibc-rh1638523-1.patch
new file mode 100644
index 0000000..bee0ab0
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-1.patch
@@ -0,0 +1,2823 @@
+This patch backports the support/ directory as of the upstream commit
+below.  (It does not include the required Makefile changes to enable
+test-in-container builds.)
+ 
+commit 00c86a37d1b63044e3169d1f2ebec23447c73f79
+Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date:   Wed Nov 7 11:09:02 2018 -0200
+
+    support: Fix printf format for TEST_COMPARE_STRING
+    
+    Fix the following on 32 bits targets:
+    
+    support_test_compare_string.c: In function ‘support_test_compare_string’:
+    support_test_compare_string.c:80:37: error: format ‘%lu’ expects argument of
+    type ‘long unsigned int’, but argument 2 has type ‘size_t’ {aka ‘unsigned int’}
+    [-Werror=format=]
+             printf ("  string length: %lu bytes\n", left_length);
+                                       ~~^           ~~~~~~~~~~~
+                                       %u
+    Checked on arm-linux-gnueabihf.
+    
+            * support/support_test_compare_string.c
+            (support_test_compare_string): Fix printf format.
+
+diff --git a/support/Makefile b/support/Makefile
+index 652d2cdf6945b2eb..2b663fbbfa334ea2 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -25,6 +25,7 @@ extra-libs-others = $(extra-libs)
+ extra-libs-noinstall := $(extra-libs)
+ 
+ libsupport-routines = \
++  blob_repeat \
+   check \
+   check_addrinfo \
+   check_dns_packet \
+@@ -43,6 +44,8 @@ libsupport-routines = \
+   support_capture_subprocess \
+   support_capture_subprocess_check \
+   support_chroot \
++  support_copy_file_range \
++  support_descriptor_supports_holes \
+   support_enter_mount_namespace \
+   support_enter_network_namespace \
+   support_format_address_family \
+@@ -53,12 +56,14 @@ libsupport-routines = \
+   support_format_netent \
+   support_isolate_in_subprocess \
+   support_openpty \
++  support_paths \
+   support_quote_blob \
+   support_record_failure \
+   support_run_diff \
+   support_shared_allocate \
+   support_test_compare_blob \
+   support_test_compare_failure \
++  support_test_compare_string \
+   support_write_file_string \
+   support_test_main \
+   support_test_verify_impl \
+@@ -72,6 +77,7 @@ libsupport-routines = \
+   xchroot \
+   xclose \
+   xconnect \
++  xcopy_file_range \
+   xdlfcn \
+   xdup2 \
+   xfclose \
+@@ -84,6 +90,7 @@ libsupport-routines = \
+   xmalloc \
+   xmemstream \
+   xmkdir \
++  xmkdirp \
+   xmmap \
+   xmprotect \
+   xmunmap \
+@@ -139,6 +146,7 @@ libsupport-routines = \
+   xsocket \
+   xstrdup \
+   xstrndup \
++  xsymlink \
+   xsysconf \
+   xunlink \
+   xwaitpid \
+@@ -151,15 +159,47 @@ ifeq ($(build-shared),yes)
+ libsupport-inhibit-o += .o
+ endif
+ 
++CFLAGS-support_paths.c = \
++		-DSRCDIR_PATH=\"`cd .. ; pwd`\" \
++		-DOBJDIR_PATH=\"`cd $(objpfx)/..; pwd`\" \
++		-DOBJDIR_ELF_LDSO_PATH=\"`cd $(objpfx)/..; pwd`/elf/$(rtld-installed-name)\" \
++		-DINSTDIR_PATH=\"$(prefix)\" \
++		-DLIBDIR_PATH=\"$(libdir)\"
++
++ifeq (,$(CXX))
++LINKS_DSO_PROGRAM = links-dso-program-c
++else
++LINKS_DSO_PROGRAM = links-dso-program
++LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
++endif
++
++LDLIBS-test-container = $(libsupport)
++
++others += test-container
++others-noinstall += test-container
++
++others += shell-container echo-container true-container
++others-noinstall += shell-container echo-container true-container
++
++others += $(LINKS_DSO_PROGRAM)
++others-noinstall += $(LINKS_DSO_PROGRAM)
++
++$(objpfx)test-container : $(libsupport)
++$(objpfx)shell-container : $(libsupport)
++$(objpfx)echo-container : $(libsupport)
++$(objpfx)true-container : $(libsupport)
++
+ tests = \
+   README-testing \
+   tst-support-namespace \
++  tst-support_blob_repeat \
+   tst-support_capture_subprocess \
+   tst-support_format_dns_packet \
+   tst-support_quote_blob \
+   tst-support_record_failure \
+   tst-test_compare \
+   tst-test_compare_blob \
++  tst-test_compare_string \
+   tst-xreadlink \
+ 
+ ifeq ($(run-built-tests),yes)
+diff --git a/support/blob_repeat.c b/support/blob_repeat.c
+new file mode 100644
+index 0000000000000000..16c1e448b990e386
+--- /dev/null
++++ b/support/blob_repeat.c
+@@ -0,0 +1,282 @@
++/* Repeating a memory blob, with alias mapping optimization.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <errno.h>
++#include <fcntl.h>
++#include <stdbool.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/blob_repeat.h>
++#include <support/check.h>
++#include <support/test-driver.h>
++#include <support/support.h>
++#include <support/xunistd.h>
++#include <sys/mman.h>
++#include <unistd.h>
++#include <wchar.h>
++
++/* Small allocations should use malloc directly instead of the mmap
++   optimization because mappings carry a lot of overhead.  */
++static const size_t maximum_small_size = 4 * 1024 * 1024;
++
++/* Internal helper for fill.  */
++static void
++fill0 (char *target, const char *element, size_t element_size,
++       size_t count)
++{
++  while (count > 0)
++    {
++      memcpy (target, element, element_size);
++      target += element_size;
++      --count;
++    }
++}
++
++/* Fill the buffer at TARGET with COUNT copies of the ELEMENT_SIZE
++   bytes starting at ELEMENT.  */
++static void
++fill (char *target, const char *element, size_t element_size,
++      size_t count)
++{
++  if (element_size == 0 || count == 0)
++    return;
++  else if (element_size == 1)
++    memset (target, element[0], count);
++  else if (element_size == sizeof (wchar_t))
++    {
++      wchar_t wc;
++      memcpy (&wc, element, sizeof (wc));
++      wmemset ((wchar_t *) target, wc, count);
++    }
++  else if (element_size < 1024 && count > 4096)
++    {
++      /* Use larger copies for really small element sizes.  */
++      char buffer[8192];
++      size_t buffer_count = sizeof (buffer) / element_size;
++      fill0 (buffer, element, element_size, buffer_count);
++      while (count > 0)
++        {
++          size_t copy_count = buffer_count;
++          if (copy_count > count)
++            copy_count = count;
++          size_t copy_bytes = copy_count * element_size;
++          memcpy (target, buffer, copy_bytes);
++          target += copy_bytes;
++          count -= copy_count;
++        }
++    }
++  else
++    fill0 (target, element, element_size, count);
++}
++
++/* Use malloc instead of mmap for small allocations and unusual size
++   combinations.  */
++static struct support_blob_repeat
++allocate_malloc (size_t total_size, const void *element, size_t element_size,
++                 size_t count)
++{
++  void *buffer = malloc (total_size);
++  if (buffer == NULL)
++    return (struct support_blob_repeat) { 0 };
++  fill (buffer, element, element_size, count);
++  return (struct support_blob_repeat)
++    {
++      .start = buffer,
++      .size = total_size,
++      .use_malloc = true
++    };
++}
++
++/* Return the least common multiple of PAGE_SIZE and ELEMENT_SIZE,
++   avoiding overflow.  This assumes that PAGE_SIZE is a power of
++   two.  */
++static size_t
++minimum_stride_size (size_t page_size, size_t element_size)
++{
++  TEST_VERIFY_EXIT (page_size > 0);
++  TEST_VERIFY_EXIT (element_size > 0);
++
++  /* Compute the number of trailing zeros common to both sizes.  */
++  unsigned int common_zeros = __builtin_ctzll (page_size | element_size);
++
++  /* In the product, this power of two appears twice, but in the least
++     common multiple, it appears only once.  Therefore, shift one
++     factor.  */
++  size_t multiple;
++  if (__builtin_mul_overflow (page_size >> common_zeros, element_size,
++                              &multiple))
++    return 0;
++  return multiple;
++}
++
++/* Allocations larger than maximum_small_size potentially use mmap
++   with alias mappings.  */
++static struct support_blob_repeat
++allocate_big (size_t total_size, const void *element, size_t element_size,
++              size_t count)
++{
++  unsigned long page_size = xsysconf (_SC_PAGESIZE);
++  size_t stride_size = minimum_stride_size (page_size, element_size);
++  if (stride_size == 0)
++    {
++      errno = EOVERFLOW;
++      return (struct support_blob_repeat) { 0 };
++    }
++
++  /* Ensure that the stride size is at least maximum_small_size.  This
++     is necessary to reduce the number of distinct mappings.  */
++  if (stride_size < maximum_small_size)
++    stride_size
++      = ((maximum_small_size + stride_size - 1) / stride_size) * stride_size;
++
++  if (stride_size > total_size)
++    /* The mmap optimization would not save anything.  */
++    return allocate_malloc (total_size, element, element_size, count);
++
++  /* Reserve the memory region.  If we cannot create the mapping,
++     there is no reason to set up the backing file.  */
++  void *target = mmap (NULL, total_size, PROT_NONE,
++                       MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
++  if (target == MAP_FAILED)
++    return (struct support_blob_repeat) { 0 };
++
++  /* Create the backing file for the repeated mapping.  Call mkstemp
++     directly to remove the resources backing the temporary file
++     immediately, once support_blob_repeat_free is called.  Using
++     create_temp_file would result in a warning during post-test
++     cleanup.  */
++  int fd;
++  {
++    char *temppath = xasprintf ("%s/support_blob_repeat-XXXXXX", test_dir);
++    fd = mkstemp (temppath);
++    if (fd < 0)
++      FAIL_EXIT1 ("mkstemp (\"%s\"): %m", temppath);
++    xunlink (temppath);
++    free (temppath);
++  }
++
++  /* Make sure that there is backing storage, so that the fill
++     operation will not fault.  */
++  if (posix_fallocate (fd, 0, stride_size) != 0)
++    FAIL_EXIT1 ("posix_fallocate (%zu): %m", stride_size);
++
++  /* The stride size must still be a multiple of the page size and
++     element size.  */
++  TEST_VERIFY_EXIT ((stride_size % page_size) == 0);
++  TEST_VERIFY_EXIT ((stride_size % element_size) == 0);
++
++  /* Fill the backing store.  */
++  {
++    void *ptr = mmap (target, stride_size, PROT_READ | PROT_WRITE,
++                      MAP_FIXED | MAP_FILE | MAP_SHARED, fd, 0);
++    if (ptr == MAP_FAILED)
++      {
++        int saved_errno = errno;
++        xmunmap (target, total_size);
++        xclose (fd);
++        errno = saved_errno;
++        return (struct support_blob_repeat) { 0 };
++      }
++    if (ptr != target)
++      FAIL_EXIT1 ("mapping of %zu bytes moved from %p to %p",
++                  stride_size, target, ptr);
++
++    /* Write the repeating data.  */
++    fill (target, element, element_size, stride_size / element_size);
++
++    /* Return to a PROT_NONE mapping, just to be on the safe side.  */
++    ptr = mmap (target, stride_size, PROT_NONE,
++                MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
++    if (ptr == MAP_FAILED)
++      FAIL_EXIT1 ("Failed to reinstate PROT_NONE mapping: %m");
++    if (ptr != target)
++      FAIL_EXIT1 ("PROT_NONE mapping of %zu bytes moved from %p to %p",
++                  stride_size, target, ptr);
++  }
++
++  /* Create the alias mappings.  */
++  {
++    size_t remaining_size = total_size;
++    char *current = target;
++    int flags = MAP_FIXED | MAP_FILE | MAP_PRIVATE;
++#ifdef MAP_NORESERVE
++    flags |= MAP_NORESERVE;
++#endif
++    while (remaining_size > 0)
++      {
++        size_t to_map = stride_size;
++        if (to_map > remaining_size)
++          to_map = remaining_size;
++        void *ptr = mmap (current, to_map, PROT_READ | PROT_WRITE,
++                          flags, fd, 0);
++        if (ptr == MAP_FAILED)
++          {
++            int saved_errno = errno;
++            xmunmap (target, total_size);
++            xclose (fd);
++            errno = saved_errno;
++            return (struct support_blob_repeat) { 0 };
++          }
++        if (ptr != current)
++          FAIL_EXIT1 ("MAP_PRIVATE mapping of %zu bytes moved from %p to %p",
++                      to_map, target, ptr);
++        remaining_size -= to_map;
++        current += to_map;
++      }
++  }
++
++  xclose (fd);
++
++  return (struct support_blob_repeat)
++    {
++      .start = target,
++      .size = total_size,
++      .use_malloc = false
++    };
++}
++
++struct support_blob_repeat
++support_blob_repeat_allocate (const void *element, size_t element_size,
++                              size_t count)
++{
++  size_t total_size;
++  if (__builtin_mul_overflow (element_size, count, &total_size))
++    {
++      errno = EOVERFLOW;
++      return (struct support_blob_repeat) { 0 };
++    }
++  if (total_size <= maximum_small_size)
++    return allocate_malloc (total_size, element, element_size, count);
++  else
++    return allocate_big (total_size, element, element_size, count);
++}
++
++void
++support_blob_repeat_free (struct support_blob_repeat *blob)
++{
++  if (blob->size > 0)
++    {
++      int saved_errno = errno;
++      if (blob->use_malloc)
++        free (blob->start);
++      else
++        xmunmap (blob->start, blob->size);
++      errno = saved_errno;
++    }
++  *blob = (struct support_blob_repeat) { 0 };
++}
+diff --git a/support/blob_repeat.h b/support/blob_repeat.h
+new file mode 100644
+index 0000000000000000..8e9d7ff5f1e01f66
+--- /dev/null
++++ b/support/blob_repeat.h
+@@ -0,0 +1,44 @@
++/* Repeating a memory blob, with alias mapping optimization.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#ifndef SUPPORT_BLOB_REPEAT_H
++#define SUPPORT_BLOB_REPEAT_H
++
++#include <stdbool.h>
++#include <stddef.h>
++
++struct support_blob_repeat
++{
++  void *start;
++  size_t size;
++  bool use_malloc;
++};
++
++/* Return an allocation of COUNT elements, each of ELEMENT_SIZE bytes,
++   initialized with the bytes starting at ELEMENT.  The memory is
++   writable (and thus counts towards the commit charge).  In case of
++   on error, all members of the return struct are zero-initialized,
++   and errno is set accordingly.  */
++struct support_blob_repeat support_blob_repeat_allocate (const void *element,
++                                                         size_t element_size,
++                                                         size_t count);
++
++/* Deallocate the blob created by support_blob_repeat_allocate.  */
++void support_blob_repeat_free (struct support_blob_repeat *);
++
++#endif /* SUPPORT_BLOB_REPEAT_H */
+diff --git a/support/check.h b/support/check.h
+index b3a4645e9255e90d..e6765289f2492501 100644
+--- a/support/check.h
++++ b/support/check.h
+@@ -163,6 +163,19 @@ void support_test_compare_blob (const void *left,
+                                 const char *right_exp,
+                                 const char *right_len_exp);
+ 
++/* Compare the strings LEFT and RIGHT and report a test failure if
++   they are different.  Also report failure if one of the arguments is
++   a null pointer and the other is not.  The strings should be
++   reasonably short because on mismatch, both are printed.  */
++#define TEST_COMPARE_STRING(left, right)                         \
++  (support_test_compare_string (left, right, __FILE__, __LINE__, \
++                                #left, #right))
++
++void support_test_compare_string (const char *left, const char *right,
++                                  const char *file, int line,
++                                  const char *left_expr,
++                                  const char *right_expr);
++
+ /* Internal function called by the test driver.  */
+ int support_report_failure (int status)
+   __attribute__ ((weak, warn_unused_result));
+diff --git a/support/echo-container.c b/support/echo-container.c
+new file mode 100644
+index 0000000000000000..e4d48df95722af2e
+--- /dev/null
++++ b/support/echo-container.c
+@@ -0,0 +1,34 @@
++/* Minimal /bin/echo for in-container use.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++
++int
++main (int argc, const char **argv)
++{
++  int i;
++
++  for (i = 1; i < argc; i++)
++    {
++      if (i > 1)
++	putchar (' ');
++      fputs (argv[i], stdout);
++    }
++  putchar ('\n');
++  return 0;
++}
+diff --git a/support/links-dso-program-c.c b/support/links-dso-program-c.c
+new file mode 100644
+index 0000000000000000..d28a28a0d09c743c
+--- /dev/null
++++ b/support/links-dso-program-c.c
+@@ -0,0 +1,9 @@
++#include <stdio.h>
++
++int
++main (int argc, char **argv)
++{
++  /* Complexity to keep gcc from optimizing this away.  */
++  printf ("This is a test %s.\n", argc > 1 ? argv[1] : "null");
++  return 0;
++}
+diff --git a/support/links-dso-program.cc b/support/links-dso-program.cc
+new file mode 100644
+index 0000000000000000..dba6976c0609a332
+--- /dev/null
++++ b/support/links-dso-program.cc
+@@ -0,0 +1,11 @@
++#include <iostream>
++
++using namespace std;
++
++int
++main (int argc, char **argv)
++{
++  /* Complexity to keep gcc from optimizing this away.  */
++  cout << (argc > 1 ? argv[1] : "null");
++  return 0;
++}
+diff --git a/support/shell-container.c b/support/shell-container.c
+new file mode 100644
+index 0000000000000000..9bd90d3f60529079
+--- /dev/null
++++ b/support/shell-container.c
+@@ -0,0 +1,395 @@
++/* Minimal /bin/sh for in-container use.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#define _FILE_OFFSET_BITS 64
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sched.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <dirent.h>
++#include <string.h>
++#include <sys/stat.h>
++#include <sys/fcntl.h>
++#include <sys/file.h>
++#include <sys/wait.h>
++#include <stdarg.h>
++#include <sys/sysmacros.h>
++#include <ctype.h>
++#include <utime.h>
++#include <errno.h>
++#include <error.h>
++
++#include <support/support.h>
++
++/* Design considerations
++
++ General rule: optimize for developer time, not run time.
++
++ Specifically:
++
++ * Don't worry about slow algorithms
++ * Don't worry about free'ing memory
++ * Don't implement anything the testsuite doesn't need.
++ * Line and argument counts are limited, see below.
++
++*/
++
++#define MAX_ARG_COUNT 100
++#define MAX_LINE_LENGTH 1000
++
++/* Debugging is enabled via --debug, which must be the first argument.  */
++static int debug_mode = 0;
++#define dprintf if (debug_mode) fprintf
++
++/* Emulate the "/bin/true" command.  Arguments are ignored.  */
++static int
++true_func (char **argv)
++{
++  return 0;
++}
++
++/* Emulate the "/bin/echo" command.  Options are ignored, arguments
++   are printed to stdout.  */
++static int
++echo_func (char **argv)
++{
++  int i;
++
++  for (i = 0; argv[i]; i++)
++    {
++      if (i > 0)
++	putchar (' ');
++      fputs (argv[i], stdout);
++    }
++  putchar ('\n');
++
++  return 0;
++}
++
++/* Emulate the "/bin/cp" command.  Options are ignored.  Only copies
++   one source file to one destination file.  Directory destinations
++   are not supported.  */
++static int
++copy_func (char **argv)
++{
++  char *sname = argv[0];
++  char *dname = argv[1];
++  int sfd, dfd;
++  struct stat st;
++
++  sfd = open (sname, O_RDONLY);
++  if (sfd < 0)
++    {
++      fprintf (stderr, "cp: unable to open %s for reading: %s\n",
++	       sname, strerror (errno));
++      return 1;
++    }
++
++  if (fstat (sfd, &st) < 0)
++    {
++      fprintf (stderr, "cp: unable to fstat %s: %s\n",
++	       sname, strerror (errno));
++      return 1;
++    }
++
++  dfd = open (dname, O_WRONLY | O_TRUNC | O_CREAT, 0600);
++  if (dfd < 0)
++    {
++      fprintf (stderr, "cp: unable to open %s for writing: %s\n",
++	       dname, strerror (errno));
++      return 1;
++    }
++
++  if (support_copy_file_range (sfd, 0, dfd, 0, st.st_size, 0) != st.st_size)
++    {
++      fprintf (stderr, "cp: cannot copy file %s to %s: %s\n",
++	       sname, dname, strerror (errno));
++      return 1;
++    }
++
++  close (sfd);
++  close (dfd);
++
++  chmod (dname, st.st_mode & 0777);
++
++  return 0;
++
++}
++
++/* This is a list of all the built-in commands we understand.  */
++static struct {
++  const char *name;
++  int (*func) (char **argv);
++} builtin_funcs[] = {
++  { "true", true_func },
++  { "echo", echo_func },
++  { "cp", copy_func },
++  { NULL, NULL }
++};
++
++/* Run one tokenized command.  argv[0] is the command.  argv is
++   NULL-terminated.  */
++static void
++run_command_array (char **argv)
++{
++  int i, j;
++  pid_t pid;
++  int status;
++  int (*builtin_func) (char **args);
++
++  if (argv[0] == NULL)
++    return;
++
++  builtin_func = NULL;
++
++  int new_stdin = 0;
++  int new_stdout = 1;
++  int new_stderr = 2;
++
++  dprintf (stderr, "run_command_array starting\n");
++  for (i = 0; argv[i]; i++)
++    dprintf (stderr, "   argv [%d] `%s'\n", i, argv[i]);
++
++  for (j = i = 0; argv[i]; i++)
++    {
++      if (strcmp (argv[i], "<") == 0 && argv[i + 1])
++	{
++	  new_stdin = open (argv[i + 1], O_WRONLY|O_CREAT|O_TRUNC, 0777);
++	  ++i;
++	  continue;
++	}
++      if (strcmp (argv[i], ">") == 0 && argv[i + 1])
++	{
++	  new_stdout = open (argv[i + 1], O_WRONLY|O_CREAT|O_TRUNC, 0777);
++	  ++i;
++	  continue;
++	}
++      if (strcmp (argv[i], ">>") == 0 && argv[i + 1])
++	{
++	  new_stdout = open (argv[i + 1], O_WRONLY|O_CREAT|O_APPEND, 0777);
++	  ++i;
++	  continue;
++	}
++      if (strcmp (argv[i], "2>") == 0 && argv[i + 1])
++	{
++	  new_stderr = open (argv[i + 1], O_WRONLY|O_CREAT|O_TRUNC, 0777);
++	  ++i;
++	  continue;
++	}
++      argv[j++] = argv[i];
++    }
++  argv[j] = NULL;
++
++
++  for (i = 0; builtin_funcs[i].name != NULL; i++)
++    if (strcmp (argv[0], builtin_funcs[i].name) == 0)
++       builtin_func = builtin_funcs[i].func;
++
++  dprintf (stderr, "builtin %p argv0 `%s'\n", builtin_func, argv[0]);
++
++  pid = fork ();
++  if (pid < 0)
++    {
++      fprintf (stderr, "sh: fork failed\n");
++      exit (1);
++    }
++
++  if (pid == 0)
++    {
++      if (new_stdin != 0)
++	{
++	  dup2 (new_stdin, 0);
++	  close (new_stdin);
++	}
++      if (new_stdout != 1)
++	{
++	  dup2 (new_stdout, 1);
++	  close (new_stdout);
++	}
++      if (new_stderr != 2)
++	{
++	  dup2 (new_stderr, 2);
++	  close (new_stdout);
++	}
++
++      if (builtin_func != NULL)
++	exit (builtin_func (argv + 1));
++
++      execvp (argv[0], argv);
++
++      fprintf (stderr, "sh: execing %s failed: %s",
++	       argv[0], strerror (errno));
++      exit (1);
++    }
++
++  waitpid (pid, &status, 0);
++
++  dprintf (stderr, "exiting run_command_array\n");
++
++  if (WIFEXITED (status))
++    {
++      int rv = WEXITSTATUS (status);
++      if (rv)
++	exit (rv);
++    }
++  else
++    exit (1);
++}
++
++/* Run one command-as-a-string, by tokenizing it.  Limited to
++   MAX_ARG_COUNT arguments.  Simple substitution is done of $1 to $9
++   (as whole separate tokens) from iargs[].  Quoted strings work if
++   the quotes wrap whole tokens; i.e. "foo bar" but not foo" bar".  */
++static void
++run_command_string (const char *cmdline, const char **iargs)
++{
++  char *args[MAX_ARG_COUNT+1];
++  int ap = 0;
++  const char *start, *end;
++  int nargs;
++
++  for (nargs = 0; iargs[nargs] != NULL; ++nargs)
++    ;
++
++  dprintf (stderr, "run_command_string starting: '%s'\n", cmdline);
++
++  while (ap < MAX_ARG_COUNT)
++    {
++      /* If the argument is quoted, this is the quote character, else NUL.  */
++      int in_quote = 0;
++
++      /* Skip whitespace up to the next token.  */
++      while (*cmdline && isspace (*cmdline))
++	cmdline ++;
++      if (*cmdline == 0)
++	break;
++
++      start = cmdline;
++      /* Check for quoted argument.  */
++      in_quote = (*cmdline == '\'' || *cmdline == '"') ? *cmdline : 0;
++
++      /* Skip to end of token; either by whitespace or matching quote.  */
++      dprintf (stderr, "in_quote %d\n", in_quote);
++      while (*cmdline
++	     && (!isspace (*cmdline) || in_quote))
++	{
++	  if (*cmdline == in_quote
++	      && cmdline != start)
++	    in_quote = 0;
++	  dprintf (stderr, "[%c]%d ", *cmdline, in_quote);
++	  cmdline ++;
++	}
++      dprintf (stderr, "\n");
++
++      /* Allocate space for this token and store it in args[].  */
++      end = cmdline;
++      dprintf (stderr, "start<%s> end<%s>\n", start, end);
++      args[ap] = (char *) xmalloc (end - start + 1);
++      memcpy (args[ap], start, end - start);
++      args[ap][end - start] = 0;
++
++      /* Strip off quotes, if found.  */
++      dprintf (stderr, "args[%d] = <%s>\n", ap, args[ap]);
++      if (args[ap][0] == '\''
++	  && args[ap][strlen (args[ap])-1] == '\'')
++	{
++	  args[ap][strlen (args[ap])-1] = 0;
++	  args[ap] ++;
++	}
++
++      else if (args[ap][0] == '"'
++	  && args[ap][strlen (args[ap])-1] == '"')
++	{
++	  args[ap][strlen (args[ap])-1] = 0;
++	  args[ap] ++;
++	}
++
++      /* Replace positional parameters like $4.  */
++      else if (args[ap][0] == '$'
++	       && isdigit (args[ap][1])
++	       && args[ap][2] == 0)
++	{
++	  int a = args[ap][1] - '1';
++	  if (0 <= a && a < nargs)
++	    args[ap] = strdup (iargs[a]);
++	}
++
++      ap ++;
++
++      if (*cmdline == 0)
++	break;
++    }
++
++  /* Lastly, NULL terminate the array and run it.  */
++  args[ap] = NULL;
++  run_command_array (args);
++}
++
++/* Run a script by reading lines and passing them to the above
++   function.  */
++static void
++run_script (const char *filename, const char **args)
++{
++  char line[MAX_LINE_LENGTH + 1];
++  dprintf (stderr, "run_script starting: '%s'\n", filename);
++  FILE *f = fopen (filename, "r");
++  if (f == NULL)
++    {
++      fprintf (stderr, "sh: %s: %s\n", filename, strerror (errno));
++      exit (1);
++    }
++  while (fgets (line, sizeof (line), f) != NULL)
++    {
++      if (line[0] == '#')
++	{
++	  dprintf (stderr, "comment: %s\n", line);
++	  continue;
++	}
++      run_command_string (line, args);
++    }
++  fclose (f);
++}
++
++int
++main (int argc, const char **argv)
++{
++  int i;
++
++  if (strcmp (argv[1], "--debug") == 0)
++    {
++      debug_mode = 1;
++      --argc;
++      ++argv;
++    }
++
++  dprintf (stderr, "container-sh starting:\n");
++  for (i = 0; i < argc; i++)
++    dprintf (stderr, "  argv[%d] is `%s'\n", i, argv[i]);
++
++  if (strcmp (argv[1], "-c") == 0)
++    run_command_string (argv[2], argv+3);
++  else
++    run_script (argv[1], argv+2);
++
++  dprintf (stderr, "normal exit 0\n");
++  return 0;
++}
+diff --git a/support/support.h b/support/support.h
+index b61fe0735c9204de..9418cd11ef6e684d 100644
+--- a/support/support.h
++++ b/support/support.h
+@@ -25,6 +25,10 @@
+ 
+ #include <stddef.h>
+ #include <sys/cdefs.h>
++/* For mode_t.  */
++#include <sys/stat.h>
++/* For ssize_t and off64_t.  */
++#include <sys/types.h>
+ 
+ __BEGIN_DECLS
+ 
+@@ -65,6 +69,12 @@ void support_write_file_string (const char *path, const char *contents);
+    the result).  */
+ char *support_quote_blob (const void *blob, size_t length);
+ 
++/* Returns non-zero if the file descriptor is a regular file on a file
++   system which supports holes (that is, seeking and writing does not
++   allocate storage for the range of zeros).  FD must refer to a
++   regular file open for writing, and initially empty.  */
++int support_descriptor_supports_holes (int fd);
++
+ /* Error-checking wrapper functions which terminate the process on
+    error.  */
+ 
+@@ -76,6 +86,23 @@ char *xasprintf (const char *format, ...)
+ char *xstrdup (const char *);
+ char *xstrndup (const char *, size_t);
+ 
++/* These point to the TOP of the source/build tree, not your (or
++   support's) subdirectory.  */
++extern const char support_srcdir_root[];
++extern const char support_objdir_root[];
++
++/* Corresponds to the path to the runtime linker used by the testsuite,
++   e.g. OBJDIR_PATH/elf/ld-linux-x86-64.so.2  */
++extern const char support_objdir_elf_ldso[];
++
++/* Corresponds to the --prefix= passed to configure.  */
++extern const char support_install_prefix[];
++/* Corresponds to the install's lib/ or lib64/ directory.  */
++extern const char support_libdir_prefix[];
++
++extern ssize_t support_copy_file_range (int, off64_t *, int, off64_t *,
++					size_t, unsigned int);
++
+ __END_DECLS
+ 
+ #endif /* SUPPORT_H */
+diff --git a/support/support_copy_file_range.c b/support/support_copy_file_range.c
+new file mode 100644
+index 0000000000000000..9a1e39773e0481c9
+--- /dev/null
++++ b/support/support_copy_file_range.c
+@@ -0,0 +1,143 @@
++/* Simplified copy_file_range with cross-device copy.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <errno.h>
++#include <fcntl.h>
++#include <inttypes.h>
++#include <limits.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <support/support.h>
++
++ssize_t
++support_copy_file_range (int infd, __off64_t *pinoff,
++			 int outfd, __off64_t *poutoff,
++			 size_t length, unsigned int flags)
++{
++  if (flags != 0)
++    {
++      errno = EINVAL;
++      return -1;
++    }
++
++  struct stat64 instat;
++  struct stat64 outstat;
++  if (fstat64 (infd, &instat) != 0 || fstat64 (outfd, &outstat) != 0)
++    return -1;
++  if (S_ISDIR (instat.st_mode) || S_ISDIR (outstat.st_mode))
++    {
++      errno = EISDIR;
++      return -1;
++    }
++  if (!S_ISREG (instat.st_mode) || !S_ISREG (outstat.st_mode))
++    {
++      /* We need a regular input file so that the we can seek
++	 backwards in case of a write failure.  */
++      errno = EINVAL;
++      return -1;
++    }
++
++  /* The output descriptor must not have O_APPEND set.  */
++  if (fcntl (outfd, F_GETFL) & O_APPEND)
++    {
++      errno = EBADF;
++      return -1;
++    }
++
++  /* Avoid an overflow in the result.  */
++  if (length > SSIZE_MAX)
++    length = SSIZE_MAX;
++
++  /* Main copying loop.  The buffer size is arbitrary and is a
++     trade-off between stack size consumption, cache usage, and
++     amortization of system call overhead.  */
++  size_t copied = 0;
++  char buf[8192];
++  while (length > 0)
++    {
++      size_t to_read = length;
++      if (to_read > sizeof (buf))
++	to_read = sizeof (buf);
++
++      /* Fill the buffer.  */
++      ssize_t read_count;
++      if (pinoff == NULL)
++	read_count = read (infd, buf, to_read);
++      else
++	read_count = pread64 (infd, buf, to_read, *pinoff);
++      if (read_count == 0)
++	/* End of file reached prematurely.  */
++	return copied;
++      if (read_count < 0)
++	{
++	  if (copied > 0)
++	    /* Report the number of bytes copied so far.  */
++	    return copied;
++	  return -1;
++	}
++      if (pinoff != NULL)
++	*pinoff += read_count;
++
++      /* Write the buffer part which was read to the destination.  */
++      char *end = buf + read_count;
++      for (char *p = buf; p < end; )
++	{
++	  ssize_t write_count;
++	  if (poutoff == NULL)
++	    write_count = write (outfd, p, end - p);
++	  else
++	    write_count = pwrite64 (outfd, p, end - p, *poutoff);
++	  if (write_count < 0)
++	    {
++	      /* Adjust the input read position to match what we have
++		 written, so that the caller can pick up after the
++		 error.  */
++	      size_t written = p - buf;
++	      /* NB: This needs to be signed so that we can form the
++		 negative value below.  */
++	      ssize_t overread = read_count - written;
++	      if (pinoff == NULL)
++		{
++		  if (overread > 0)
++		    {
++		      /* We are on an error recovery path, so we
++			 cannot deal with failure here.  */
++		      int save_errno = errno;
++		      (void) lseek64 (infd, -overread, SEEK_CUR);
++		      errno = save_errno;
++		    }
++		}
++	      else /* pinoff != NULL */
++		*pinoff -= overread;
++
++	      if (copied + written > 0)
++		/* Report the number of bytes copied so far.  */
++		return copied + written;
++	      return -1;
++	    }
++	  p += write_count;
++	  if (poutoff != NULL)
++	    *poutoff += write_count;
++	} /* Write loop.  */
++
++      copied += read_count;
++      length -= read_count;
++    }
++  return copied;
++}
+diff --git a/support/support_descriptor_supports_holes.c b/support/support_descriptor_supports_holes.c
+new file mode 100644
+index 0000000000000000..c7099ca67caf803c
+--- /dev/null
++++ b/support/support_descriptor_supports_holes.c
+@@ -0,0 +1,87 @@
++/* Test for file system hole support.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <stdbool.h>
++#include <support.h>
++#include <support/check.h>
++#include <sys/stat.h>
++#include <xunistd.h>
++
++int
++support_descriptor_supports_holes (int fd)
++{
++  enum
++    {
++      /* Write offset for the enlarged file.  This value is arbitrary
++         and hopefully large enough to trigger the creation of holes.
++         We cannot use the file system block size as a reference here
++         because it is incorrect for network file systems.  */
++      write_offset = 16 * 1024 * 1024,
++
++      /* Our write may add this number of additional blocks (see
++         block_limit below).  */
++      block_headroom = 8,
++    };
++
++  struct stat64 st;
++  xfstat (fd, &st);
++  if (!S_ISREG (st.st_mode))
++    FAIL_EXIT1 ("descriptor %d does not refer to a regular file", fd);
++  if (st.st_size != 0)
++    FAIL_EXIT1 ("descriptor %d does not refer to an empty file", fd);
++  if (st.st_blocks > block_headroom)
++    FAIL_EXIT1 ("descriptor %d refers to a pre-allocated file (%lld blocks)",
++                fd, (long long int) st.st_blocks);
++
++  /* Write a single byte at the start of the file to compute the block
++     usage for a single byte.  */
++  xlseek (fd, 0, SEEK_SET);
++  char b = '@';
++  xwrite (fd, &b, 1);
++  /* Attempt to bypass delayed allocation.  */
++  TEST_COMPARE (fsync (fd), 0);
++  xfstat (fd, &st);
++
++  /* This limit is arbitrary.  The file system needs to store
++     somewhere that data exists at the write offset, and this may
++     moderately increase the number of blocks used by the file, in
++     proportion to the initial block count, but not in proportion to
++     the write offset.  */
++  unsigned long long int block_limit = 2 * st.st_blocks + block_headroom;
++
++  /* Write a single byte at 16 megabytes.  */
++  xlseek (fd, write_offset, SEEK_SET);
++  xwrite (fd, &b, 1);
++  /* Attempt to bypass delayed allocation.  */
++  TEST_COMPARE (fsync (fd), 0);
++  xfstat (fd, &st);
++  bool supports_holes = st.st_blocks <= block_limit;
++
++  /* Also check that extending the file does not fill up holes.  */
++  xftruncate (fd, 2 * write_offset);
++  /* Attempt to bypass delayed allocation.  */
++  TEST_COMPARE (fsync (fd), 0);
++  xfstat (fd, &st);
++  supports_holes = supports_holes && st.st_blocks <= block_limit;
++
++  /* Return to a zero-length file.  */
++  xftruncate (fd, 0);
++  xlseek (fd, 0, SEEK_SET);
++
++  return supports_holes;
++}
+diff --git a/support/support_paths.c b/support/support_paths.c
+new file mode 100644
+index 0000000000000000..6d0beb102c9b4bed
+--- /dev/null
++++ b/support/support_paths.c
+@@ -0,0 +1,59 @@
++/* Various paths that might be needed.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/support.h>
++#include <support/check.h>
++
++/* The idea here is to make various makefile-level paths available to
++   support programs, as canonicalized absolute paths.  */
++
++/* These point to the TOP of the source/build tree, not your (or
++   support's) subdirectory.  */
++#ifdef SRCDIR_PATH
++const char support_srcdir_root[] = SRCDIR_PATH;
++#else
++# error please -DSRCDIR_PATH=something in the Makefile
++#endif
++
++#ifdef OBJDIR_PATH
++const char support_objdir_root[] = OBJDIR_PATH;
++#else
++# error please -DOBJDIR_PATH=something in the Makefile
++#endif
++
++#ifdef OBJDIR_ELF_LDSO_PATH
++/* Corresponds to the path to the runtime linker used by the testsuite,
++   e.g. OBJDIR_PATH/elf/ld-linux-x86-64.so.2  */
++const char support_objdir_elf_ldso[] = OBJDIR_ELF_LDSO_PATH;
++#else
++# error please -DOBJDIR_ELF_LDSO_PATH=something in the Makefile
++#endif
++
++#ifdef INSTDIR_PATH
++/* Corresponds to the --prefix= passed to configure.  */
++const char support_install_prefix[] = INSTDIR_PATH;
++#else
++# error please -DINSTDIR_PATH=something in the Makefile
++#endif
++
++#ifdef LIBDIR_PATH
++/* Corresponds to the install's lib/ or lib64/ directory.  */
++const char support_libdir_prefix[] = LIBDIR_PATH;
++#else
++# error please -DLIBDIR_PATH=something in the Makefile
++#endif
+diff --git a/support/support_test_compare_string.c b/support/support_test_compare_string.c
+new file mode 100644
+index 0000000000000000..a76ba8eda7782d9d
+--- /dev/null
++++ b/support/support_test_compare_string.c
+@@ -0,0 +1,91 @@
++/* Check two strings for equality.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/support.h>
++#include <support/xmemstream.h>
++
++static void
++report_length (const char *what, const char *str, size_t length)
++{
++  if (str == NULL)
++    printf ("  %s string: NULL\n", what);
++  else
++    printf ("  %s string: %zu bytes\n", what, length);
++}
++
++static void
++report_string (const char *what, const unsigned char *blob,
++               size_t length, const char *expr)
++{
++  if (length > 0)
++    {
++      printf ("  %s (evaluated from %s):\n", what, expr);
++      char *quoted = support_quote_blob (blob, length);
++      printf ("      \"%s\"\n", quoted);
++      free (quoted);
++
++      fputs ("     ", stdout);
++      for (size_t i = 0; i < length; ++i)
++        printf (" %02X", blob[i]);
++      putc ('\n', stdout);
++    }
++}
++
++static size_t
++string_length_or_zero (const char *str)
++{
++  if (str == NULL)
++    return 0;
++  else
++    return strlen (str);
++}
++
++void
++support_test_compare_string (const char *left, const char *right,
++                             const char *file, int line,
++                             const char *left_expr, const char *right_expr)
++{
++  /* Two null pointers are accepted.  */
++  if (left == NULL && right == NULL)
++    return;
++
++  size_t left_length = string_length_or_zero (left);
++  size_t right_length = string_length_or_zero (right);
++
++  if (left_length != right_length || left == NULL || right == NULL
++      || memcmp (left, right, left_length) != 0)
++    {
++      support_record_failure ();
++      printf ("%s:%d: error: blob comparison failed\n", file, line);
++      if (left_length == right_length && right != NULL && left != NULL)
++        printf ("  string length: %zu bytes\n", left_length);
++      else
++        {
++          report_length ("left", left, left_length);
++          report_length ("right", right, right_length);
++        }
++      report_string ("left", (const unsigned char *) left,
++                     left_length, left_expr);
++      report_string ("right", (const unsigned char *) right,
++                     right_length, right_expr);
++    }
++}
+diff --git a/support/test-container.c b/support/test-container.c
+new file mode 100644
+index 0000000000000000..b58f0f7b3d1d4859
+--- /dev/null
++++ b/support/test-container.c
+@@ -0,0 +1,988 @@
++/* Run a test case in an isolated namespace.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#define _FILE_OFFSET_BITS 64
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sched.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <dirent.h>
++#include <string.h>
++#include <sys/stat.h>
++#include <sys/fcntl.h>
++#include <sys/file.h>
++#include <sys/wait.h>
++#include <stdarg.h>
++#include <sys/sysmacros.h>
++#include <ctype.h>
++#include <utime.h>
++#include <errno.h>
++#include <error.h>
++#include <libc-pointer-arith.h>
++
++#ifdef __linux__
++#include <sys/mount.h>
++#endif
++
++#include <support/support.h>
++#include <support/xunistd.h>
++#include "check.h"
++#include "test-driver.h"
++
++#ifndef __linux__
++#define mount(s,t,fs,f,d) no_mount()
++int no_mount (void)
++{
++  FAIL_UNSUPPORTED("mount not supported; port needed");
++}
++#endif
++
++int verbose = 0;
++
++/* Running a test in a container is tricky.  There are two main
++   categories of things to do:
++
++   1. "Once" actions, like setting up the container and doing an
++      install into it.
++
++   2. "Per-test" actions, like copying in support files and
++      configuring the container.
++
++
++   "Once" actions:
++
++   * mkdir $buildroot/testroot.pristine/
++   * install into it
++   * rsync to $buildroot/testroot.root/
++
++   "Per-test" actions:
++   * maybe rsync to $buildroot/testroot.root/
++   * copy support files and test binary
++   * chroot/unshare
++   * set up any mounts (like /proc)
++
++   Magic files:
++
++   For test $srcdir/foo/mytest.c we look for $srcdir/foo/mytest.root
++   and, if found...
++
++   * mytest.root/ is rsync'd into container
++   * mytest.root/preclean.req causes fresh rsync (with delete) before
++     test if present
++   * mytest.root/mytset.script has a list of "commands" to run:
++       syntax:
++         # comment
++         mv FILE FILE
++	 cp FILE FILE
++	 rm FILE
++	 FILE must start with $B/, $S/, $I/, $L/, or /
++	  (expands to build dir, source dir, install dir, library dir
++	   (in container), or container's root)
++   * mytest.root/postclean.req causes fresh rsync (with delete) after
++     test if present
++
++   Note that $srcdir/foo/mytest.script may be used instead of a
++   $srcdir/foo/mytest.root/mytest.script in the sysroot template, if
++   there is no other reason for a sysroot.
++
++   Design goals:
++
++   * independent of other packages which may not be installed (like
++     rsync or Docker, or even "cp")
++
++   * Simple, easy to review code (i.e. prefer simple naive code over
++     complex efficient code)
++
++   * The current implementation ist parallel-make-safe, but only in
++     that it uses a lock to prevent parallel access to the testroot.  */
++
++
++/* Utility Functions */
++
++/* Like xunlink, but it's OK if the file already doesn't exist.  */
++void
++maybe_xunlink (const char *path)
++{
++  int rv = unlink (path);
++  if (rv < 0 && errno != ENOENT)
++    FAIL_EXIT1 ("unlink (\"%s\"): %m", path);
++}
++
++/* Like xmkdir, but it's OK if the directory already exists.  */
++void
++maybe_xmkdir (const char *path, mode_t mode)
++{
++  struct stat st;
++
++  if (stat (path, &st) == 0
++      && S_ISDIR (st.st_mode))
++    return;
++  xmkdir (path, mode);
++}
++
++/* Temporarily concatenate multiple strings into one.  Allows up to 10
++   temporary results; use strdup () if you need them to be
++   permanent.  */
++static char *
++concat (const char *str, ...)
++{
++  /* Assume initialized to NULL/zero.  */
++  static char *bufs[10];
++  static size_t buflens[10];
++  static int bufn = 0;
++  int n;
++  size_t len;
++  va_list ap, ap2;
++  char *cp;
++  char *next;
++
++  va_start (ap, str);
++  va_copy (ap2, ap);
++
++  n = bufn;
++  bufn = (bufn + 1) % 10;
++  len = strlen (str);
++
++  while ((next = va_arg (ap, char *)) != NULL)
++    len = len + strlen (next);
++
++  va_end (ap);
++
++  if (bufs[n] == NULL)
++    {
++      bufs[n] = xmalloc (len + 1); /* NUL */
++      buflens[n] = len + 1;
++    }
++  else if (buflens[n] < len + 1)
++    {
++      bufs[n] = xrealloc (bufs[n], len + 1); /* NUL */
++      buflens[n] = len + 1;
++    }
++
++  strcpy (bufs[n], str);
++  cp = strchr (bufs[n], '\0');
++  while ((next = va_arg (ap2, char *)) != NULL)
++    {
++      strcpy (cp, next);
++      cp = strchr (cp, '\0');
++    }
++  *cp = 0;
++  va_end (ap2);
++
++  return bufs[n];
++}
++
++/* Try to mount SRC onto DEST.  */
++static void
++trymount (const char *src, const char *dest)
++{
++  if (mount (src, dest, "", MS_BIND, NULL) < 0)
++    FAIL_EXIT1 ("can't mount %s onto %s\n", src, dest);
++}
++
++/* Special case of above for devices like /dev/zero where we have to
++   mount a device over a device, not a directory over a directory.  */
++static void
++devmount (const char *new_root_path, const char *which)
++{
++  int fd;
++  fd = open (concat (new_root_path, "/dev/", which, NULL),
++	     O_CREAT | O_TRUNC | O_RDWR, 0777);
++  xclose (fd);
++
++  trymount (concat ("/dev/", which, NULL),
++	    concat (new_root_path, "/dev/", which, NULL));
++}
++
++/* Returns true if the string "looks like" an environement variable
++   being set.  */
++static int
++is_env_setting (const char *a)
++{
++  int count_name = 0;
++
++  while (*a)
++    {
++      if (isalnum (*a) || *a == '_')
++	++count_name;
++      else if (*a == '=' && count_name > 0)
++	return 1;
++      else
++	return 0;
++      ++a;
++    }
++  return 0;
++}
++
++/* Break the_line into words and store in the_words.  Max nwords,
++   returns actual count.  */
++static int
++tokenize (char *the_line, char **the_words, int nwords)
++{
++  int rv = 0;
++
++  while (nwords > 0)
++    {
++      /* Skip leading whitespace, if any.  */
++      while (*the_line && isspace (*the_line))
++	++the_line;
++
++      /* End of line?  */
++      if (*the_line == 0)
++	return rv;
++
++      /* THE_LINE points to a non-whitespace character, so we have a
++	 word.  */
++      *the_words = the_line;
++      ++the_words;
++      nwords--;
++      ++rv;
++
++      /* Skip leading whitespace, if any.  */
++      while (*the_line && ! isspace (*the_line))
++	++the_line;
++
++      /* We now point at the trailing NUL *or* some whitespace.  */
++      if (*the_line == 0)
++	return rv;
++
++      /* It was whitespace, skip and keep tokenizing.  */
++      *the_line++ = 0;
++    }
++
++  /* We get here if we filled the words buffer.  */
++  return rv;
++}
++
++
++/* Mini-RSYNC implementation.  Optimize later.      */
++
++/* A few routines for an "rsync buffer" which stores the paths we're
++   working on.  We continuously grow and shrink the paths in each
++   buffer so there's lot of re-use.  */
++
++/* We rely on "initialized to zero" to set these up.  */
++typedef struct
++{
++  char *buf;
++  size_t len;
++  size_t size;
++} path_buf;
++
++static path_buf spath, dpath;
++
++static void
++r_setup (char *path, path_buf * pb)
++{
++  size_t len = strlen (path);
++  if (pb->buf == NULL || pb->size < len + 1)
++    {
++      /* Round up.  This is an arbitrary number, just to keep from
++	 reallocing too often.  */
++      size_t sz = ALIGN_UP (len + 1, 512);
++      if (pb->buf == NULL)
++	pb->buf = (char *) xmalloc (sz);
++      else
++	pb->buf = (char *) xrealloc (pb->buf, sz);
++      if (pb->buf == NULL)
++	FAIL_EXIT1 ("Out of memory while rsyncing\n");
++
++      pb->size = sz;
++    }
++  strcpy (pb->buf, path);
++  pb->len = len;
++}
++
++static void
++r_append (const char *path, path_buf * pb)
++{
++  size_t len = strlen (path) + pb->len;
++  if (pb->size < len + 1)
++    {
++      /* Round up */
++      size_t sz = ALIGN_UP (len + 1, 512);
++      pb->buf = (char *) xrealloc (pb->buf, sz);
++      if (pb->buf == NULL)
++	FAIL_EXIT1 ("Out of memory while rsyncing\n");
++
++      pb->size = sz;
++    }
++  strcpy (pb->buf + pb->len, path);
++  pb->len = len;
++}
++
++static int
++file_exists (char *path)
++{
++  struct stat st;
++  if (lstat (path, &st) == 0)
++    return 1;
++  return 0;
++}
++
++static void
++recursive_remove (char *path)
++{
++  pid_t child;
++  int status;
++
++  child = fork ();
++
++  switch (child) {
++  case -1:
++    FAIL_EXIT1 ("Unable to fork");
++  case 0:
++    /* Child.  */
++    execlp ("rm", "rm", "-rf", path, NULL);
++  default:
++    /* Parent.  */
++    waitpid (child, &status, 0);
++    /* "rm" would have already printed a suitable error message.  */
++    if (! WIFEXITED (status)
++	|| WEXITSTATUS (status) != 0)
++      exit (1);
++
++    break;
++  }
++}
++
++/* Used for both rsync and the mytest.script "cp" command.  */
++static void
++copy_one_file (const char *sname, const char *dname)
++{
++  int sfd, dfd;
++  struct stat st;
++  struct utimbuf times;
++
++  sfd = open (sname, O_RDONLY);
++  if (sfd < 0)
++    FAIL_EXIT1 ("unable to open %s for reading\n", sname);
++
++  if (fstat (sfd, &st) < 0)
++    FAIL_EXIT1 ("unable to fstat %s\n", sname);
++
++  dfd = open (dname, O_WRONLY | O_TRUNC | O_CREAT, 0600);
++  if (dfd < 0)
++    FAIL_EXIT1 ("unable to open %s for writing\n", dname);
++
++  xcopy_file_range (sfd, 0, dfd, 0, st.st_size, 0);
++
++  xclose (sfd);
++  xclose (dfd);
++
++  if (chmod (dname, st.st_mode & 0777) < 0)
++    FAIL_EXIT1 ("chmod %s: %s\n", dname, strerror (errno));
++
++  times.actime = st.st_atime;
++  times.modtime = st.st_mtime;
++  if (utime (dname, &times) < 0)
++    FAIL_EXIT1 ("utime %s: %s\n", dname, strerror (errno));
++}
++
++/* We don't check *everything* about the two files to see if a copy is
++   needed, just the minimum to make sure we get the latest copy.  */
++static int
++need_sync (char *ap, char *bp, struct stat *a, struct stat *b)
++{
++  if ((a->st_mode & S_IFMT) != (b->st_mode & S_IFMT))
++    return 1;
++
++  if (S_ISLNK (a->st_mode))
++    {
++      int rv;
++      char *al, *bl;
++
++      if (a->st_size != b->st_size)
++	return 1;
++
++      al = xreadlink (ap);
++      bl = xreadlink (bp);
++      rv = strcmp (al, bl);
++      free (al);
++      free (bl);
++      if (rv == 0)
++	return 0; /* links are same */
++      return 1; /* links differ */
++    }
++
++  if (verbose)
++    {
++      if (a->st_size != b->st_size)
++	printf ("SIZE\n");
++      if ((a->st_mode & 0777) != (b->st_mode & 0777))
++	printf ("MODE\n");
++      if (a->st_mtime != b->st_mtime)
++	printf ("TIME\n");
++    }
++
++  if (a->st_size == b->st_size
++      && ((a->st_mode & 0777) == (b->st_mode & 0777))
++      && a->st_mtime == b->st_mtime)
++    return 0;
++
++  return 1;
++}
++
++static void
++rsync_1 (path_buf * src, path_buf * dest, int and_delete)
++{
++  DIR *dir;
++  struct dirent *de;
++  struct stat s, d;
++
++  r_append ("/", src);
++  r_append ("/", dest);
++
++  if (verbose)
++    printf ("sync %s to %s %s\n", src->buf, dest->buf,
++	    and_delete ? "and delete" : "");
++
++  size_t staillen = src->len;
++
++  size_t dtaillen = dest->len;
++
++  dir = opendir (src->buf);
++
++  while ((de = readdir (dir)) != NULL)
++    {
++      if (strcmp (de->d_name, ".") == 0
++	  || strcmp (de->d_name, "..") == 0)
++	continue;
++
++      src->len = staillen;
++      r_append (de->d_name, src);
++      dest->len = dtaillen;
++      r_append (de->d_name, dest);
++
++      s.st_mode = ~0;
++      d.st_mode = ~0;
++
++      if (lstat (src->buf, &s) != 0)
++	FAIL_EXIT1 ("%s obtained by readdir, but stat failed.\n", src->buf);
++
++      /* It's OK if this one fails, since we know the file might be
++	 missing.  */
++      lstat (dest->buf, &d);
++
++      if (! need_sync (src->buf, dest->buf, &s, &d))
++	{
++	  if (S_ISDIR (s.st_mode))
++	    rsync_1 (src, dest, and_delete);
++	  continue;
++	}
++
++      if (d.st_mode != ~0)
++	switch (d.st_mode & S_IFMT)
++	  {
++	  case S_IFDIR:
++	    if (!S_ISDIR (s.st_mode))
++	      {
++		if (verbose)
++		  printf ("-D %s\n", dest->buf);
++		recursive_remove (dest->buf);
++	      }
++	    break;
++
++	  default:
++	    if (verbose)
++	      printf ("-F %s\n", dest->buf);
++	    maybe_xunlink (dest->buf);
++	    break;
++	  }
++
++      switch (s.st_mode & S_IFMT)
++	{
++	case S_IFREG:
++	  if (verbose)
++	    printf ("+F %s\n", dest->buf);
++	  copy_one_file (src->buf, dest->buf);
++	  break;
++
++	case S_IFDIR:
++	  if (verbose)
++	    printf ("+D %s\n", dest->buf);
++	  maybe_xmkdir (dest->buf, (s.st_mode & 0777) | 0700);
++	  rsync_1 (src, dest, and_delete);
++	  break;
++
++	case S_IFLNK:
++	  {
++	    char *lp;
++	    if (verbose)
++	      printf ("+L %s\n", dest->buf);
++	    lp = xreadlink (src->buf);
++	    xsymlink (lp, dest->buf);
++	    free (lp);
++	    break;
++	  }
++
++	default:
++	  break;
++	}
++    }
++
++  closedir (dir);
++  src->len = staillen;
++  src->buf[staillen] = 0;
++  dest->len = dtaillen;
++  dest->buf[dtaillen] = 0;
++
++  if (!and_delete)
++    return;
++
++  /* The rest of this function removes any files/directories in DEST
++     that do not exist in SRC.  This is triggered as part of a
++     preclean or postsclean step.  */
++
++  dir = opendir (dest->buf);
++
++  while ((de = readdir (dir)) != NULL)
++    {
++      if (strcmp (de->d_name, ".") == 0
++	  || strcmp (de->d_name, "..") == 0)
++	continue;
++
++      src->len = staillen;
++      r_append (de->d_name, src);
++      dest->len = dtaillen;
++      r_append (de->d_name, dest);
++
++      s.st_mode = ~0;
++      d.st_mode = ~0;
++
++      lstat (src->buf, &s);
++
++      if (lstat (dest->buf, &d) != 0)
++	FAIL_EXIT1 ("%s obtained by readdir, but stat failed.\n", dest->buf);
++
++      if (s.st_mode == ~0)
++	{
++	  /* dest exists and src doesn't, clean it.  */
++	  switch (d.st_mode & S_IFMT)
++	    {
++	    case S_IFDIR:
++	      if (!S_ISDIR (s.st_mode))
++		{
++		  if (verbose)
++		    printf ("-D %s\n", dest->buf);
++		  recursive_remove (dest->buf);
++		}
++	      break;
++
++	    default:
++	      if (verbose)
++		printf ("-F %s\n", dest->buf);
++	      maybe_xunlink (dest->buf);
++	      break;
++	    }
++	}
++    }
++
++  closedir (dir);
++}
++
++static void
++rsync (char *src, char *dest, int and_delete)
++{
++  r_setup (src, &spath);
++  r_setup (dest, &dpath);
++
++  rsync_1 (&spath, &dpath, and_delete);
++}
++
++
++int
++main (int argc, char **argv)
++{
++  pid_t child;
++  char *pristine_root_path;
++  char *new_root_path;
++  char *new_cwd_path;
++  char *new_objdir_path;
++  char *new_srcdir_path;
++  char **new_child_proc;
++  char *command_root;
++  char *command_base;
++  char *command_basename;
++  char *so_base;
++  int do_postclean = 0;
++
++  uid_t original_uid;
++  gid_t original_gid;
++  int UMAP;
++  int GMAP;
++  /* Used for "%lld %lld 1" so need not be large.  */
++  char tmp[100];
++  struct stat st;
++  int lock_fd;
++
++  setbuf (stdout, NULL);
++
++  /* The command line we're expecting looks like this:
++     env <set some vars> ld.so <library path> test-binary
++
++     We need to peel off any "env" or "ld.so" portion of the command
++     line, and keep track of which env vars we should preserve and
++     which we drop.  */
++
++  if (argc < 2)
++    {
++      fprintf (stderr, "Usage: containerize <program to run> <args...>\n");
++      exit (1);
++    }
++
++  if (strcmp (argv[1], "-v") == 0)
++    {
++      verbose = 1;
++      ++argv;
++      --argc;
++    }
++
++  if (strcmp (argv[1], "env") == 0)
++    {
++      ++argv;
++      --argc;
++      while (is_env_setting (argv[1]))
++	{
++	  /* If there are variables we do NOT want to propogate, this
++	     is where the test for them goes.  */
++	    {
++	      /* Need to keep these.  Note that putenv stores a
++	         pointer to our argv.  */
++	      putenv (argv[1]);
++	    }
++	  ++argv;
++	  --argc;
++	}
++    }
++
++  if (strcmp (argv[1], support_objdir_elf_ldso) == 0)
++    {
++      ++argv;
++      --argc;
++      while (argv[1][0] == '-')
++	{
++	  if (strcmp (argv[1], "--library-path") == 0)
++	    {
++	      ++argv;
++	      --argc;
++	    }
++	  ++argv;
++	  --argc;
++	}
++    }
++
++  pristine_root_path = strdup (concat (support_objdir_root,
++				       "/testroot.pristine", NULL));
++  new_root_path = strdup (concat (support_objdir_root,
++				  "/testroot.root", NULL));
++  new_cwd_path = get_current_dir_name ();
++  new_child_proc = argv + 1;
++
++  lock_fd = open (concat (pristine_root_path, "/lock.fd", NULL),
++		 O_CREAT | O_TRUNC | O_RDWR, 0666);
++  if (lock_fd < 0)
++    FAIL_EXIT1 ("Cannot create testroot lock.\n");
++
++  while (flock (lock_fd, LOCK_EX) != 0)
++    {
++      if (errno != EINTR)
++	FAIL_EXIT1 ("Cannot lock testroot.\n");
++    }
++
++  xmkdirp (new_root_path, 0755);
++
++  /* We look for extra setup info in a subdir in the same spot as the
++     test, with the same name but a ".root" extension.  This is that
++     directory.  We try to look in the source tree if the path we're
++     given refers to the build tree, but we rely on the path to be
++     absolute.  This is what the glibc makefiles do.  */
++  command_root = concat (argv[1], ".root", NULL);
++  if (strncmp (command_root, support_objdir_root,
++	       strlen (support_objdir_root)) == 0
++      && command_root[strlen (support_objdir_root)] == '/')
++    command_root = concat (support_srcdir_root,
++			   argv[1] + strlen (support_objdir_root),
++			   ".root", NULL);
++  command_root = strdup (command_root);
++
++  /* This cuts off the ".root" we appended above.  */
++  command_base = strdup (command_root);
++  command_base[strlen (command_base) - 5] = 0;
++
++  /* This is the basename of the test we're running.  */
++  command_basename = strrchr (command_base, '/');
++  if (command_basename == NULL)
++    command_basename = command_base;
++  else
++    ++command_basename;
++
++  /* Shared object base directory.  */
++  so_base = strdup (argv[1]);
++  if (strrchr (so_base, '/') != NULL)
++    strrchr (so_base, '/')[1] = 0;
++
++  if (file_exists (concat (command_root, "/postclean.req", NULL)))
++    do_postclean = 1;
++
++  rsync (pristine_root_path, new_root_path,
++	 file_exists (concat (command_root, "/preclean.req", NULL)));
++
++  if (stat (command_root, &st) >= 0
++      && S_ISDIR (st.st_mode))
++    rsync (command_root, new_root_path, 0);
++
++  new_objdir_path = strdup (concat (new_root_path,
++				    support_objdir_root, NULL));
++  new_srcdir_path = strdup (concat (new_root_path,
++				    support_srcdir_root, NULL));
++
++  /* new_cwd_path starts with '/' so no "/" needed between the two.  */
++  xmkdirp (concat (new_root_path, new_cwd_path, NULL), 0755);
++  xmkdirp (new_srcdir_path, 0755);
++  xmkdirp (new_objdir_path, 0755);
++
++  original_uid = getuid ();
++  original_gid = getgid ();
++
++  /* Handle the cp/mv/rm "script" here.  */
++  {
++    char *the_line = NULL;
++    size_t line_len = 0;
++    char *fname = concat (command_root, "/",
++			  command_basename, ".script", NULL);
++    char *the_words[3];
++    FILE *f = fopen (fname, "r");
++
++    if (verbose && f)
++      fprintf (stderr, "running %s\n", fname);
++
++    if (f == NULL)
++      {
++	/* Try foo.script instead of foo.root/foo.script, as a shortcut.  */
++	fname = concat (command_base, ".script", NULL);
++	f = fopen (fname, "r");
++	if (verbose && f)
++	  fprintf (stderr, "running %s\n", fname);
++      }
++
++    /* Note that we do NOT look for a Makefile-generated foo.script in
++       the build directory.  If that is ever needed, this is the place
++       to add it.  */
++
++    /* This is where we "interpret" the mini-script which is <test>.script.  */
++    if (f != NULL)
++      {
++	while (getline (&the_line, &line_len, f) > 0)
++	  {
++	    int nt = tokenize (the_line, the_words, 3);
++	    int i;
++
++	    for (i = 1; i < nt; ++i)
++	      {
++		if (memcmp (the_words[i], "$B/", 3) == 0)
++		  the_words[i] = concat (support_objdir_root,
++					 the_words[i] + 2, NULL);
++		else if (memcmp (the_words[i], "$S/", 3) == 0)
++		  the_words[i] = concat (support_srcdir_root,
++					 the_words[i] + 2, NULL);
++		else if (memcmp (the_words[i], "$I/", 3) == 0)
++		  the_words[i] = concat (new_root_path,
++					 support_install_prefix,
++					 the_words[i] + 2, NULL);
++		else if (memcmp (the_words[i], "$L/", 3) == 0)
++		  the_words[i] = concat (new_root_path,
++					 support_libdir_prefix,
++					 the_words[i] + 2, NULL);
++		else if (the_words[i][0] == '/')
++		  the_words[i] = concat (new_root_path,
++					 the_words[i], NULL);
++	      }
++
++	    if (nt == 3 && the_words[2][strlen (the_words[2]) - 1] == '/')
++	      {
++		char *r = strrchr (the_words[1], '/');
++		if (r)
++		  the_words[2] = concat (the_words[2], r + 1, NULL);
++		else
++		  the_words[2] = concat (the_words[2], the_words[1], NULL);
++	      }
++
++	    if (nt == 2 && strcmp (the_words[0], "so") == 0)
++	      {
++		the_words[2] = concat (new_root_path, support_libdir_prefix,
++				       "/", the_words[1], NULL);
++		the_words[1] = concat (so_base, the_words[1], NULL);
++		copy_one_file (the_words[1], the_words[2]);
++	      }
++	    else if (nt == 3 && strcmp (the_words[0], "cp") == 0)
++	      {
++		copy_one_file (the_words[1], the_words[2]);
++	      }
++	    else if (nt == 3 && strcmp (the_words[0], "mv") == 0)
++	      {
++		if (rename (the_words[1], the_words[2]) < 0)
++		  FAIL_EXIT1 ("rename %s -> %s: %s", the_words[1],
++			      the_words[2], strerror (errno));
++	      }
++	    else if (nt == 3 && strcmp (the_words[0], "chmod") == 0)
++	      {
++		long int m;
++		m = strtol (the_words[1], NULL, 0);
++		if (chmod (the_words[2], m) < 0)
++		    FAIL_EXIT1 ("chmod %s: %s\n",
++				the_words[2], strerror (errno));
++
++	      }
++	    else if (nt == 2 && strcmp (the_words[0], "rm") == 0)
++	      {
++		maybe_xunlink (the_words[1]);
++	      }
++	    else if (nt > 0 && the_words[0][0] != '#')
++	      {
++		printf ("\033[31minvalid [%s]\033[0m\n", the_words[0]);
++	      }
++	  }
++	fclose (f);
++      }
++  }
++
++#ifdef CLONE_NEWNS
++  /* The unshare here gives us our own spaces and capabilities.  */
++  if (unshare (CLONE_NEWUSER | CLONE_NEWPID | CLONE_NEWNS) < 0)
++    {
++      /* Older kernels may not support all the options, or security
++	 policy may block this call.  */
++      if (errno == EINVAL || errno == EPERM)
++	FAIL_UNSUPPORTED ("unable to unshare user/fs: %s", strerror (errno));
++      else
++	FAIL_EXIT1 ("unable to unshare user/fs: %s", strerror (errno));
++    }
++#else
++  /* Some targets may not support unshare at all.  */
++  FAIL_UNSUPPORTED ("unshare support missing");
++#endif
++
++  /* Some systems, by default, all mounts leak out of the namespace.  */
++  if (mount ("none", "/", NULL, MS_REC | MS_PRIVATE, NULL) != 0)
++    FAIL_EXIT1 ("could not create a private mount namespace\n");
++
++  trymount (support_srcdir_root, new_srcdir_path);
++  trymount (support_objdir_root, new_objdir_path);
++
++  xmkdirp (concat (new_root_path, "/dev", NULL), 0755);
++  devmount (new_root_path, "null");
++  devmount (new_root_path, "zero");
++  devmount (new_root_path, "urandom");
++
++  /* We're done with the "old" root, switch to the new one.  */
++  if (chroot (new_root_path) < 0)
++    FAIL_EXIT1 ("Can't chroot to %s - ", new_root_path);
++
++  if (chdir (new_cwd_path) < 0)
++    FAIL_EXIT1 ("Can't cd to new %s - ", new_cwd_path);
++
++  /* To complete the containerization, we need to fork () at least
++     once.  We can't exec, nor can we somehow link the new child to
++     our parent.  So we run the child and propogate it's exit status
++     up.  */
++  child = fork ();
++  if (child < 0)
++    FAIL_EXIT1 ("Unable to fork");
++  else if (child > 0)
++    {
++      /* Parent.  */
++      int status;
++      waitpid (child, &status, 0);
++
++      /* There's a bit of magic here, since the buildroot is mounted
++	 in our space, the paths are still valid, and since the mounts
++	 aren't recursive, it sees *only* the built root, not anything
++	 we would normally se if we rsync'd to "/" like mounted /dev
++	 files.  */
++      if (do_postclean)
++	  rsync (pristine_root_path, new_root_path, 1);
++
++      if (WIFEXITED (status))
++	exit (WEXITSTATUS (status));
++
++      if (WIFSIGNALED (status))
++	{
++	  printf ("%%SIGNALLED%%\n");
++	  exit (77);
++	}
++
++      printf ("%%EXITERROR%%\n");
++      exit (78);
++    }
++
++  /* The rest is the child process, which is now PID 1 and "in" the
++     new root.  */
++
++  maybe_xmkdir ("/tmp", 0755);
++
++  /* Now that we're pid 1 (effectively "root") we can mount /proc  */
++  maybe_xmkdir ("/proc", 0777);
++  if (mount ("proc", "/proc", "proc", 0, NULL) < 0)
++    FAIL_EXIT1 ("Unable to mount /proc: ");
++
++  /* We map our original UID to the same UID in the container so we
++     can own our own files normally.  */
++  UMAP = open ("/proc/self/uid_map", O_WRONLY);
++  if (UMAP < 0)
++    FAIL_EXIT1 ("can't write to /proc/self/uid_map\n");
++
++  sprintf (tmp, "%lld %lld 1\n",
++	   (long long) original_uid, (long long) original_uid);
++  write (UMAP, tmp, strlen (tmp));
++  xclose (UMAP);
++
++  /* We must disable setgroups () before we can map our groups, else we
++     get EPERM.  */
++  GMAP = open ("/proc/self/setgroups", O_WRONLY);
++  if (GMAP >= 0)
++    {
++      /* We support kernels old enough to not have this.  */
++      write (GMAP, "deny\n", 5);
++      xclose (GMAP);
++    }
++
++  /* We map our original GID to the same GID in the container so we
++     can own our own files normally.  */
++  GMAP = open ("/proc/self/gid_map", O_WRONLY);
++  if (GMAP < 0)
++    FAIL_EXIT1 ("can't write to /proc/self/gid_map\n");
++
++  sprintf (tmp, "%lld %lld 1\n",
++	   (long long) original_gid, (long long) original_gid);
++  write (GMAP, tmp, strlen (tmp));
++  xclose (GMAP);
++
++  /* Now run the child.  */
++  execvp (new_child_proc[0], new_child_proc);
++
++  /* Or don't run the child?  */
++  FAIL_EXIT1 ("Unable to exec %s\n", new_child_proc[0]);
++
++  /* Because gcc won't know error () never returns...  */
++  exit (EXIT_UNSUPPORTED);
++}
+diff --git a/support/true-container.c b/support/true-container.c
+new file mode 100644
+index 0000000000000000..57dc57e252a96acc
+--- /dev/null
++++ b/support/true-container.c
+@@ -0,0 +1,26 @@
++/* Minimal /bin/true for in-container use.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* Implements the in-container /bin/true, which always returns true
++   (0).  */
++
++int
++main (void)
++{
++  return 0;
++}
+diff --git a/support/tst-support_blob_repeat.c b/support/tst-support_blob_repeat.c
+new file mode 100644
+index 0000000000000000..1978c14488106ff2
+--- /dev/null
++++ b/support/tst-support_blob_repeat.c
+@@ -0,0 +1,85 @@
++/* Tests for <support/blob_repeat.h>
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++#include <support/blob_repeat.h>
++#include <support/check.h>
++
++static int
++do_test (void)
++{
++  struct support_blob_repeat repeat
++    = support_blob_repeat_allocate ("5", 1, 5);
++  TEST_COMPARE_BLOB (repeat.start, repeat.size, "55555", 5);
++  support_blob_repeat_free (&repeat);
++
++  repeat = support_blob_repeat_allocate ("ABC", 3, 3);
++  TEST_COMPARE_BLOB (repeat.start, repeat.size, "ABCABCABC", 9);
++  support_blob_repeat_free (&repeat);
++
++  repeat = support_blob_repeat_allocate ("abc", 4, 3);
++  TEST_COMPARE_BLOB (repeat.start, repeat.size, "abc\0abc\0abc", 12);
++  support_blob_repeat_free (&repeat);
++
++  size_t gigabyte = 1U << 30;
++  repeat = support_blob_repeat_allocate ("X", 1, gigabyte + 1);
++  if (repeat.start == NULL)
++    puts ("warning: not enough memory for 1 GiB mapping");
++  else
++    {
++      TEST_COMPARE (repeat.size, gigabyte + 1);
++      {
++        unsigned char *p = repeat.start;
++        for (size_t i = 0; i < gigabyte + 1; ++i)
++          if (p[i] != 'X')
++            FAIL_EXIT1 ("invalid byte 0x%02x at %zu", p[i], i);
++
++        /* Check that there is no sharing across the mapping.  */
++        p[0] = 'Y';
++        p[1U << 24] = 'Z';
++        for (size_t i = 0; i < gigabyte + 1; ++i)
++          if (i == 0)
++            TEST_COMPARE (p[i], 'Y');
++          else if (i == 1U << 24)
++            TEST_COMPARE (p[i], 'Z');
++          else if (p[i] != 'X')
++            FAIL_EXIT1 ("invalid byte 0x%02x at %zu", p[i], i);
++      }
++    }
++  support_blob_repeat_free (&repeat);
++
++  repeat = support_blob_repeat_allocate ("012345678", 9, 10 * 1000 * 1000);
++  if (repeat.start == NULL)
++    puts ("warning: not enough memory for large mapping");
++  else
++    {
++      unsigned char *p = repeat.start;
++      for (int i = 0; i < 10 * 1000 * 1000; ++i)
++        for (int j = 0; j <= 8; ++j)
++          if (p[i * 9 + j] != '0' + j)
++            {
++              printf ("error: element %d index %d\n", i, j);
++              TEST_COMPARE (p[i * 9 + j], '0' + j);
++            }
++    }
++  support_blob_repeat_free (&repeat);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+diff --git a/support/tst-test_compare_string.c b/support/tst-test_compare_string.c
+new file mode 100644
+index 0000000000000000..2a4b258587a7c8ec
+--- /dev/null
++++ b/support/tst-test_compare_string.c
+@@ -0,0 +1,107 @@
++/* Basic test for the TEST_COMPARE_STRING macro.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <string.h>
++#include <support/check.h>
++#include <support/capture_subprocess.h>
++
++static void
++subprocess (void *closure)
++{
++  /* These tests should fail.  They were chosen to cover differences
++     in length (with the same contents), single-bit mismatches, and
++     mismatching null pointers.  */
++  TEST_COMPARE_STRING ("", NULL);             /* Line 29.  */
++  TEST_COMPARE_STRING ("X", "");              /* Line 30.  */
++  TEST_COMPARE_STRING (NULL, "X");            /* Line 31.  */
++  TEST_COMPARE_STRING ("abcd", "abcD");       /* Line 32.  */
++  TEST_COMPARE_STRING ("abcd", NULL);         /* Line 33.  */
++  TEST_COMPARE_STRING (NULL, "abcd");         /* Line 34.  */
++}
++
++/* Same contents, different addresses.  */
++char buffer_abc_1[] = "abc";
++char buffer_abc_2[] = "abc";
++
++static int
++do_test (void)
++{
++  /* This should succeed.  Even if the pointers and array contents are
++     different, zero-length inputs are not different.  */
++  TEST_COMPARE_STRING (NULL, NULL);
++  TEST_COMPARE_STRING ("", "");
++  TEST_COMPARE_STRING (buffer_abc_1, buffer_abc_2);
++  TEST_COMPARE_STRING (buffer_abc_1, "abc");
++
++  struct support_capture_subprocess proc = support_capture_subprocess
++    (&subprocess, NULL);
++
++  /* Discard the reported error.  */
++  support_record_failure_reset ();
++
++  puts ("info: *** subprocess output starts ***");
++  fputs (proc.out.buffer, stdout);
++  puts ("info: *** subprocess output ends ***");
++
++  TEST_VERIFY
++    (strcmp (proc.out.buffer,
++"tst-test_compare_string.c:29: error: blob comparison failed\n"
++"  left string: 0 bytes\n"
++"  right string: NULL\n"
++"tst-test_compare_string.c:30: error: blob comparison failed\n"
++"  left string: 1 bytes\n"
++"  right string: 0 bytes\n"
++"  left (evaluated from \"X\"):\n"
++"      \"X\"\n"
++"      58\n"
++"tst-test_compare_string.c:31: error: blob comparison failed\n"
++"  left string: NULL\n"
++"  right string: 1 bytes\n"
++"  right (evaluated from \"X\"):\n"
++"      \"X\"\n"
++"      58\n"
++"tst-test_compare_string.c:32: error: blob comparison failed\n"
++"  string length: 4 bytes\n"
++"  left (evaluated from \"abcd\"):\n"
++"      \"abcd\"\n"
++"      61 62 63 64\n"
++"  right (evaluated from \"abcD\"):\n"
++"      \"abcD\"\n"
++"      61 62 63 44\n"
++"tst-test_compare_string.c:33: error: blob comparison failed\n"
++"  left string: 4 bytes\n"
++"  right string: NULL\n"
++"  left (evaluated from \"abcd\"):\n"
++"      \"abcd\"\n"
++"      61 62 63 64\n"
++"tst-test_compare_string.c:34: error: blob comparison failed\n"
++"  left string: NULL\n"
++"  right string: 4 bytes\n"
++"  right (evaluated from \"abcd\"):\n"
++"      \"abcd\"\n"
++"      61 62 63 64\n"
++             ) == 0);
++
++  /* Check that there is no output on standard error.  */
++  support_capture_subprocess_check (&proc, "TEST_COMPARE_STRING",
++                                    0, sc_allow_stdout);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+diff --git a/support/xcopy_file_range.c b/support/xcopy_file_range.c
+new file mode 100644
+index 0000000000000000..b3501a4d5ec3fdfd
+--- /dev/null
++++ b/support/xcopy_file_range.c
+@@ -0,0 +1,32 @@
++/* copy_file_range with error checking.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/support.h>
++#include <support/xunistd.h>
++#include <support/check.h>
++
++ssize_t
++xcopy_file_range (int infd, off64_t *pinoff, int outfd, off64_t *poutoff,
++		  size_t length, unsigned int flags)
++{
++  ssize_t status = support_copy_file_range (infd, pinoff, outfd,
++					    poutoff, length, flags);
++  if (status == -1)
++    FAIL_EXIT1 ("cannot copy file: %m\n");
++  return status;
++}
+diff --git a/support/xmkdirp.c b/support/xmkdirp.c
+new file mode 100644
+index 0000000000000000..fada0452eafe269e
+--- /dev/null
++++ b/support/xmkdirp.c
+@@ -0,0 +1,66 @@
++/* Error-checking replacement for "mkdir -p".
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/support.h>
++#include <support/check.h>
++#include <support/xunistd.h>
++
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++
++/* Equivalent of "mkdir -p".  Any failures cause FAIL_EXIT1 so no
++   return code is needed.  */
++
++void
++xmkdirp (const char *path, mode_t mode)
++{
++  struct stat s;
++  const char *slash_p;
++  int rv;
++
++  if (path[0] == 0)
++    return;
++
++  if (stat (path, &s) == 0)
++    {
++      if (S_ISDIR (s.st_mode))
++	return;
++      errno = EEXIST;
++      FAIL_EXIT1 ("mkdir_p (\"%s\", 0%o): %m", path, mode);
++    }
++
++  slash_p = strrchr (path, '/');
++  if (slash_p != NULL)
++    {
++      while (slash_p > path && slash_p[-1] == '/')
++	--slash_p;
++      if (slash_p > path)
++	{
++	  char *parent = xstrndup (path, slash_p - path);
++	  xmkdirp (parent, mode);
++	  free (parent);
++	}
++    }
++
++  rv = mkdir (path, mode);
++  if (rv != 0)
++    FAIL_EXIT1 ("mkdir_p (\"%s\", 0%o): %m", path, mode);
++
++  return;
++}
+diff --git a/support/xsymlink.c b/support/xsymlink.c
+new file mode 100644
+index 0000000000000000..0f3edf640a1a99a6
+--- /dev/null
++++ b/support/xsymlink.c
+@@ -0,0 +1,29 @@
++/* Error-checking replacement for "symlink".
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/support.h>
++#include <support/check.h>
++
++#include <unistd.h>
++
++void
++xsymlink (const char *target, const char *linkpath)
++{
++  if (symlink (target, linkpath) < 0)
++    FAIL_EXIT1 ("symlink (\"%s\", \"%s\")", target, linkpath);
++}
+diff --git a/support/xunistd.h b/support/xunistd.h
+index 5fe5dae818def4ec..f99f362cb4763c5b 100644
+--- a/support/xunistd.h
++++ b/support/xunistd.h
+@@ -43,6 +43,10 @@ void xunlink (const char *path);
+ long xsysconf (int name);
+ long long xlseek (int fd, long long offset, int whence);
+ void xftruncate (int fd, long long length);
++void xsymlink (const char *target, const char *linkpath);
++
++/* Equivalent of "mkdir -p".  */
++void xmkdirp (const char *, mode_t);
+ 
+ /* Read the link at PATH.  The caller should free the returned string
+    with free.  */
+@@ -60,6 +64,9 @@ void *xmmap (void *addr, size_t length, int prot, int flags, int fd);
+ void xmprotect (void *addr, size_t length, int prot);
+ void xmunmap (void *addr, size_t length);
+ 
++ssize_t xcopy_file_range(int fd_in, loff_t *off_in, int fd_out,
++			 loff_t *off_out, size_t len, unsigned int flags);
++
+ __END_DECLS
+ 
+ #endif /* SUPPORT_XUNISTD_H */
diff --git a/SOURCES/glibc-rh1638523-2.patch b/SOURCES/glibc-rh1638523-2.patch
new file mode 100644
index 0000000..cf3ade5
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-2.patch
@@ -0,0 +1,80 @@
+commit 6c3a8a9d868a8deddf0d6dcc785b6d120de90523
+Author: Paul Pluzhnikov <ppluzhnikov@kazbek.mtv.corp.google.com>
+Date:   Fri Aug 24 18:08:51 2018 -0700
+
+    Fix BZ#23400 (creating temporary files in source tree), and undefined behavior in test.
+
+diff --git a/stdlib/test-bz22786.c b/stdlib/test-bz22786.c
+index e7837f98c19fc4bf..d1aa69106ccf6ac5 100644
+--- a/stdlib/test-bz22786.c
++++ b/stdlib/test-bz22786.c
+@@ -26,28 +26,20 @@
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <support/check.h>
++#include <support/support.h>
++#include <support/temp_file.h>
+ #include <support/test-driver.h>
+ #include <libc-diag.h>
+ 
+ static int
+ do_test (void)
+ {
+-  const char dir[] = "bz22786";
+-  const char lnk[] = "bz22786/symlink";
++  const char *dir = support_create_temp_directory ("bz22786.");
++  const char *lnk = xasprintf ("%s/symlink", dir);
++  const size_t path_len = (size_t) INT_MAX + strlen (lnk) + 1;
+ 
+-  rmdir (dir);
+-  if (mkdir (dir, 0755) != 0 && errno != EEXIST)
+-    {
+-      printf ("mkdir %s: %m\n", dir);
+-      return EXIT_FAILURE;
+-    }
+-  if (symlink (".", lnk) != 0 && errno != EEXIST)
+-    {
+-      printf ("symlink (%s, %s): %m\n", dir, lnk);
+-      return EXIT_FAILURE;
+-    }
+-
+-  const size_t path_len = (size_t) INT_MAX + 1;
++  TEST_VERIFY_EXIT (symlink (".", lnk) == 0);
+ 
+   DIAG_PUSH_NEEDS_COMMENT;
+ #if __GNUC_PREREQ (7, 0)
+@@ -55,20 +47,14 @@ do_test (void)
+      allocation to succeed for the test to work.  */
+   DIAG_IGNORE_NEEDS_COMMENT (7, "-Walloc-size-larger-than=");
+ #endif
+-  char *path = malloc (path_len);
++  char *path = xmalloc (path_len);
+   DIAG_POP_NEEDS_COMMENT;
+ 
+-  if (path == NULL)
+-    {
+-      printf ("malloc (%zu): %m\n", path_len);
+-      return EXIT_UNSUPPORTED;
+-    }
+-
+-  /* Construct very long path = "bz22786/symlink/aaaa....."  */
+-  char *p = mempcpy (path, lnk, sizeof (lnk) - 1);
++  /* Construct very long path = "/tmp/bz22786.XXXX/symlink/aaaa....."  */
++  char *p = mempcpy (path, lnk, strlen (lnk));
+   *(p++) = '/';
+-  memset (p, 'a', path_len - (path - p) - 2);
+-  p[path_len - (path - p) - 1] = '\0';
++  memset (p, 'a', path_len - (p - path) - 2);
++  p[path_len - (p - path) - 1] = '\0';
+ 
+   /* This call crashes before the fix for bz22786 on 32-bit platforms.  */
+   p = realpath (path, NULL);
+@@ -81,7 +67,6 @@ do_test (void)
+ 
+   /* Cleanup.  */
+   unlink (lnk);
+-  rmdir (dir);
+ 
+   return 0;
+ }
diff --git a/SOURCES/glibc-rh1638523-3.patch b/SOURCES/glibc-rh1638523-3.patch
new file mode 100644
index 0000000..8ad2241
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-3.patch
@@ -0,0 +1,55 @@
+commit 3bad2358d67d371497079bba4f8eca9c0096f4e2
+Author: Stefan Liebler <stli@linux.ibm.com>
+Date:   Thu Aug 30 08:44:32 2018 +0200
+
+    Test stdlib/test-bz22786 exits now with unsupported if malloc fails.
+    
+    The test tries to allocate more than 2^31 bytes which will always fail on s390
+    as it has maximum 2^31bit of memory.
+    Before commit 6c3a8a9d868a8deddf0d6dcc785b6d120de90523, this test returned
+    unsupported if malloc fails.  This patch re enables this behaviour.
+    
+    Furthermore support_delete_temp_files() failed to remove the temp directory
+    in this case as it is not empty due to the created symlink.
+    Thus the creation of the symlink is moved behind malloc.
+    
+    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+    
+    ChangeLog:
+    
+            * stdlib/test-bz22786.c (do_test): Return EXIT_UNSUPPORTED
+            if malloc fails.
+
+diff --git a/stdlib/test-bz22786.c b/stdlib/test-bz22786.c
+index d1aa69106ccf6ac5..777bf9180f4b5022 100644
+--- a/stdlib/test-bz22786.c
++++ b/stdlib/test-bz22786.c
+@@ -39,16 +39,25 @@ do_test (void)
+   const char *lnk = xasprintf ("%s/symlink", dir);
+   const size_t path_len = (size_t) INT_MAX + strlen (lnk) + 1;
+ 
+-  TEST_VERIFY_EXIT (symlink (".", lnk) == 0);
+-
+   DIAG_PUSH_NEEDS_COMMENT;
+ #if __GNUC_PREREQ (7, 0)
+   /* GCC 7 warns about too-large allocations; here we need such
+      allocation to succeed for the test to work.  */
+   DIAG_IGNORE_NEEDS_COMMENT (7, "-Walloc-size-larger-than=");
+ #endif
+-  char *path = xmalloc (path_len);
++  char *path = malloc (path_len);
+   DIAG_POP_NEEDS_COMMENT;
++  if (path == NULL)
++    {
++      printf ("malloc (%zu): %m\n", path_len);
++      /* On 31-bit s390 the malloc will always fail as we do not have
++	 so much memory, and we want to mark the test unsupported.
++	 Likewise on systems with little physical memory the test will
++	 fail and should be unsupported.  */
++      return EXIT_UNSUPPORTED;
++    }
++
++  TEST_VERIFY_EXIT (symlink (".", lnk) == 0);
+ 
+   /* Construct very long path = "/tmp/bz22786.XXXX/symlink/aaaa....."  */
+   char *p = mempcpy (path, lnk, strlen (lnk));
diff --git a/SOURCES/glibc-rh1638523-4.patch b/SOURCES/glibc-rh1638523-4.patch
new file mode 100644
index 0000000..d5e0efb
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-4.patch
@@ -0,0 +1,65 @@
+commit f5e7e95921847bd83186bfe621fc2b48c4de5477
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Oct 30 13:11:47 2018 +0100
+
+    stdlib/test-bz22786: Avoid spurious test failures using alias mappings
+    
+    On systems without enough random-access memory, stdlib/test-bz22786
+    will go deeply into swap and time out, even with a substantial
+    TIMEOUTFACTOR.  This commit adds a facility to construct repeating
+    strings with alias mappings, so that the requirement for physical
+    memory, and uses it in stdlib/test-bz22786.
+
+Adjusted here for conflicts due to the previous support/ backport in
+glibc-rh1638523-1.patch.
+
+diff --git a/stdlib/test-bz22786.c b/stdlib/test-bz22786.c
+index 777bf9180f4b5022..bb1e04f2debe9042 100644
+--- a/stdlib/test-bz22786.c
++++ b/stdlib/test-bz22786.c
+@@ -26,6 +26,7 @@
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <support/blob_repeat.h>
+ #include <support/check.h>
+ #include <support/support.h>
+ #include <support/temp_file.h>
+@@ -39,17 +40,12 @@ do_test (void)
+   const char *lnk = xasprintf ("%s/symlink", dir);
+   const size_t path_len = (size_t) INT_MAX + strlen (lnk) + 1;
+ 
+-  DIAG_PUSH_NEEDS_COMMENT;
+-#if __GNUC_PREREQ (7, 0)
+-  /* GCC 7 warns about too-large allocations; here we need such
+-     allocation to succeed for the test to work.  */
+-  DIAG_IGNORE_NEEDS_COMMENT (7, "-Walloc-size-larger-than=");
+-#endif
+-  char *path = malloc (path_len);
+-  DIAG_POP_NEEDS_COMMENT;
++  struct support_blob_repeat repeat
++    = support_blob_repeat_allocate ("a", 1, path_len);
++  char *path = repeat.start;
+   if (path == NULL)
+     {
+-      printf ("malloc (%zu): %m\n", path_len);
++      printf ("Repeated allocation (%zu bytes): %m\n", path_len);
+       /* On 31-bit s390 the malloc will always fail as we do not have
+ 	 so much memory, and we want to mark the test unsupported.
+ 	 Likewise on systems with little physical memory the test will
+@@ -62,7 +58,6 @@ do_test (void)
+   /* Construct very long path = "/tmp/bz22786.XXXX/symlink/aaaa....."  */
+   char *p = mempcpy (path, lnk, strlen (lnk));
+   *(p++) = '/';
+-  memset (p, 'a', path_len - (p - path) - 2);
+   p[path_len - (p - path) - 1] = '\0';
+ 
+   /* This call crashes before the fix for bz22786 on 32-bit platforms.  */
+@@ -76,6 +71,7 @@ do_test (void)
+ 
+   /* Cleanup.  */
+   unlink (lnk);
++  support_blob_repeat_free (&repeat);
+ 
+   return 0;
+ }
diff --git a/SOURCES/glibc-rh1638523-5.patch b/SOURCES/glibc-rh1638523-5.patch
new file mode 100644
index 0000000..c0ed47d
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-5.patch
@@ -0,0 +1,51 @@
+commit 07da99aad93c9364acb7efdab47c27ba698f6313
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Oct 30 13:55:01 2018 +0100
+
+    stdlib/tst-strtod-overflow: Switch to support_blob_repeat
+    
+    This is another test with an avoidable large memory allocation.
+
+diff --git a/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c
+index d14638d68ef4f471..dc53c1e521443e1d 100644
+--- a/stdlib/tst-strtod-overflow.c
++++ b/stdlib/tst-strtod-overflow.c
+@@ -19,6 +19,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <support/blob_repeat.h>
++#include <support/test-driver.h>
+ 
+ #define EXPONENT "e-2147483649"
+ #define SIZE 214748364
+@@ -26,21 +28,23 @@
+ static int
+ do_test (void)
+ {
+-  char *p = malloc (1 + SIZE + sizeof (EXPONENT));
+-  if (p == NULL)
++  struct support_blob_repeat repeat = support_blob_repeat_allocate
++    ("0", 1, 1 + SIZE + sizeof (EXPONENT));
++  if (repeat.size == 0)
+     {
+-      puts ("malloc failed, cannot test for overflow");
+-      return 0;
++      puts ("warning: memory allocation failed, cannot test for overflow");
++      return EXIT_UNSUPPORTED;
+     }
++  char *p = repeat.start;
+   p[0] = '1';
+-  memset (p + 1, '0', SIZE);
+   memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
+   double d = strtod (p, NULL);
+   if (d != 0)
+     {
+-      printf ("strtod returned wrong value: %a\n", d);
++      printf ("error: strtod returned wrong value: %a\n", d);
+       return 1;
+     }
++  support_blob_repeat_free (&repeat);
+   return 0;
+ }
+ 
diff --git a/SOURCES/glibc-rh1638523-6.patch b/SOURCES/glibc-rh1638523-6.patch
new file mode 100644
index 0000000..ea8509f
--- /dev/null
+++ b/SOURCES/glibc-rh1638523-6.patch
@@ -0,0 +1,30 @@
+commit 60708030536df82616c16aa2f14f533c4362b969
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Oct 30 13:56:40 2018 +0100
+
+    stdlib/test-bz22786: Avoid memory leaks in the test itself
+
+diff --git a/stdlib/test-bz22786.c b/stdlib/test-bz22786.c
+index bb1e04f2debe9042..8035e8a394e7d034 100644
+--- a/stdlib/test-bz22786.c
++++ b/stdlib/test-bz22786.c
+@@ -36,8 +36,8 @@
+ static int
+ do_test (void)
+ {
+-  const char *dir = support_create_temp_directory ("bz22786.");
+-  const char *lnk = xasprintf ("%s/symlink", dir);
++  char *dir = support_create_temp_directory ("bz22786.");
++  char *lnk = xasprintf ("%s/symlink", dir);
+   const size_t path_len = (size_t) INT_MAX + strlen (lnk) + 1;
+ 
+   struct support_blob_repeat repeat
+@@ -72,6 +72,8 @@ do_test (void)
+   /* Cleanup.  */
+   unlink (lnk);
+   support_blob_repeat_free (&repeat);
++  free (lnk);
++  free (dir);
+ 
+   return 0;
+ }
diff --git a/SOURCES/glibc-rh1641982.patch b/SOURCES/glibc-rh1641982.patch
new file mode 100644
index 0000000..937abfd
--- /dev/null
+++ b/SOURCES/glibc-rh1641982.patch
@@ -0,0 +1,41 @@
+commit c3d8dc45c9df199b8334599a6cbd98c9950dba62
+Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date:   Thu Oct 11 15:18:40 2018 -0300
+
+    x86: Fix Haswell strong flags (BZ#23709)
+    
+    Th commit 'Disable TSX on some Haswell processors.' (2702856bf4) changed the
+    default flags for Haswell models.  Previously, new models were handled by the
+    default switch path, which assumed a Core i3/i5/i7 if AVX is available. After
+    the patch, Haswell models (0x3f, 0x3c, 0x45, 0x46) do not set the flags
+    Fast_Rep_String, Fast_Unaligned_Load, Fast_Unaligned_Copy, and
+    Prefer_PMINUB_for_stringop (only the TSX one).
+    
+    This patch fixes it by disentangle the TSX flag handling from the memory
+    optimization ones.  The strstr case cited on patch now selects the
+    __strstr_sse2_unaligned as expected for the Haswell cpu.
+    
+    Checked on x86_64-linux-gnu.
+    
+            [BZ #23709]
+            * sysdeps/x86/cpu-features.c (init_cpu_features): Set TSX bits
+            independently of other flags.
+
+diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
+index ea0b64fdb962a934..4695ac80d4148327 100644
+--- a/sysdeps/x86/cpu-features.c
++++ b/sysdeps/x86/cpu-features.c
+@@ -316,7 +316,13 @@ init_cpu_features (struct cpu_features *cpu_features)
+ 		    | bit_arch_Fast_Unaligned_Copy
+ 		    | bit_arch_Prefer_PMINUB_for_stringop);
+ 	      break;
++	    }
+ 
++	 /* Disable TSX on some Haswell processors to avoid TSX on kernels that
++	    weren't updated with the latest microcode package (which disables
++	    broken feature by default).  */
++	 switch (model)
++	    {
+ 	    case 0x3f:
+ 	      /* Xeon E7 v3 with stepping >= 4 has working TSX.  */
+ 	      if (stepping >= 4)
diff --git a/SOURCES/glibc-rh1642094-1.patch b/SOURCES/glibc-rh1642094-1.patch
new file mode 100644
index 0000000..2fd093c
--- /dev/null
+++ b/SOURCES/glibc-rh1642094-1.patch
@@ -0,0 +1,230 @@
+commit bcdaad21d4635931d1bd3b54a7894276925d081d
+Author: DJ Delorie <dj@delorie.com>
+Date:   Tue Nov 20 13:24:09 2018 -0500
+
+    malloc: tcache double free check
+    
+    * malloc/malloc.c (tcache_entry): Add key field.
+    (tcache_put): Set it.
+    (tcache_get): Likewise.
+    (_int_free): Check for double free in tcache.
+    * malloc/tst-tcfree1.c: New.
+    * malloc/tst-tcfree2.c: New.
+    * malloc/Makefile: Run the new tests.
+    * manual/probes.texi: Document memory_tcache_double_free probe.
+    
+    * dlfcn/dlerror.c (check_free): Prevent double frees.
+
+diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
+index 33574faab65628ff..96bf92533335036b 100644
+--- a/dlfcn/dlerror.c
++++ b/dlfcn/dlerror.c
+@@ -198,7 +198,10 @@ check_free (struct dl_action_result *rec)
+       Dl_info info;
+       if (_dl_addr (check_free, &info, &map, NULL) != 0 && map->l_ns == 0)
+ #endif
+-	free ((char *) rec->errstring);
++	{
++	  free ((char *) rec->errstring);
++	  rec->errstring = NULL;
++	}
+     }
+ }
+ 
+diff --git a/malloc/Makefile b/malloc/Makefile
+index 7d54bad866f63cb8..e6dfbfc14cb3d140 100644
+--- a/malloc/Makefile
++++ b/malloc/Makefile
+@@ -38,6 +38,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
+ 	 tst-malloc_info \
+ 	 tst-malloc-too-large \
+ 	 tst-malloc-stats-cancellation \
++	 tst-tcfree1 tst-tcfree2 \
+ 
+ tests-static := \
+ 	 tst-interpose-static-nothread \
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index e247c77b7d4de26e..c6b0282e783eaeea 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -2888,6 +2888,8 @@ mremap_chunk (mchunkptr p, size_t new_size)
+ typedef struct tcache_entry
+ {
+   struct tcache_entry *next;
++  /* This field exists to detect double frees.  */
++  struct tcache_perthread_struct *key;
+ } tcache_entry;
+ 
+ /* There is one of these for each thread, which contains the
+@@ -2911,6 +2913,11 @@ tcache_put (mchunkptr chunk, size_t tc_idx)
+ {
+   tcache_entry *e = (tcache_entry *) chunk2mem (chunk);
+   assert (tc_idx < TCACHE_MAX_BINS);
++
++  /* Mark this chunk as "in the tcache" so the test in _int_free will
++     detect a double free.  */
++  e->key = tcache;
++
+   e->next = tcache->entries[tc_idx];
+   tcache->entries[tc_idx] = e;
+   ++(tcache->counts[tc_idx]);
+@@ -2926,6 +2933,7 @@ tcache_get (size_t tc_idx)
+   assert (tcache->entries[tc_idx] > 0);
+   tcache->entries[tc_idx] = e->next;
+   --(tcache->counts[tc_idx]);
++  e->key = NULL;
+   return (void *) e;
+ }
+ 
+@@ -4152,6 +4160,26 @@ _int_free (mstate av, mchunkptr p, int have_lock)
+   {
+     size_t tc_idx = csize2tidx (size);
+ 
++    /* Check to see if it's already in the tcache.  */
++    tcache_entry *e = (tcache_entry *) chunk2mem (p);
++
++    /* This test succeeds on double free.  However, we don't 100%
++       trust it (it also matches random payload data at a 1 in
++       2^<size_t> chance), so verify it's not an unlikely coincidence
++       before aborting.  */
++    if (__glibc_unlikely (e->key == tcache && tcache))
++      {
++	tcache_entry *tmp;
++	LIBC_PROBE (memory_tcache_double_free, 2, e, tc_idx);
++	for (tmp = tcache->entries[tc_idx];
++	     tmp;
++	     tmp = tmp->next)
++	  if (tmp == e)
++	    malloc_printerr ("free(): double free detected in tcache 2");
++	/* If we get here, it was a coincidence.  We've wasted a few
++	   cycles, but don't abort.  */
++      }
++
+     if (tcache
+ 	&& tc_idx < mp_.tcache_bins
+ 	&& tcache->counts[tc_idx] < mp_.tcache_count)
+diff --git a/malloc/tst-tcfree1.c b/malloc/tst-tcfree1.c
+new file mode 100644
+index 0000000000000000..bc29375ce77304ac
+--- /dev/null
++++ b/malloc/tst-tcfree1.c
+@@ -0,0 +1,42 @@
++/* Test that malloc tcache catches double free.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <errno.h>
++#include <error.h>
++#include <limits.h>
++#include <malloc.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <sys/signal.h>
++
++static int
++do_test (void)
++{
++  /* Do one allocation of any size that fits in tcache.  */
++  char * volatile x = malloc (32);
++
++  free (x); // puts in tcache
++  free (x); // should abort
++
++  printf("FAIL: tcache double free not detected\n");
++  return 1;
++}
++
++#define TEST_FUNCTION do_test
++#define EXPECTED_SIGNAL SIGABRT
++#include <support/test-driver.c>
+diff --git a/malloc/tst-tcfree2.c b/malloc/tst-tcfree2.c
+new file mode 100644
+index 0000000000000000..17f06bacd411c315
+--- /dev/null
++++ b/malloc/tst-tcfree2.c
+@@ -0,0 +1,48 @@
++/* Test that malloc tcache catches double free.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <errno.h>
++#include <error.h>
++#include <limits.h>
++#include <malloc.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <sys/signal.h>
++
++static int
++do_test (void)
++{
++  char * volatile ptrs[20];
++  int i;
++
++  /* Allocate enough small chunks so that when we free them all, the tcache
++     is full, and the first one we freed is at the end of its linked list.  */
++#define COUNT 20
++  for (i=0; i<COUNT; i++)
++    ptrs[i] = malloc (20);
++  for (i=0; i<COUNT; i++)
++    free (ptrs[i]);
++  free (ptrs[0]);
++
++  printf("FAIL: tcache double free\n");
++  return 1;
++}
++
++#define TEST_FUNCTION do_test
++#define EXPECTED_SIGNAL SIGABRT
++#include <support/test-driver.c>
+diff --git a/manual/probes.texi b/manual/probes.texi
+index ab2a3102bb350ef4..0ea560ed78bcfd7e 100644
+--- a/manual/probes.texi
++++ b/manual/probes.texi
+@@ -243,6 +243,18 @@ This probe is triggered when the
+ value of this tunable.
+ @end deftp
+ 
++@deftp Probe memory_tcache_double_free (void *@var{$arg1}, int @var{$arg2})
++This probe is triggered when @code{free} determines that the memory
++being freed has probably already been freed, and resides in the
++per-thread cache.  Note that there is an extremely unlikely chance
++that this probe will trigger due to random payload data remaining in
++the allocated memory matching the key used to detect double frees.
++This probe actually indicates that an expensive linear search of the
++tcache, looking for a double free, has happened.  Argument @var{$arg1}
++is the memory location as passed to @code{free}, Argument @var{$arg2}
++is the tcache bin it resides in.
++@end deftp
++
+ @node Mathematical Function Probes
+ @section Mathematical Function Probes
+ 
diff --git a/SOURCES/glibc-rh1642094-2.patch b/SOURCES/glibc-rh1642094-2.patch
new file mode 100644
index 0000000..aa3d2ea
--- /dev/null
+++ b/SOURCES/glibc-rh1642094-2.patch
@@ -0,0 +1,73 @@
+commit affec03b713c82c43a5b025dddc21bde3334f41e
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Nov 26 20:06:37 2018 +0100
+
+    malloc: tcache: Validate tc_idx before checking for double-frees [BZ #23907]
+    
+    The previous check could read beyond the end of the tcache entry
+    array.  If the e->key == tcache cookie check happened to pass, this
+    would result in crashes.
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index c6b0282e783eaeea..13c52f376859562d 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -4159,33 +4159,33 @@ _int_free (mstate av, mchunkptr p, int have_lock)
+ #if USE_TCACHE
+   {
+     size_t tc_idx = csize2tidx (size);
+-
+-    /* Check to see if it's already in the tcache.  */
+-    tcache_entry *e = (tcache_entry *) chunk2mem (p);
+-
+-    /* This test succeeds on double free.  However, we don't 100%
+-       trust it (it also matches random payload data at a 1 in
+-       2^<size_t> chance), so verify it's not an unlikely coincidence
+-       before aborting.  */
+-    if (__glibc_unlikely (e->key == tcache && tcache))
++    if (tcache != NULL && tc_idx < mp_.tcache_bins)
+       {
+-	tcache_entry *tmp;
+-	LIBC_PROBE (memory_tcache_double_free, 2, e, tc_idx);
+-	for (tmp = tcache->entries[tc_idx];
+-	     tmp;
+-	     tmp = tmp->next)
+-	  if (tmp == e)
+-	    malloc_printerr ("free(): double free detected in tcache 2");
+-	/* If we get here, it was a coincidence.  We've wasted a few
+-	   cycles, but don't abort.  */
+-      }
++	/* Check to see if it's already in the tcache.  */
++	tcache_entry *e = (tcache_entry *) chunk2mem (p);
++
++	/* This test succeeds on double free.  However, we don't 100%
++	   trust it (it also matches random payload data at a 1 in
++	   2^<size_t> chance), so verify it's not an unlikely
++	   coincidence before aborting.  */
++	if (__glibc_unlikely (e->key == tcache))
++	  {
++	    tcache_entry *tmp;
++	    LIBC_PROBE (memory_tcache_double_free, 2, e, tc_idx);
++	    for (tmp = tcache->entries[tc_idx];
++		 tmp;
++		 tmp = tmp->next)
++	      if (tmp == e)
++		malloc_printerr ("free(): double free detected in tcache 2");
++	    /* If we get here, it was a coincidence.  We've wasted a
++	       few cycles, but don't abort.  */
++	  }
+ 
+-    if (tcache
+-	&& tc_idx < mp_.tcache_bins
+-	&& tcache->counts[tc_idx] < mp_.tcache_count)
+-      {
+-	tcache_put (p, tc_idx);
+-	return;
++	if (tcache->counts[tc_idx] < mp_.tcache_count)
++	  {
++	    tcache_put (p, tc_idx);
++	    return;
++	  }
+       }
+   }
+ #endif
diff --git a/SOURCES/glibc-rh1642094-3.patch b/SOURCES/glibc-rh1642094-3.patch
new file mode 100644
index 0000000..50a41ef
--- /dev/null
+++ b/SOURCES/glibc-rh1642094-3.patch
@@ -0,0 +1,89 @@
+commit 7c9a7c68363051cfc5fa1ebb96b3b2c1f82dcb76
+Author: DJ Delorie <dj@redhat.com>
+Date:   Fri Nov 30 22:13:09 2018 -0500
+
+    malloc: Add another test for tcache double free check.
+    
+    This one tests for BZ#23907 where the double free
+    test didn't check the tcache bin bounds before dereferencing
+    the bin.
+    
+    [BZ #23907]
+    * malloc/tst-tcfree3.c: New.
+    * malloc/Makefile: Add it.
+
+diff --git a/malloc/Makefile b/malloc/Makefile
+index e6dfbfc14cb3d140..388cf7e9ee3a2569 100644
+--- a/malloc/Makefile
++++ b/malloc/Makefile
+@@ -38,7 +38,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
+ 	 tst-malloc_info \
+ 	 tst-malloc-too-large \
+ 	 tst-malloc-stats-cancellation \
+-	 tst-tcfree1 tst-tcfree2 \
++	 tst-tcfree1 tst-tcfree2 tst-tcfree3 \
+ 
+ tests-static := \
+ 	 tst-interpose-static-nothread \
+diff --git a/malloc/tst-tcfree3.c b/malloc/tst-tcfree3.c
+new file mode 100644
+index 0000000000000000..016d30ddd8114082
+--- /dev/null
++++ b/malloc/tst-tcfree3.c
+@@ -0,0 +1,56 @@
++/* Test that malloc tcache catches double free.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <malloc.h>
++#include <string.h>
++
++/* Prevent GCC from optimizing away any malloc/free pairs.  */
++#pragma GCC optimize ("O0")
++
++static int
++do_test (void)
++{
++  /* Do two allocation of any size that fit in tcache, and one that
++     doesn't.  */
++  int ** volatile a = malloc (32);
++  int ** volatile b = malloc (32);
++  /* This is just under the mmap threshold.  */
++  int ** volatile c = malloc (127 * 1024);
++
++  /* The invalid "tcache bucket" we might dereference will likely end
++     up somewhere within this memory block, so make all the accidental
++     "next" pointers cause segfaults.  BZ #23907.  */
++  memset (c, 0xff, 127 * 1024);
++
++  free (a); // puts in tcache
++
++  /* A is now free and contains the key we use to detect in-tcache.
++     Copy the key to the other chunks.  */
++  memcpy (b, a, 32);
++  memcpy (c, a, 32);
++
++  /* This free tests the "are we in the tcache already" loop with a
++     VALID bin but "coincidental" matching key.  */
++  free (b); // should NOT abort
++  /* This free tests the "is it a valid tcache bin" test.  */
++  free (c); // should NOT abort
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1645593.patch b/SOURCES/glibc-rh1645593.patch
new file mode 100644
index 0000000..d2b5cc2
--- /dev/null
+++ b/SOURCES/glibc-rh1645593.patch
@@ -0,0 +1,34 @@
+commit 28669f86f6780a18daca264f32d66b1428c9c6f1
+Author: Stefan Liebler <stli@linux.ibm.com>
+Date:   Thu Sep 6 14:27:03 2018 +0200
+
+    Fix segfault in maybe_script_execute.
+    
+    If glibc is built with gcc 8 and -march=z900,
+    the testcase posix/tst-spawn4-compat crashes with a segfault.
+    
+    In function maybe_script_execute, the new_argv array is dynamically
+    initialized on stack with (argc + 1) elements.
+    The function wants to add _PATH_BSHELL as the first argument
+    and writes out of bounds of new_argv.
+    There is an off-by-one because maybe_script_execute fails to count
+    the terminating NULL when sizing new_argv.
+    
+    ChangeLog:
+    
+            * sysdeps/unix/sysv/linux/spawni.c (maybe_script_execute):
+            Increment size of new_argv by one.
+
+diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
+index cf0213ece55c675d..85239cedbf2a5ab5 100644
+--- a/sysdeps/unix/sysv/linux/spawni.c
++++ b/sysdeps/unix/sysv/linux/spawni.c
+@@ -101,7 +101,7 @@ maybe_script_execute (struct posix_spawn_args *args)
+       ptrdiff_t argc = args->argc;
+ 
+       /* Construct an argument list for the shell.  */
+-      char *new_argv[argc + 1];
++      char *new_argv[argc + 2];
+       new_argv[0] = (char *) _PATH_BSHELL;
+       new_argv[1] = (char *) args->file;
+       if (argc > 1)
diff --git a/SOURCES/glibc-rh1645596.patch b/SOURCES/glibc-rh1645596.patch
new file mode 100644
index 0000000..36e4b9a
--- /dev/null
+++ b/SOURCES/glibc-rh1645596.patch
@@ -0,0 +1,193 @@
+commit 7a16bdbb9ff4122af0a28dc20996c95352011fdd
+Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date:   Wed Aug 29 16:36:44 2018 -0300
+
+    Fix misreported errno on preadv2/pwritev2 (BZ#23579)
+    
+    The fallback code of Linux wrapper for preadv2/pwritev2 executes
+    regardless of the errno code for preadv2, instead of the case where
+    the syscall is not supported.
+    
+    This fixes it by calling the fallback code iff errno is ENOSYS. The
+    patch also adds tests for both invalid file descriptor and invalid
+    iov_len and vector count.
+    
+    The only discrepancy between preadv2 and fallback code regarding
+    error reporting is when an invalid flags are used.  The fallback code
+    bails out earlier with ENOTSUP instead of EINVAL/EBADF when the syscall
+    is used.
+    
+    Checked on x86_64-linux-gnu on a 4.4.0 and 4.15.0 kernel.
+    
+            [BZ #23579]
+            * misc/tst-preadvwritev2-common.c (do_test_with_invalid_fd): New
+            test.
+            * misc/tst-preadvwritev2.c, misc/tst-preadvwritev64v2.c (do_test):
+            Call do_test_with_invalid_fd.
+            * sysdeps/unix/sysv/linux/preadv2.c (preadv2): Use fallback code iff
+            errno is ENOSYS.
+            * sysdeps/unix/sysv/linux/preadv64v2.c (preadv64v2): Likewise.
+            * sysdeps/unix/sysv/linux/pwritev2.c (pwritev2): Likewise.
+            * sysdeps/unix/sysv/linux/pwritev64v2.c (pwritev64v2): Likewise.
+
+diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
+index f889a21544947042..50b9da3fea56d288 100644
+--- a/misc/tst-preadvwritev2-common.c
++++ b/misc/tst-preadvwritev2-common.c
+@@ -19,9 +19,6 @@
+ #include <limits.h>
+ #include <support/check.h>
+ 
+-static void
+-do_test_with_invalid_flags (void)
+-{
+ #ifndef RWF_HIPRI
+ # define RWF_HIPRI 0
+ #endif
+@@ -39,6 +36,68 @@ do_test_with_invalid_flags (void)
+ #endif
+ #define RWF_SUPPORTED	(RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT \
+ 			 | RWF_APPEND)
++
++static void
++do_test_with_invalid_fd (void)
++{
++  char buf[256];
++  struct iovec iov = { buf, sizeof buf };
++
++  /* Check with flag being 0 to use the fallback code which calls pwritev
++     or writev.  */
++  TEST_VERIFY (preadv2 (-1, &iov, 1, -1, 0) == -1);
++  TEST_COMPARE (errno, EBADF);
++  TEST_VERIFY (pwritev2 (-1, &iov, 1, -1, 0) == -1);
++  TEST_COMPARE (errno, EBADF);
++
++  /* Same tests as before but with flags being different than 0.  Since
++     there is no emulation for any flag value, fallback code returns
++     ENOTSUP.  This is different running on a kernel with preadv2/pwritev2
++     support, where EBADF is returned).  */
++  TEST_VERIFY (preadv2 (-1, &iov, 1, 0, RWF_HIPRI) == -1);
++  TEST_VERIFY (errno == EBADF || errno == ENOTSUP);
++  TEST_VERIFY (pwritev2 (-1, &iov, 1, 0, RWF_HIPRI) == -1);
++  TEST_VERIFY (errno == EBADF || errno == ENOTSUP);
++}
++
++static void
++do_test_with_invalid_iov (void)
++{
++  {
++    char buf[256];
++    struct iovec iov;
++
++    iov.iov_base = buf;
++    iov.iov_len = (size_t)SSIZE_MAX + 1;
++
++    TEST_VERIFY (preadv2 (temp_fd, &iov, 1, 0, 0) == -1);
++    TEST_COMPARE (errno, EINVAL);
++    TEST_VERIFY (pwritev2 (temp_fd, &iov, 1, 0, 0) == -1);
++    TEST_COMPARE (errno, EINVAL);
++
++    /* Same as for invalid file descriptor tests, emulation fallback
++       first checks for flag value and return ENOTSUP.  */
++    TEST_VERIFY (preadv2 (temp_fd, &iov, 1, 0, RWF_HIPRI) == -1);
++    TEST_VERIFY (errno == EINVAL || errno == ENOTSUP);
++    TEST_VERIFY (pwritev2 (temp_fd, &iov, 1, 0, RWF_HIPRI) == -1);
++    TEST_VERIFY (errno == EINVAL || errno == ENOTSUP);
++  }
++
++  {
++    /* An invalid iovec buffer should trigger an invalid memory access
++       or an error (Linux for instance returns EFAULT).  */
++    struct iovec iov[IOV_MAX+1] = { 0 };
++
++    TEST_VERIFY (preadv2 (temp_fd, iov, IOV_MAX + 1, 0, RWF_HIPRI) == -1);
++    TEST_VERIFY (errno == EINVAL || errno == ENOTSUP);
++    TEST_VERIFY (pwritev2 (temp_fd, iov, IOV_MAX + 1, 0, RWF_HIPRI) == -1);
++    TEST_VERIFY (errno == EINVAL || errno == ENOTSUP);
++  }
++}
++
++static void
++do_test_with_invalid_flags (void)
++{
+   /* Set the next bit from the mask of all supported flags.  */
+   int invalid_flag = RWF_SUPPORTED != 0 ? __builtin_clz (RWF_SUPPORTED) : 2;
+   invalid_flag = 0x1 << ((sizeof (int) * CHAR_BIT) - invalid_flag);
+diff --git a/misc/tst-preadvwritev2.c b/misc/tst-preadvwritev2.c
+index be22802dbe00317f..cb58cbe41ecc639d 100644
+--- a/misc/tst-preadvwritev2.c
++++ b/misc/tst-preadvwritev2.c
+@@ -30,6 +30,8 @@ do_test (void)
+ {
+   do_test_with_invalid_flags ();
+   do_test_without_offset ();
++  do_test_with_invalid_fd ();
++  do_test_with_invalid_iov ();
+ 
+   return do_test_with_offset (0);
+ }
+diff --git a/misc/tst-preadvwritev64v2.c b/misc/tst-preadvwritev64v2.c
+index 8d3cc32b284dbf4c..6a9de54c786acc53 100644
+--- a/misc/tst-preadvwritev64v2.c
++++ b/misc/tst-preadvwritev64v2.c
+@@ -32,6 +32,8 @@ do_test (void)
+ {
+   do_test_with_invalid_flags ();
+   do_test_without_offset ();
++  do_test_with_invalid_fd ();
++  do_test_with_invalid_iov ();
+ 
+   return do_test_with_offset (0);
+ }
+diff --git a/sysdeps/unix/sysv/linux/preadv2.c b/sysdeps/unix/sysv/linux/preadv2.c
+index c8bf0764ef2629fc..bb08cbc5fd96962e 100644
+--- a/sysdeps/unix/sysv/linux/preadv2.c
++++ b/sysdeps/unix/sysv/linux/preadv2.c
+@@ -32,7 +32,7 @@ preadv2 (int fd, const struct iovec *vector, int count, off_t offset,
+ # ifdef __NR_preadv2
+   ssize_t result = SYSCALL_CANCEL (preadv2, fd, vector, count,
+ 				   LO_HI_LONG (offset), flags);
+-  if (result >= 0)
++  if (result >= 0 || errno != ENOSYS)
+     return result;
+ # endif
+   /* Trying to emulate the preadv2 syscall flags is troublesome:
+diff --git a/sysdeps/unix/sysv/linux/preadv64v2.c b/sysdeps/unix/sysv/linux/preadv64v2.c
+index d7400a0252a8c6a1..b72a047347b1db0e 100644
+--- a/sysdeps/unix/sysv/linux/preadv64v2.c
++++ b/sysdeps/unix/sysv/linux/preadv64v2.c
+@@ -30,7 +30,7 @@ preadv64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
+ #ifdef __NR_preadv64v2
+   ssize_t result = SYSCALL_CANCEL (preadv64v2, fd, vector, count,
+ 				   LO_HI_LONG (offset), flags);
+-  if (result >= 0)
++  if (result >= 0 || errno != ENOSYS)
+     return result;
+ #endif
+   /* Trying to emulate the preadv2 syscall flags is troublesome:
+diff --git a/sysdeps/unix/sysv/linux/pwritev2.c b/sysdeps/unix/sysv/linux/pwritev2.c
+index 29c2264c8f3d949a..26333ebd43c5f0af 100644
+--- a/sysdeps/unix/sysv/linux/pwritev2.c
++++ b/sysdeps/unix/sysv/linux/pwritev2.c
+@@ -28,7 +28,7 @@ pwritev2 (int fd, const struct iovec *vector, int count, off_t offset,
+ # ifdef __NR_pwritev2
+   ssize_t result = SYSCALL_CANCEL (pwritev2, fd, vector, count,
+ 				   LO_HI_LONG (offset), flags);
+-  if (result >= 0)
++  if (result >= 0 || errno != ENOSYS)
+     return result;
+ # endif
+   /* Trying to emulate the pwritev2 syscall flags is troublesome:
+diff --git a/sysdeps/unix/sysv/linux/pwritev64v2.c b/sysdeps/unix/sysv/linux/pwritev64v2.c
+index 42da321149bce40d..17ea905aa6a8db94 100644
+--- a/sysdeps/unix/sysv/linux/pwritev64v2.c
++++ b/sysdeps/unix/sysv/linux/pwritev64v2.c
+@@ -30,7 +30,7 @@ pwritev64v2 (int fd, const struct iovec *vector, int count, off64_t offset,
+ #ifdef __NR_pwritev64v2
+   ssize_t result = SYSCALL_CANCEL (pwritev64v2, fd, vector, count,
+ 				   LO_HI_LONG (offset), flags);
+-  if (result >= 0)
++  if (result >= 0 || errno != ENOSYS)
+     return result;
+ #endif
+   /* Trying to emulate the pwritev2 syscall flags is troublesome:
diff --git a/SOURCES/glibc-rh1645597.patch b/SOURCES/glibc-rh1645597.patch
new file mode 100644
index 0000000..eee0633
--- /dev/null
+++ b/SOURCES/glibc-rh1645597.patch
@@ -0,0 +1,33 @@
+commit dae3ed958c3d0090838e49ff4f78c201262b1cf0
+Author: Rafal Luzynski <digitalfreak@lingonborough.com>
+Date:   Tue Oct 2 23:34:18 2018 +0200
+
+    kl_GL: Fix spelling of Sunday, should be "sapaat" (bug 20209).
+    
+    Although CLDR says otherwise, it is confirmed by Oqaasileriffik, the
+    official Greenlandic language regulator, that this change is correct.
+    
+            [BZ #20209]
+            * localedata/locales/kl_GL: (abday): Fix spelling of Sun (Sunday),
+            should be "sap" rather than "sab".
+            (day): Fix spelling of Sunday, should be "sapaat" rather than
+            "sabaat".
+
+diff --git a/localedata/locales/kl_GL b/localedata/locales/kl_GL
+index 5ab14a31aade8644..5723ce7dcf9c5742 100644
+--- a/localedata/locales/kl_GL
++++ b/localedata/locales/kl_GL
+@@ -70,11 +70,11 @@ copy "da_DK"
+ END LC_NUMERIC
+ 
+ LC_TIME
+-abday    "sab";"ata";/
++abday    "sap";"ata";/
+          "mar";"pin";/
+          "sis";"tal";/
+          "arf"
+-day      "sabaat";/
++day      "sapaat";/
+          "ataasinngorneq";/
+          "marlunngorneq";/
+          "pingasunngorneq";/
diff --git a/SOURCES/glibc-rh1645601.patch b/SOURCES/glibc-rh1645601.patch
new file mode 100644
index 0000000..6b1804e
--- /dev/null
+++ b/SOURCES/glibc-rh1645601.patch
@@ -0,0 +1,134 @@
+commit 7b1f9406761331cf35fe521fbdb592beecf68a2c
+Author: H.J. Lu <hjl.tools@gmail.com>
+Date:   Fri Sep 28 13:31:19 2018 -0700
+
+    i386: Use _dl_runtime_[resolve|profile]_shstk for SHSTK [BZ #23716]
+    
+    When elf_machine_runtime_setup is called to set up resolver, it should
+    use _dl_runtime_resolve_shstk or _dl_runtime_profile_shstk if SHSTK is
+    enabled by kernel.
+    
+    Tested on i686 with and without --enable-cet as well as on CET emulator
+    with --enable-cet.
+    
+            [BZ #23716]
+            * sysdeps/i386/dl-cet.c: Removed.
+            * sysdeps/i386/dl-machine.h (_dl_runtime_resolve_shstk): New
+            prototype.
+            (_dl_runtime_profile_shstk): Likewise.
+            (elf_machine_runtime_setup): Use _dl_runtime_profile_shstk or
+            _dl_runtime_resolve_shstk if SHSTK is enabled by kernel.
+    
+    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
+
+diff --git a/sysdeps/i386/dl-cet.c b/sysdeps/i386/dl-cet.c
+deleted file mode 100644
+index 5d9a4e8d5179b572..0000000000000000
+--- a/sysdeps/i386/dl-cet.c
++++ /dev/null
+@@ -1,67 +0,0 @@
+-/* Linux/i386 CET initializers function.
+-   Copyright (C) 2018 Free Software Foundation, Inc.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-
+-#define LINKAGE static inline
+-#define _dl_cet_check cet_check
+-#include <sysdeps/x86/dl-cet.c>
+-#undef _dl_cet_check
+-
+-#ifdef SHARED
+-void
+-_dl_cet_check (struct link_map *main_map, const char *program)
+-{
+-  cet_check (main_map, program);
+-
+-  if ((GL(dl_x86_feature_1)[0] & GNU_PROPERTY_X86_FEATURE_1_SHSTK))
+-    {
+-      /* Replace _dl_runtime_resolve and _dl_runtime_profile with
+-         _dl_runtime_resolve_shstk and _dl_runtime_profile_shstk,
+-	 respectively if SHSTK is enabled.  */
+-      extern void _dl_runtime_resolve (Elf32_Word) attribute_hidden;
+-      extern void _dl_runtime_resolve_shstk (Elf32_Word) attribute_hidden;
+-      extern void _dl_runtime_profile (Elf32_Word) attribute_hidden;
+-      extern void _dl_runtime_profile_shstk (Elf32_Word) attribute_hidden;
+-      unsigned int i;
+-      struct link_map *l;
+-      Elf32_Addr *got;
+-
+-      if (main_map->l_info[DT_JMPREL])
+-	{
+-	  got = (Elf32_Addr *) D_PTR (main_map, l_info[DT_PLTGOT]);
+-	  if (got[2] == (Elf32_Addr) &_dl_runtime_resolve)
+-	    got[2] = (Elf32_Addr) &_dl_runtime_resolve_shstk;
+-	  else if (got[2] == (Elf32_Addr) &_dl_runtime_profile)
+-	    got[2] = (Elf32_Addr) &_dl_runtime_profile_shstk;
+-	}
+-
+-      i = main_map->l_searchlist.r_nlist;
+-      while (i-- > 0)
+-	{
+-	  l = main_map->l_initfini[i];
+-	  if (l->l_info[DT_JMPREL])
+-	    {
+-	      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
+-	      if (got[2] == (Elf32_Addr) &_dl_runtime_resolve)
+-		got[2] = (Elf32_Addr) &_dl_runtime_resolve_shstk;
+-	      else if (got[2] == (Elf32_Addr) &_dl_runtime_profile)
+-		got[2] = (Elf32_Addr) &_dl_runtime_profile_shstk;
+-	    }
+-	}
+-    }
+-}
+-#endif
+diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
+index 1afdcbd9ea2626e4..f6cfb90e21015250 100644
+--- a/sysdeps/i386/dl-machine.h
++++ b/sysdeps/i386/dl-machine.h
+@@ -67,6 +67,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+   Elf32_Addr *got;
+   extern void _dl_runtime_resolve (Elf32_Word) attribute_hidden;
+   extern void _dl_runtime_profile (Elf32_Word) attribute_hidden;
++  extern void _dl_runtime_resolve_shstk (Elf32_Word) attribute_hidden;
++  extern void _dl_runtime_profile_shstk (Elf32_Word) attribute_hidden;
++  /* Check if SHSTK is enabled by kernel.  */
++  bool shstk_enabled
++    = (GL(dl_x86_feature_1)[0] & GNU_PROPERTY_X86_FEATURE_1_SHSTK) != 0;
+ 
+   if (l->l_info[DT_JMPREL] && lazy)
+     {
+@@ -93,7 +98,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+ 	 end in this function.  */
+       if (__glibc_unlikely (profile))
+ 	{
+-	  got[2] = (Elf32_Addr) &_dl_runtime_profile;
++	  got[2] = (shstk_enabled
++		    ? (Elf32_Addr) &_dl_runtime_profile_shstk
++		    : (Elf32_Addr) &_dl_runtime_profile);
+ 
+ 	  if (GLRO(dl_profile) != NULL
+ 	      && _dl_name_match_p (GLRO(dl_profile), l))
+@@ -104,7 +111,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+       else
+ 	/* This function will get called to fix up the GOT entry indicated by
+ 	   the offset on the stack, and then jump to the resolved address.  */
+-	got[2] = (Elf32_Addr) &_dl_runtime_resolve;
++	got[2] = (shstk_enabled
++		  ? (Elf32_Addr) &_dl_runtime_resolve_shstk
++		  : (Elf32_Addr) &_dl_runtime_resolve);
+     }
+ 
+   return lazy;
diff --git a/SOURCES/glibc-rh1645604.patch b/SOURCES/glibc-rh1645604.patch
new file mode 100644
index 0000000..f5c287b
--- /dev/null
+++ b/SOURCES/glibc-rh1645604.patch
@@ -0,0 +1,738 @@
+commit 403b4feb22dcbc85ace72a361d2a951380372471
+Author: Stefan Liebler <stli@linux.ibm.com>
+Date:   Wed Oct 17 12:23:04 2018 +0200
+
+    Fix race in pthread_mutex_lock while promoting to PTHREAD_MUTEX_ELISION_NP [BZ #23275]
+    
+    The race leads either to pthread_mutex_destroy returning EBUSY
+    or triggering an assertion (See description in bugzilla).
+    
+    This patch is fixing the race by ensuring that the elision path is
+    used in all cases if elision is enabled by the GLIBC_TUNABLES framework.
+    
+    The __kind variable in struct __pthread_mutex_s is accessed concurrently.
+    Therefore we are now using the atomic macros.
+    
+    The new testcase tst-mutex10 is triggering the race on s390x and intel.
+    Presumably also on power, but I don't have access to a power machine
+    with lock-elision. At least the code for power is the same as on the other
+    two architectures.
+    
+    ChangeLog:
+    
+            [BZ #23275]
+            * nptl/tst-mutex10.c: New File.
+            * nptl/Makefile (tests): Add tst-mutex10.
+            (tst-mutex10-ENV): New variable.
+            * sysdeps/unix/sysv/linux/s390/force-elision.h: (FORCE_ELISION):
+            Ensure that elision path is used if elision is available.
+            * sysdeps/unix/sysv/linux/powerpc/force-elision.h (FORCE_ELISION):
+            Likewise.
+            * sysdeps/unix/sysv/linux/x86/force-elision.h: (FORCE_ELISION):
+            Likewise.
+            * nptl/pthreadP.h (PTHREAD_MUTEX_TYPE, PTHREAD_MUTEX_TYPE_ELISION)
+            (PTHREAD_MUTEX_PSHARED): Use atomic_load_relaxed.
+            * nptl/pthread_mutex_consistent.c (pthread_mutex_consistent): Likewise.
+            * nptl/pthread_mutex_getprioceiling.c (pthread_mutex_getprioceiling):
+            Likewise.
+            * nptl/pthread_mutex_lock.c (__pthread_mutex_lock_full)
+            (__pthread_mutex_cond_lock_adjust): Likewise.
+            * nptl/pthread_mutex_setprioceiling.c (pthread_mutex_setprioceiling):
+            Likewise.
+            * nptl/pthread_mutex_timedlock.c (__pthread_mutex_timedlock): Likewise.
+            * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Likewise.
+            * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock_full): Likewise.
+            * sysdeps/nptl/bits/thread-shared-types.h (struct __pthread_mutex_s):
+            Add comments.
+            * nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy):
+            Use atomic_load_relaxed and atomic_store_relaxed.
+            * nptl/pthread_mutex_init.c (__pthread_mutex_init):
+            Use atomic_store_relaxed.
+
+diff --git a/nptl/Makefile b/nptl/Makefile
+index be8066524cdc57db..49b6faa330c492e0 100644
+--- a/nptl/Makefile
++++ b/nptl/Makefile
+@@ -241,9 +241,9 @@ LDLIBS-tst-minstack-throw = -lstdc++
+ 
+ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
+ 	tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 tst-mutex5 tst-mutex6 \
+-	tst-mutex7 tst-mutex9 tst-mutex5a tst-mutex7a tst-mutex7robust \
+-	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
+-	tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 tst-mutexpi7a \
++	tst-mutex7 tst-mutex9 tst-mutex10 tst-mutex5a tst-mutex7a \
++	tst-mutex7robust tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 \
++	tst-mutexpi5 tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 tst-mutexpi7a \
+ 	tst-mutexpi9 \
+ 	tst-spin1 tst-spin2 tst-spin3 tst-spin4 \
+ 	tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
+@@ -709,6 +709,8 @@ endif
+ 
+ $(objpfx)tst-compat-forwarder: $(objpfx)tst-compat-forwarder-mod.so
+ 
++tst-mutex10-ENV = GLIBC_TUNABLES=glibc.elision.enable=1
++
+ # The tests here better do not run in parallel
+ ifneq ($(filter %tests,$(MAKECMDGOALS)),)
+ .NOTPARALLEL:
+diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
+index 13bdb11133536195..19efe1e35feed5be 100644
+--- a/nptl/pthreadP.h
++++ b/nptl/pthreadP.h
+@@ -110,19 +110,23 @@ enum
+ };
+ #define PTHREAD_MUTEX_PSHARED_BIT 128
+ 
++/* See concurrency notes regarding __kind in struct __pthread_mutex_s
++   in sysdeps/nptl/bits/thread-shared-types.h.  */
+ #define PTHREAD_MUTEX_TYPE(m) \
+-  ((m)->__data.__kind & 127)
++  (atomic_load_relaxed (&((m)->__data.__kind)) & 127)
+ /* Don't include NO_ELISION, as that type is always the same
+    as the underlying lock type.  */
+ #define PTHREAD_MUTEX_TYPE_ELISION(m) \
+-  ((m)->__data.__kind & (127|PTHREAD_MUTEX_ELISION_NP))
++  (atomic_load_relaxed (&((m)->__data.__kind))	\
++   & (127 | PTHREAD_MUTEX_ELISION_NP))
+ 
+ #if LLL_PRIVATE == 0 && LLL_SHARED == 128
+ # define PTHREAD_MUTEX_PSHARED(m) \
+-  ((m)->__data.__kind & 128)
++  (atomic_load_relaxed (&((m)->__data.__kind)) & 128)
+ #else
+ # define PTHREAD_MUTEX_PSHARED(m) \
+-  (((m)->__data.__kind & 128) ? LLL_SHARED : LLL_PRIVATE)
++  ((atomic_load_relaxed (&((m)->__data.__kind)) & 128)	\
++   ? LLL_SHARED : LLL_PRIVATE)
+ #endif
+ 
+ /* The kernel when waking robust mutexes on exit never uses
+diff --git a/nptl/pthread_mutex_consistent.c b/nptl/pthread_mutex_consistent.c
+index 85b8e1a6cb027e9b..4fbd875430439e4d 100644
+--- a/nptl/pthread_mutex_consistent.c
++++ b/nptl/pthread_mutex_consistent.c
+@@ -23,8 +23,11 @@
+ int
+ pthread_mutex_consistent (pthread_mutex_t *mutex)
+ {
+-  /* Test whether this is a robust mutex with a dead owner.  */
+-  if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
++  /* Test whether this is a robust mutex with a dead owner.
++     See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  if ((atomic_load_relaxed (&(mutex->__data.__kind))
++       & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
+       || mutex->__data.__owner != PTHREAD_MUTEX_INCONSISTENT)
+     return EINVAL;
+ 
+diff --git a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c
+index 5a22611541995778..713ea684962fefc1 100644
+--- a/nptl/pthread_mutex_destroy.c
++++ b/nptl/pthread_mutex_destroy.c
+@@ -27,12 +27,17 @@ __pthread_mutex_destroy (pthread_mutex_t *mutex)
+ {
+   LIBC_PROBE (mutex_destroy, 1, mutex);
+ 
+-  if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
++  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  if ((atomic_load_relaxed (&(mutex->__data.__kind))
++       & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
+       && mutex->__data.__nusers != 0)
+     return EBUSY;
+ 
+-  /* Set to an invalid value.  */
+-  mutex->__data.__kind = -1;
++  /* Set to an invalid value.  Relaxed MO is enough as it is undefined behavior
++     if the mutex is used after it has been destroyed.  But you can reinitialize
++     it with pthread_mutex_init.  */
++  atomic_store_relaxed (&(mutex->__data.__kind), -1);
+ 
+   return 0;
+ }
+diff --git a/nptl/pthread_mutex_getprioceiling.c b/nptl/pthread_mutex_getprioceiling.c
+index efa37b0d99201f57..ee85949578475f3a 100644
+--- a/nptl/pthread_mutex_getprioceiling.c
++++ b/nptl/pthread_mutex_getprioceiling.c
+@@ -24,7 +24,9 @@
+ int
+ pthread_mutex_getprioceiling (const pthread_mutex_t *mutex, int *prioceiling)
+ {
+-  if (__builtin_expect ((mutex->__data.__kind
++  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  if (__builtin_expect ((atomic_load_relaxed (&(mutex->__data.__kind))
+ 			 & PTHREAD_MUTEX_PRIO_PROTECT_NP) == 0, 0))
+     return EINVAL;
+ 
+diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
+index d8fe4737289c0bd7..5cf290c272e27915 100644
+--- a/nptl/pthread_mutex_init.c
++++ b/nptl/pthread_mutex_init.c
+@@ -101,7 +101,7 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
+   memset (mutex, '\0', __SIZEOF_PTHREAD_MUTEX_T);
+ 
+   /* Copy the values from the attribute.  */
+-  mutex->__data.__kind = imutexattr->mutexkind & ~PTHREAD_MUTEXATTR_FLAG_BITS;
++  int mutex_kind = imutexattr->mutexkind & ~PTHREAD_MUTEXATTR_FLAG_BITS;
+ 
+   if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_ROBUST) != 0)
+     {
+@@ -111,17 +111,17 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
+ 	return ENOTSUP;
+ #endif
+ 
+-      mutex->__data.__kind |= PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++      mutex_kind |= PTHREAD_MUTEX_ROBUST_NORMAL_NP;
+     }
+ 
+   switch (imutexattr->mutexkind & PTHREAD_MUTEXATTR_PROTOCOL_MASK)
+     {
+     case PTHREAD_PRIO_INHERIT << PTHREAD_MUTEXATTR_PROTOCOL_SHIFT:
+-      mutex->__data.__kind |= PTHREAD_MUTEX_PRIO_INHERIT_NP;
++      mutex_kind |= PTHREAD_MUTEX_PRIO_INHERIT_NP;
+       break;
+ 
+     case PTHREAD_PRIO_PROTECT << PTHREAD_MUTEXATTR_PROTOCOL_SHIFT:
+-      mutex->__data.__kind |= PTHREAD_MUTEX_PRIO_PROTECT_NP;
++      mutex_kind |= PTHREAD_MUTEX_PRIO_PROTECT_NP;
+ 
+       int ceiling = (imutexattr->mutexkind
+ 		     & PTHREAD_MUTEXATTR_PRIO_CEILING_MASK)
+@@ -145,7 +145,11 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
+      FUTEX_PRIVATE_FLAG FUTEX_WAKE.  */
+   if ((imutexattr->mutexkind & (PTHREAD_MUTEXATTR_FLAG_PSHARED
+ 				| PTHREAD_MUTEXATTR_FLAG_ROBUST)) != 0)
+-    mutex->__data.__kind |= PTHREAD_MUTEX_PSHARED_BIT;
++    mutex_kind |= PTHREAD_MUTEX_PSHARED_BIT;
++
++  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  atomic_store_relaxed (&(mutex->__data.__kind), mutex_kind);
+ 
+   /* Default values: mutex not used yet.  */
+   // mutex->__count = 0;	already done by memset
+diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
+index 1519c142bd6ec5cc..29cc143e6cbf2421 100644
+--- a/nptl/pthread_mutex_lock.c
++++ b/nptl/pthread_mutex_lock.c
+@@ -62,6 +62,8 @@ static int __pthread_mutex_lock_full (pthread_mutex_t *mutex)
+ int
+ __pthread_mutex_lock (pthread_mutex_t *mutex)
+ {
++  /* See concurrency notes regarding mutex type which is loaded from __kind
++     in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
+   unsigned int type = PTHREAD_MUTEX_TYPE_ELISION (mutex);
+ 
+   LIBC_PROBE (mutex_entry, 1, mutex);
+@@ -350,8 +352,14 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
+     case PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP:
+     case PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
+-	int robust = mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	int kind, robust;
++	{
++	  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	     in sysdeps/nptl/bits/thread-shared-types.h.  */
++	  int mutex_kind = atomic_load_relaxed (&(mutex->__data.__kind));
++	  kind = mutex_kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	  robust = mutex_kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	}
+ 
+ 	if (robust)
+ 	  {
+@@ -502,7 +510,10 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
+     case PTHREAD_MUTEX_PP_NORMAL_NP:
+     case PTHREAD_MUTEX_PP_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	/* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	   in sysdeps/nptl/bits/thread-shared-types.h.  */
++	int kind = atomic_load_relaxed (&(mutex->__data.__kind))
++	  & PTHREAD_MUTEX_KIND_MASK_NP;
+ 
+ 	oldval = mutex->__data.__lock;
+ 
+@@ -607,15 +618,18 @@ hidden_def (__pthread_mutex_lock)
+ void
+ __pthread_mutex_cond_lock_adjust (pthread_mutex_t *mutex)
+ {
+-  assert ((mutex->__data.__kind & PTHREAD_MUTEX_PRIO_INHERIT_NP) != 0);
+-  assert ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0);
+-  assert ((mutex->__data.__kind & PTHREAD_MUTEX_PSHARED_BIT) == 0);
++  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  int mutex_kind = atomic_load_relaxed (&(mutex->__data.__kind));
++  assert ((mutex_kind & PTHREAD_MUTEX_PRIO_INHERIT_NP) != 0);
++  assert ((mutex_kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0);
++  assert ((mutex_kind & PTHREAD_MUTEX_PSHARED_BIT) == 0);
+ 
+   /* Record the ownership.  */
+   pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+   mutex->__data.__owner = id;
+ 
+-  if (mutex->__data.__kind == PTHREAD_MUTEX_PI_RECURSIVE_NP)
++  if (mutex_kind == PTHREAD_MUTEX_PI_RECURSIVE_NP)
+     ++mutex->__data.__count;
+ }
+ #endif
+diff --git a/nptl/pthread_mutex_setprioceiling.c b/nptl/pthread_mutex_setprioceiling.c
+index 8594874f8588b7a8..8306cabcf4e56174 100644
+--- a/nptl/pthread_mutex_setprioceiling.c
++++ b/nptl/pthread_mutex_setprioceiling.c
+@@ -27,9 +27,10 @@ int
+ pthread_mutex_setprioceiling (pthread_mutex_t *mutex, int prioceiling,
+ 			      int *old_ceiling)
+ {
+-  /* The low bits of __kind aren't ever changed after pthread_mutex_init,
+-     so we don't need a lock yet.  */
+-  if ((mutex->__data.__kind & PTHREAD_MUTEX_PRIO_PROTECT_NP) == 0)
++  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++     in sysdeps/nptl/bits/thread-shared-types.h.  */
++  if ((atomic_load_relaxed (&(mutex->__data.__kind))
++       & PTHREAD_MUTEX_PRIO_PROTECT_NP) == 0)
+     return EINVAL;
+ 
+   /* See __init_sched_fifo_prio.  */
+diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
+index 28237b0e58cfcaf5..888c12fe28b2ebfd 100644
+--- a/nptl/pthread_mutex_timedlock.c
++++ b/nptl/pthread_mutex_timedlock.c
+@@ -53,6 +53,8 @@ __pthread_mutex_timedlock (pthread_mutex_t *mutex,
+   /* We must not check ABSTIME here.  If the thread does not block
+      abstime must not be checked for a valid value.  */
+ 
++  /* See concurrency notes regarding mutex type which is loaded from __kind
++     in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
+   switch (__builtin_expect (PTHREAD_MUTEX_TYPE_ELISION (mutex),
+ 			    PTHREAD_MUTEX_TIMED_NP))
+     {
+@@ -338,8 +340,14 @@ __pthread_mutex_timedlock (pthread_mutex_t *mutex,
+     case PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP:
+     case PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
+-	int robust = mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	int kind, robust;
++	{
++	  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	     in sysdeps/nptl/bits/thread-shared-types.h.  */
++	  int mutex_kind = atomic_load_relaxed (&(mutex->__data.__kind));
++	  kind = mutex_kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	  robust = mutex_kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	}
+ 
+ 	if (robust)
+ 	  {
+@@ -509,7 +517,10 @@ __pthread_mutex_timedlock (pthread_mutex_t *mutex,
+     case PTHREAD_MUTEX_PP_NORMAL_NP:
+     case PTHREAD_MUTEX_PP_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	/* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	   in sysdeps/nptl/bits/thread-shared-types.h.  */
++	int kind = atomic_load_relaxed (&(mutex->__data.__kind))
++	  & PTHREAD_MUTEX_KIND_MASK_NP;
+ 
+ 	oldval = mutex->__data.__lock;
+ 
+diff --git a/nptl/pthread_mutex_trylock.c b/nptl/pthread_mutex_trylock.c
+index 7de61f4f688c1537..fa90c1d1e6f5afc2 100644
+--- a/nptl/pthread_mutex_trylock.c
++++ b/nptl/pthread_mutex_trylock.c
+@@ -36,6 +36,8 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+   int oldval;
+   pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+ 
++  /* See concurrency notes regarding mutex type which is loaded from __kind
++     in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
+   switch (__builtin_expect (PTHREAD_MUTEX_TYPE_ELISION (mutex),
+ 			    PTHREAD_MUTEX_TIMED_NP))
+     {
+@@ -199,8 +201,14 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+     case PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP:
+     case PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
+-	int robust = mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	int kind, robust;
++	{
++	  /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	     in sysdeps/nptl/bits/thread-shared-types.h.  */
++	  int mutex_kind = atomic_load_relaxed (&(mutex->__data.__kind));
++	  kind = mutex_kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	  robust = mutex_kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++	}
+ 
+ 	if (robust)
+ 	  /* Note: robust PI futexes are signaled by setting bit 0.  */
+@@ -325,7 +333,10 @@ __pthread_mutex_trylock (pthread_mutex_t *mutex)
+     case PTHREAD_MUTEX_PP_NORMAL_NP:
+     case PTHREAD_MUTEX_PP_ADAPTIVE_NP:
+       {
+-	int kind = mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP;
++	/* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	   in sysdeps/nptl/bits/thread-shared-types.h.  */
++	int kind = atomic_load_relaxed (&(mutex->__data.__kind))
++	  & PTHREAD_MUTEX_KIND_MASK_NP;
+ 
+ 	oldval = mutex->__data.__lock;
+ 
+diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
+index 9ea62943b7c6b159..68d04d53955584e5 100644
+--- a/nptl/pthread_mutex_unlock.c
++++ b/nptl/pthread_mutex_unlock.c
+@@ -35,6 +35,8 @@ int
+ attribute_hidden
+ __pthread_mutex_unlock_usercnt (pthread_mutex_t *mutex, int decr)
+ {
++  /* See concurrency notes regarding mutex type which is loaded from __kind
++     in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h.  */
+   int type = PTHREAD_MUTEX_TYPE_ELISION (mutex);
+   if (__builtin_expect (type &
+ 		~(PTHREAD_MUTEX_KIND_MASK_NP|PTHREAD_MUTEX_ELISION_FLAGS_NP), 0))
+@@ -222,13 +224,19 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
+       /* If the previous owner died and the caller did not succeed in
+ 	 making the state consistent, mark the mutex as unrecoverable
+ 	 and make all waiters.  */
+-      if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) != 0
++      /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	 in sysdeps/nptl/bits/thread-shared-types.h.  */
++      if ((atomic_load_relaxed (&(mutex->__data.__kind))
++	   & PTHREAD_MUTEX_ROBUST_NORMAL_NP) != 0
+ 	  && __builtin_expect (mutex->__data.__owner
+ 			       == PTHREAD_MUTEX_INCONSISTENT, 0))
+       pi_notrecoverable:
+        newowner = PTHREAD_MUTEX_NOTRECOVERABLE;
+ 
+-      if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) != 0)
++      /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	 in sysdeps/nptl/bits/thread-shared-types.h.  */
++      if ((atomic_load_relaxed (&(mutex->__data.__kind))
++	   & PTHREAD_MUTEX_ROBUST_NORMAL_NP) != 0)
+ 	{
+ 	continue_pi_robust:
+ 	  /* Remove mutex from the list.
+@@ -251,7 +259,10 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
+       /* Unlock.  Load all necessary mutex data before releasing the mutex
+ 	 to not violate the mutex destruction requirements (see
+ 	 lll_unlock).  */
+-      int robust = mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP;
++      /* See concurrency notes regarding __kind in struct __pthread_mutex_s
++	 in sysdeps/nptl/bits/thread-shared-types.h.  */
++      int robust = atomic_load_relaxed (&(mutex->__data.__kind))
++	& PTHREAD_MUTEX_ROBUST_NORMAL_NP;
+       private = (robust
+ 		 ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
+ 		 : PTHREAD_MUTEX_PSHARED (mutex));
+diff --git a/nptl/tst-mutex10.c b/nptl/tst-mutex10.c
+new file mode 100644
+index 0000000000000000..e1113ca60a7c8db5
+--- /dev/null
++++ b/nptl/tst-mutex10.c
+@@ -0,0 +1,109 @@
++/* Testing race while enabling lock elision.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <pthread.h>
++#include <unistd.h>
++#include <getopt.h>
++#include <support/support.h>
++#include <support/xthread.h>
++
++static pthread_barrier_t barrier;
++static pthread_mutex_t mutex;
++static long long int iteration_count = 1000000;
++static unsigned int thread_count = 3;
++
++static void *
++thr_func (void *arg)
++{
++  long long int i;
++  for (i = 0; i < iteration_count; i++)
++    {
++      if ((uintptr_t) arg == 0)
++	{
++	  xpthread_mutex_destroy (&mutex);
++	  xpthread_mutex_init (&mutex, NULL);
++	}
++
++      xpthread_barrier_wait (&barrier);
++
++      /* Test if enabling lock elision works if it is enabled concurrently.
++	 There was a race in FORCE_ELISION macro which leads to either
++	 pthread_mutex_destroy returning EBUSY as the owner was recorded
++	 by pthread_mutex_lock - in "normal mutex" code path - but was not
++	 resetted in pthread_mutex_unlock - in "elision" code path.
++	 Or it leads to the assertion in nptl/pthread_mutex_lock.c:
++	 assert (mutex->__data.__owner == 0);
++	 Please ensure that the test is run with lock elision:
++	 export GLIBC_TUNABLES=glibc.elision.enable=1  */
++      xpthread_mutex_lock (&mutex);
++      xpthread_mutex_unlock (&mutex);
++
++      xpthread_barrier_wait (&barrier);
++    }
++  return NULL;
++}
++
++static int
++do_test (void)
++{
++  unsigned int i;
++  printf ("Starting %d threads to run %lld iterations.\n",
++	  thread_count, iteration_count);
++
++  pthread_t *threads = xmalloc (thread_count * sizeof (pthread_t));
++  xpthread_barrier_init (&barrier, NULL, thread_count);
++  xpthread_mutex_init (&mutex, NULL);
++
++  for (i = 0; i < thread_count; i++)
++    threads[i] = xpthread_create (NULL, thr_func, (void *) (uintptr_t) i);
++
++  for (i = 0; i < thread_count; i++)
++    xpthread_join (threads[i]);
++
++  xpthread_barrier_destroy (&barrier);
++  free (threads);
++
++  return EXIT_SUCCESS;
++}
++
++#define OPT_ITERATIONS	10000
++#define OPT_THREADS	10001
++#define CMDLINE_OPTIONS						\
++  { "iterations", required_argument, NULL, OPT_ITERATIONS },	\
++  { "threads", required_argument, NULL, OPT_THREADS },
++static void
++cmdline_process (int c)
++{
++  long long int arg = strtoll (optarg, NULL, 0);
++  switch (c)
++    {
++    case OPT_ITERATIONS:
++      if (arg > 0)
++	iteration_count = arg;
++      break;
++    case OPT_THREADS:
++      if (arg > 0 && arg < 100)
++	thread_count = arg;
++      break;
++    }
++}
++#define CMDLINE_PROCESS cmdline_process
++#define TIMEOUT 50
++#include <support/test-driver.c>
+diff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h
+index 1e2092a05d5610f7..05c94e7a710c0eb9 100644
+--- a/sysdeps/nptl/bits/thread-shared-types.h
++++ b/sysdeps/nptl/bits/thread-shared-types.h
+@@ -124,7 +124,27 @@ struct __pthread_mutex_s
+   unsigned int __nusers;
+ #endif
+   /* KIND must stay at this position in the structure to maintain
+-     binary compatibility with static initializers.  */
++     binary compatibility with static initializers.
++
++     Concurrency notes:
++     The __kind of a mutex is initialized either by the static
++     PTHREAD_MUTEX_INITIALIZER or by a call to pthread_mutex_init.
++
++     After a mutex has been initialized, the __kind of a mutex is usually not
++     changed.  BUT it can be set to -1 in pthread_mutex_destroy or elision can
++     be enabled.  This is done concurrently in the pthread_mutex_*lock functions
++     by using the macro FORCE_ELISION. This macro is only defined for
++     architectures which supports lock elision.
++
++     For elision, there are the flags PTHREAD_MUTEX_ELISION_NP and
++     PTHREAD_MUTEX_NO_ELISION_NP which can be set in addition to the already set
++     type of a mutex.
++     Before a mutex is initialized, only PTHREAD_MUTEX_NO_ELISION_NP can be set
++     with pthread_mutexattr_settype.
++     After a mutex has been initialized, the functions pthread_mutex_*lock can
++     enable elision - if the mutex-type and the machine supports it - by setting
++     the flag PTHREAD_MUTEX_ELISION_NP. This is done concurrently. Afterwards
++     the lock / unlock functions are using specific elision code-paths.  */
+   int __kind;
+   __PTHREAD_COMPAT_PADDING_MID
+ #if __PTHREAD_MUTEX_NUSERS_AFTER_KIND
+diff --git a/sysdeps/unix/sysv/linux/powerpc/force-elision.h b/sysdeps/unix/sysv/linux/powerpc/force-elision.h
+index fe5d6ceade2bad36..d8f5a4b1c7713bd4 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/force-elision.h
++++ b/sysdeps/unix/sysv/linux/powerpc/force-elision.h
+@@ -18,9 +18,45 @@
+ 
+ /* Automatically enable elision for existing user lock kinds.  */
+ #define FORCE_ELISION(m, s)						\
+-  if (__pthread_force_elision						\
+-      && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)	\
++  if (__pthread_force_elision)						\
+     {									\
+-      mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP;			\
+-      s;								\
++      /* See concurrency notes regarding __kind in			\
++	 struct __pthread_mutex_s in					\
++	 sysdeps/nptl/bits/thread-shared-types.h.			\
++									\
++	 There are the following cases for the kind of a mutex		\
++	 (The mask PTHREAD_MUTEX_ELISION_FLAGS_NP covers the flags	\
++	 PTHREAD_MUTEX_ELISION_NP and PTHREAD_MUTEX_NO_ELISION_NP where	\
++	 only one of both flags can be set):				\
++	 - both flags are not set:					\
++	 This is the first lock operation for this mutex.  Enable	\
++	 elision as it is not enabled so far.				\
++	 Note: It can happen that multiple threads are calling e.g.	\
++	 pthread_mutex_lock at the same time as the first lock		\
++	 operation for this mutex.  Then elision is enabled for this	\
++	 mutex by multiple threads.  Storing with relaxed MO is enough	\
++	 as all threads will store the same new value for the kind of	\
++	 the mutex.  But we have to ensure that we always use the	\
++	 elision path regardless if this thread has enabled elision or	\
++	 another one.							\
++									\
++	 - PTHREAD_MUTEX_ELISION_NP flag is set:			\
++	 Elision was already enabled for this mutex by a previous lock	\
++	 operation.  See case above.  Just use the elision path.	\
++									\
++	 - PTHREAD_MUTEX_NO_ELISION_NP flag is set:			\
++	 Elision was explicitly disabled by pthread_mutexattr_settype.	\
++	 Do not use the elision path.					\
++	 Note: The flag PTHREAD_MUTEX_NO_ELISION_NP will never be	\
++	 changed after mutex initialization.  */			\
++      int mutex_kind = atomic_load_relaxed (&((m)->__data.__kind));	\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)		\
++	{								\
++	  mutex_kind |= PTHREAD_MUTEX_ELISION_NP;			\
++	  atomic_store_relaxed (&((m)->__data.__kind), mutex_kind);	\
++	}								\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_NP) != 0)			\
++	{								\
++	  s;								\
++	}								\
+     }
+diff --git a/sysdeps/unix/sysv/linux/s390/force-elision.h b/sysdeps/unix/sysv/linux/s390/force-elision.h
+index d8a1b9972f739cfe..71f32367dd6b6489 100644
+--- a/sysdeps/unix/sysv/linux/s390/force-elision.h
++++ b/sysdeps/unix/sysv/linux/s390/force-elision.h
+@@ -18,9 +18,45 @@
+ 
+ /* Automatically enable elision for existing user lock kinds.  */
+ #define FORCE_ELISION(m, s)						\
+-  if (__pthread_force_elision						\
+-      && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)	\
++  if (__pthread_force_elision)						\
+     {									\
+-      mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP;			\
+-      s;								\
++      /* See concurrency notes regarding __kind in			\
++	 struct __pthread_mutex_s in					\
++	 sysdeps/nptl/bits/thread-shared-types.h.			\
++									\
++	 There are the following cases for the kind of a mutex		\
++	 (The mask PTHREAD_MUTEX_ELISION_FLAGS_NP covers the flags	\
++	 PTHREAD_MUTEX_ELISION_NP and PTHREAD_MUTEX_NO_ELISION_NP where	\
++	 only one of both flags can be set):				\
++	 - both flags are not set:					\
++	 This is the first lock operation for this mutex.  Enable	\
++	 elision as it is not enabled so far.				\
++	 Note: It can happen that multiple threads are calling e.g.	\
++	 pthread_mutex_lock at the same time as the first lock		\
++	 operation for this mutex.  Then elision is enabled for this	\
++	 mutex by multiple threads.  Storing with relaxed MO is enough	\
++	 as all threads will store the same new value for the kind of	\
++	 the mutex.  But we have to ensure that we always use the	\
++	 elision path regardless if this thread has enabled elision or	\
++	 another one.							\
++									\
++	 - PTHREAD_MUTEX_ELISION_NP flag is set:			\
++	 Elision was already enabled for this mutex by a previous lock	\
++	 operation.  See case above.  Just use the elision path.	\
++									\
++	 - PTHREAD_MUTEX_NO_ELISION_NP flag is set:			\
++	 Elision was explicitly disabled by pthread_mutexattr_settype.	\
++	 Do not use the elision path.					\
++	 Note: The flag PTHREAD_MUTEX_NO_ELISION_NP will never be	\
++	 changed after mutex initialization.  */			\
++      int mutex_kind = atomic_load_relaxed (&((m)->__data.__kind));	\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)		\
++	{								\
++	  mutex_kind |= PTHREAD_MUTEX_ELISION_NP;			\
++	  atomic_store_relaxed (&((m)->__data.__kind), mutex_kind);	\
++	}								\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_NP) != 0)			\
++	{								\
++	  s;								\
++	}								\
+     }
+diff --git a/sysdeps/unix/sysv/linux/x86/force-elision.h b/sysdeps/unix/sysv/linux/x86/force-elision.h
+index dd659c908f3046c1..61282d6678d89787 100644
+--- a/sysdeps/unix/sysv/linux/x86/force-elision.h
++++ b/sysdeps/unix/sysv/linux/x86/force-elision.h
+@@ -18,9 +18,45 @@
+ 
+ /* Automatically enable elision for existing user lock kinds.  */
+ #define FORCE_ELISION(m, s)						\
+-  if (__pthread_force_elision						\
+-      && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)	\
++  if (__pthread_force_elision)						\
+     {									\
+-      mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP;			\
+-      s;								\
++      /* See concurrency notes regarding __kind in			\
++	 struct __pthread_mutex_s in					\
++	 sysdeps/nptl/bits/thread-shared-types.h.			\
++									\
++	 There are the following cases for the kind of a mutex		\
++	 (The mask PTHREAD_MUTEX_ELISION_FLAGS_NP covers the flags	\
++	 PTHREAD_MUTEX_ELISION_NP and PTHREAD_MUTEX_NO_ELISION_NP where	\
++	 only one of both flags can be set):				\
++	 - both flags are not set:					\
++	 This is the first lock operation for this mutex.  Enable	\
++	 elision as it is not enabled so far.				\
++	 Note: It can happen that multiple threads are calling e.g.	\
++	 pthread_mutex_lock at the same time as the first lock		\
++	 operation for this mutex.  Then elision is enabled for this	\
++	 mutex by multiple threads.  Storing with relaxed MO is enough	\
++	 as all threads will store the same new value for the kind of	\
++	 the mutex.  But we have to ensure that we always use the	\
++	 elision path regardless if this thread has enabled elision or	\
++	 another one.							\
++									\
++	 - PTHREAD_MUTEX_ELISION_NP flag is set:			\
++	 Elision was already enabled for this mutex by a previous lock	\
++	 operation.  See case above.  Just use the elision path.	\
++									\
++	 - PTHREAD_MUTEX_NO_ELISION_NP flag is set:			\
++	 Elision was explicitly disabled by pthread_mutexattr_settype.	\
++	 Do not use the elision path.					\
++	 Note: The flag PTHREAD_MUTEX_NO_ELISION_NP will never be	\
++	 changed after mutex initialization.  */			\
++      int mutex_kind = atomic_load_relaxed (&((m)->__data.__kind));	\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)		\
++	{								\
++	  mutex_kind |= PTHREAD_MUTEX_ELISION_NP;			\
++	  atomic_store_relaxed (&((m)->__data.__kind), mutex_kind);	\
++	}								\
++      if ((mutex_kind & PTHREAD_MUTEX_ELISION_NP) != 0)			\
++	{								\
++	  s;								\
++	}								\
+     }
diff --git a/SOURCES/glibc-rh1646379.patch b/SOURCES/glibc-rh1646379.patch
new file mode 100644
index 0000000..bc8865a
--- /dev/null
+++ b/SOURCES/glibc-rh1646379.patch
@@ -0,0 +1,24 @@
+commit bd3b0fbae33a9a4cc5e2daf049443d5cf03d4251
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon Nov 5 12:47:30 2018 +0100
+
+    libanl: properly cleanup if first helper thread creation failed (bug 22927)
+
+diff --git a/resolv/gai_misc.c b/resolv/gai_misc.c
+index e7c3b63cc5725b4f..80a2cff8353fcb6c 100644
+--- a/resolv/gai_misc.c
++++ b/resolv/gai_misc.c
+@@ -261,8 +261,11 @@ __gai_enqueue_request (struct gaicb *gaicbp)
+ 	      /* We cannot create a thread in the moment and there is
+ 		 also no thread running.  This is a problem.  `errno' is
+ 		 set to EAGAIN if this is only a temporary problem.  */
+-	      assert (lastp->next == newp);
+-	      lastp->next = NULL;
++	      assert (requests == newp || lastp->next == newp);
++	      if (lastp != NULL)
++		lastp->next = NULL;
++	      else
++		requests = NULL;
+ 	      requests_tail = lastp;
+ 
+ 	      newp->next = freelist;
diff --git a/SOURCES/glibc-rh1650560-1.patch b/SOURCES/glibc-rh1650560-1.patch
new file mode 100644
index 0000000..f6724c2
--- /dev/null
+++ b/SOURCES/glibc-rh1650560-1.patch
@@ -0,0 +1,48 @@
+commit 17b26500f9bb926d85e86821d014f7c1bb88043c
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Mon Aug 13 21:35:27 2018 +0000
+
+    Update syscall-names.list for Linux 4.18.
+    
+    This patch updates sysdeps/unix/sysv/linux/syscall-names.list for
+    Linux 4.18.  The io_pgetevents and rseq syscalls are added to the
+    kernel on various architectures, so need to be mentioned in this file.
+    
+    Tested with build-many-glibcs.py.
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
+            version to 4.18.
+            (io_pgetevents): New syscall.
+            (rseq): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 5306d538e6448163..9982a6334d46ae62 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -22,8 +22,8 @@
+ # names are only used if the installed kernel headers also provide
+ # them.
+ 
+-# The list of system calls is current as of Linux 4.17.
+-kernel 4.17
++# The list of system calls is current as of Linux 4.18.
++kernel 4.18
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
+@@ -186,6 +186,7 @@ inotify_rm_watch
+ io_cancel
+ io_destroy
+ io_getevents
++io_pgetevents
+ io_setup
+ io_submit
+ ioctl
+@@ -431,6 +432,7 @@ renameat2
+ request_key
+ restart_syscall
+ rmdir
++rseq
+ rt_sigaction
+ rt_sigpending
+ rt_sigprocmask
diff --git a/SOURCES/glibc-rh1650560-2.patch b/SOURCES/glibc-rh1650560-2.patch
new file mode 100644
index 0000000..1fe8f3b
--- /dev/null
+++ b/SOURCES/glibc-rh1650560-2.patch
@@ -0,0 +1,30 @@
+commit 029ad711b8ad4cf0e5d98e0c138a35a23a376a74
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Mon Oct 22 23:26:37 2018 +0000
+
+    Update kernel version in syscall-names.list to 4.19.
+    
+    Linux 4.19 does not add any new syscalls (some existing ones are added
+    to more architectures); this patch updates the version number in
+    syscall-names.list to reflect that it's still current for 4.19.
+    
+    Tested with build-many-glibcs.py.
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
+            version to 4.19.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 9982a6334d46ae62..f88001c9c38d5fc7 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -22,8 +22,8 @@
+ # names are only used if the installed kernel headers also provide
+ # them.
+ 
+-# The list of system calls is current as of Linux 4.18.
+-kernel 4.18
++# The list of system calls is current as of Linux 4.19.
++kernel 4.19
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
diff --git a/SOURCES/glibc-rh1650563.patch b/SOURCES/glibc-rh1650563.patch
new file mode 100644
index 0000000..020bddf
--- /dev/null
+++ b/SOURCES/glibc-rh1650563.patch
@@ -0,0 +1,127 @@
+commit 745664bd798ec8fd50438605948eea594179fba1
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Aug 28 13:19:27 2018 +0200
+
+    nscd: Fix use-after-free in addgetnetgrentX [BZ #23520]
+    
+    addinnetgrX may use the heap-allocated buffer, so free the buffer
+    in this function.
+
+diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
+index 2b35389cc816c3c8..87059fb28042f0a5 100644
+--- a/nscd/netgroupcache.c
++++ b/nscd/netgroupcache.c
+@@ -113,7 +113,8 @@ do_notfound (struct database_dyn *db, int fd, request_header *req,
+ static time_t
+ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 		 const char *key, uid_t uid, struct hashentry *he,
+-		 struct datahead *dh, struct dataset **resultp)
++		 struct datahead *dh, struct dataset **resultp,
++		 void **tofreep)
+ {
+   if (__glibc_unlikely (debug_level > 0))
+     {
+@@ -139,6 +140,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+   size_t group_len = strlen (key) + 1;
+   struct name_list *first_needed
+     = alloca (sizeof (struct name_list) + group_len);
++  *tofreep = NULL;
+ 
+   if (netgroup_database == NULL
+       && __nss_database_lookup ("netgroup", NULL, NULL, &netgroup_database))
+@@ -151,6 +153,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 
+   memset (&data, '\0', sizeof (data));
+   buffer = xmalloc (buflen);
++  *tofreep = buffer;
+   first_needed->next = first_needed;
+   memcpy (first_needed->name, key, group_len);
+   data.needed_groups = first_needed;
+@@ -439,8 +442,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+     }
+ 
+  out:
+-  free (buffer);
+-
+   *resultp = dataset;
+ 
+   return timeout;
+@@ -477,8 +478,12 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+ 							    group, group_len,
+ 							    db, uid);
+   time_t timeout;
++  void *tofree;
+   if (result != NULL)
+-    timeout = result->head.timeout;
++    {
++      timeout = result->head.timeout;
++      tofree = NULL;
++    }
+   else
+     {
+       request_header req_get =
+@@ -487,7 +492,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+ 	  .key_len = group_len
+ 	};
+       timeout = addgetnetgrentX (db, -1, &req_get, group, uid, NULL, NULL,
+-				 &result);
++				 &result, &tofree);
+     }
+ 
+   struct indataset
+@@ -560,7 +565,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+       ++dh->nreloads;
+       if (cacheable)
+         pthread_rwlock_unlock (&db->lock);
+-      return timeout;
++      goto out;
+     }
+ 
+   if (he == NULL)
+@@ -596,17 +601,30 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+ 	dh->usable = false;
+     }
+ 
++ out:
++  free (tofree);
+   return timeout;
+ }
+ 
+ 
++static time_t
++addgetnetgrentX_ignore (struct database_dyn *db, int fd, request_header *req,
++			const char *key, uid_t uid, struct hashentry *he,
++			struct datahead *dh)
++{
++  struct dataset *ignore;
++  void *tofree;
++  time_t timeout = addgetnetgrentX (db, fd, req, key, uid, he, dh,
++				    &ignore, &tofree);
++  free (tofree);
++  return timeout;
++}
++
+ void
+ addgetnetgrent (struct database_dyn *db, int fd, request_header *req,
+ 		void *key, uid_t uid)
+ {
+-  struct dataset *ignore;
+-
+-  addgetnetgrentX (db, fd, req, key, uid, NULL, NULL, &ignore);
++  addgetnetgrentX_ignore (db, fd, req, key, uid, NULL, NULL);
+ }
+ 
+ 
+@@ -619,10 +637,8 @@ readdgetnetgrent (struct database_dyn *db, struct hashentry *he,
+       .type = GETNETGRENT,
+       .key_len = he->len
+     };
+-  struct dataset *ignore;
+-
+-  return addgetnetgrentX (db, -1, &req, db->data + he->key, he->owner, he, dh,
+-			  &ignore);
++  return addgetnetgrentX_ignore
++    (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
diff --git a/SOURCES/glibc-rh1650566.patch b/SOURCES/glibc-rh1650566.patch
new file mode 100644
index 0000000..4aef679
--- /dev/null
+++ b/SOURCES/glibc-rh1650566.patch
@@ -0,0 +1,234 @@
+commit a6e8926f8d49a213a9abb1a61f6af964f612ab7f
+Author: Paul Pluzhnikov <ppluzhnikov@google.com>
+Date:   Fri Aug 31 18:04:32 2018 -0700
+
+    [BZ #20271] Add newlines in __libc_fatal calls.
+
+diff --git a/grp/initgroups.c b/grp/initgroups.c
+index f056fbf5aa6aa14c..93e7f5814da6286d 100644
+--- a/grp/initgroups.c
++++ b/grp/initgroups.c
+@@ -128,7 +128,7 @@ internal_getgrouplist (const char *user, gid_t group, long int *size,
+ 
+       /* This is really only for debugging.  */
+       if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
+-	__libc_fatal ("illegal status in internal_getgrouplist");
++	__libc_fatal ("Illegal status in internal_getgrouplist.\n");
+ 
+       /* For compatibility reason we will continue to look for more
+ 	 entries using the next service even though data has already
+diff --git a/include/stdio.h b/include/stdio.h
+index 9162d4e24717e31a..7a5c09089fc4d348 100644
+--- a/include/stdio.h
++++ b/include/stdio.h
+@@ -98,7 +98,8 @@ enum __libc_message_action
+   do_backtrace	= 1 << 1	/* Backtrace.  */
+ };
+ 
+-/* Print out MESSAGE on the error output and abort.  */
++/* Print out MESSAGE (which should end with a newline) on the error output
++   and abort.  */
+ extern void __libc_fatal (const char *__message)
+      __attribute__ ((__noreturn__));
+ extern void __libc_message (enum __libc_message_action action,
+diff --git a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c
+index 3e1105418210288e..ebf07ca82d87de7d 100644
+--- a/nptl/pthread_cond_wait.c
++++ b/nptl/pthread_cond_wait.c
+@@ -516,7 +516,7 @@ __pthread_cond_wait_common (pthread_cond_t *cond, pthread_mutex_t *mutex,
+ 		  struct timespec rt;
+ 		  if (__clock_gettime (CLOCK_MONOTONIC, &rt) != 0)
+ 		    __libc_fatal ("clock_gettime does not support "
+-				  "CLOCK_MONOTONIC");
++				  "CLOCK_MONOTONIC\n");
+ 		  /* Convert the absolute timeout value to a relative
+ 		     timeout.  */
+ 		  rt.tv_sec = abstime->tv_sec - rt.tv_sec;
+diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c
+index 2c74951f579f4afd..4764f14a45f68e0a 100644
+--- a/nscd/initgrcache.c
++++ b/nscd/initgrcache.c
+@@ -159,7 +159,7 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
+ 
+       /* This is really only for debugging.  */
+       if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
+-	__libc_fatal ("illegal status in internal_getgrouplist");
++	__libc_fatal ("Illegal status in internal_getgrouplist.\n");
+ 
+       any_success |= status == NSS_STATUS_SUCCESS;
+ 
+diff --git a/nss/nsswitch.c b/nss/nsswitch.c
+index ee46f24424bc1ca2..3c48b4b85e881cdb 100644
+--- a/nss/nsswitch.c
++++ b/nss/nsswitch.c
+@@ -235,7 +235,7 @@ __nss_next2 (service_user **ni, const char *fct_name, const char *fct2_name,
+       /* This is really only for debugging.  */
+       if (__builtin_expect (NSS_STATUS_TRYAGAIN > status
+ 			    || status > NSS_STATUS_RETURN, 0))
+-	 __libc_fatal ("illegal status in __nss_next");
++	 __libc_fatal ("Illegal status in __nss_next.\n");
+ 
+        if (nss_next_action (*ni, status) == NSS_ACTION_RETURN)
+ 	 return 1;
+diff --git a/sysdeps/aarch64/dl-irel.h b/sysdeps/aarch64/dl-irel.h
+index 5889ee187b7a1eaf..bef71ed0f31a6387 100644
+--- a/sysdeps/aarch64/dl-irel.h
++++ b/sysdeps/aarch64/dl-irel.h
+@@ -47,7 +47,7 @@ elf_irela (const ElfW(Rela) *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif
+diff --git a/sysdeps/arm/dl-irel.h b/sysdeps/arm/dl-irel.h
+index a7b6456075659baf..be6eb7743eb5f08d 100644
+--- a/sysdeps/arm/dl-irel.h
++++ b/sysdeps/arm/dl-irel.h
+@@ -46,7 +46,7 @@ elf_irel (const Elf32_Rel *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c
+index 082609b34a3f773b..724c16a7f0bf465b 100644
+--- a/sysdeps/generic/unwind-dw2.c
++++ b/sysdeps/generic/unwind-dw2.c
+@@ -843,7 +843,7 @@ execute_cfa_program (const unsigned char *insn_ptr,
+ 	    struct frame_state_reg_info *old_rs = fs->regs.prev;
+ #ifdef _LIBC
+ 	    if (old_rs == NULL)
+-	      __libc_fatal ("invalid DWARF unwind data");
++	      __libc_fatal ("Invalid DWARF unwind data.\n");
+ 	    else
+ #endif
+ 	      {
+diff --git a/sysdeps/i386/dl-irel.h b/sysdeps/i386/dl-irel.h
+index 55303180c7aca495..bcaf0668acf8e2f2 100644
+--- a/sysdeps/i386/dl-irel.h
++++ b/sysdeps/i386/dl-irel.h
+@@ -45,7 +45,7 @@ elf_irel (const Elf32_Rel *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/nptl/futex-internal.h b/sysdeps/nptl/futex-internal.h
+index 1a5624789d4ab117..6fd27f0df6c27b69 100644
+--- a/sysdeps/nptl/futex-internal.h
++++ b/sysdeps/nptl/futex-internal.h
+@@ -197,7 +197,7 @@ futex_wake (unsigned int* futex_word, int processes_to_wake, int private);
+ static __always_inline __attribute__ ((__noreturn__)) void
+ futex_fatal_error (void)
+ {
+-  __libc_fatal ("The futex facility returned an unexpected error code.");
++  __libc_fatal ("The futex facility returned an unexpected error code.\n");
+ }
+ 
+ #endif  /* futex-internal.h */
+diff --git a/sysdeps/powerpc/powerpc32/dl-irel.h b/sysdeps/powerpc/powerpc32/dl-irel.h
+index a7368b25829618cb..61d0e4cf61ec45d3 100644
+--- a/sysdeps/powerpc/powerpc32/dl-irel.h
++++ b/sysdeps/powerpc/powerpc32/dl-irel.h
+@@ -46,7 +46,7 @@ elf_irela (const Elf32_Rela *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/powerpc/powerpc64/dl-irel.h b/sysdeps/powerpc/powerpc64/dl-irel.h
+index ab13c04358868270..2fd0ee8a86e85ba0 100644
+--- a/sysdeps/powerpc/powerpc64/dl-irel.h
++++ b/sysdeps/powerpc/powerpc64/dl-irel.h
+@@ -57,7 +57,7 @@ elf_irela (const Elf64_Rela *reloc)
+ #endif
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/s390/dl-irel.h b/sysdeps/s390/dl-irel.h
+index d8ba7ba42709f45c..ecb24f0a9be0daa7 100644
+--- a/sysdeps/s390/dl-irel.h
++++ b/sysdeps/s390/dl-irel.h
+@@ -46,7 +46,7 @@ elf_irela (const ElfW(Rela) *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/sparc/sparc32/dl-irel.h b/sysdeps/sparc/sparc32/dl-irel.h
+index ffca36864f24d1fb..cf47cda8345b1a39 100644
+--- a/sysdeps/sparc/sparc32/dl-irel.h
++++ b/sysdeps/sparc/sparc32/dl-irel.h
+@@ -56,7 +56,7 @@ elf_irela (const Elf32_Rela *reloc)
+   else if (r_type == R_SPARC_NONE)
+     ;
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/sparc/sparc64/dl-irel.h b/sysdeps/sparc/sparc64/dl-irel.h
+index c5cd3057aca1baf6..446fed18365cfd13 100644
+--- a/sysdeps/sparc/sparc64/dl-irel.h
++++ b/sysdeps/sparc/sparc64/dl-irel.h
+@@ -59,7 +59,7 @@ elf_irela (const Elf64_Rela *reloc)
+   else if (r_type == R_SPARC_NONE)
+     ;
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
+diff --git a/sysdeps/unix/sysv/linux/netlink_assert_response.c b/sysdeps/unix/sysv/linux/netlink_assert_response.c
+index f31ccb52ffa56436..6afc3a17ced18e1c 100644
+--- a/sysdeps/unix/sysv/linux/netlink_assert_response.c
++++ b/sysdeps/unix/sysv/linux/netlink_assert_response.c
+@@ -72,12 +72,12 @@ __netlink_assert_response (int fd, ssize_t result)
+           char message[200];
+           if (family < 0)
+             __snprintf (message, sizeof (message),
+-                        "Unexpected error %d on netlink descriptor %d",
++                        "Unexpected error %d on netlink descriptor %d.\n",
+                         error_code, fd);
+           else
+             __snprintf (message, sizeof (message),
+                         "Unexpected error %d on netlink descriptor %d"
+-                        " (address family %d)",
++                        " (address family %d).\n",
+                         error_code, fd, family);
+           __libc_fatal (message);
+         }
+diff --git a/sysdeps/x86_64/dl-irel.h b/sysdeps/x86_64/dl-irel.h
+index 6ecc50fb42333c19..33f100d8b1781ea7 100644
+--- a/sysdeps/x86_64/dl-irel.h
++++ b/sysdeps/x86_64/dl-irel.h
+@@ -45,7 +45,7 @@ elf_irela (const ElfW(Rela) *reloc)
+       *reloc_addr = value;
+     }
+   else
+-    __libc_fatal ("unexpected reloc type in static binary");
++    __libc_fatal ("Unexpected reloc type in static binary.\n");
+ }
+ 
+ #endif /* dl-irel.h */
diff --git a/SOURCES/glibc-rh1650571.patch b/SOURCES/glibc-rh1650571.patch
new file mode 100644
index 0000000..927e0dc
--- /dev/null
+++ b/SOURCES/glibc-rh1650571.patch
@@ -0,0 +1,24 @@
+commit e4e4fde51a309801af5eed72d3494cbf4b7737aa
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date:   Tue Sep 18 15:02:10 2018 -0700
+
+    Fix tzfile low-memory assertion failure
+    
+    [BZ #21716]
+    * time/tzfile.c (__tzfile_read): Check for memory exhaustion
+    when registering time zone abbreviations.
+
+diff --git a/time/tzfile.c b/time/tzfile.c
+index 2a385b92bcdefec0..ea6e94030392fc75 100644
+--- a/time/tzfile.c
++++ b/time/tzfile.c
+@@ -410,7 +410,8 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+ 
+   /* First "register" all timezone names.  */
+   for (i = 0; i < num_types; ++i)
+-    (void) __tzstring (&zone_names[types[i].idx]);
++    if (__tzstring (&zone_names[types[i].idx]) == NULL)
++      goto ret_free_transitions;
+ 
+   /* Find the standard and daylight time offsets used by the rule file.
+      We choose the offsets in the types of each flavor that are
diff --git a/SOURCES/glibc-rh1651274.patch b/SOURCES/glibc-rh1651274.patch
new file mode 100644
index 0000000..d65cb0a
--- /dev/null
+++ b/SOURCES/glibc-rh1651274.patch
@@ -0,0 +1,70 @@
+commit 35e3fbc4512c880fccb35b8e3abd132d4be18480
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Nov 19 15:35:03 2018 +0100
+
+    support: Print timestamps in timeout handler
+    
+    This is sometimes useful to determine if a test truly got stuck, or if
+    it was making progress (logging information to standard output) and
+    was merely slow to finish.
+
+diff --git a/support/support_test_main.c b/support/support_test_main.c
+index 23429779aca85613..fa3c2e06dee5ae0f 100644
+--- a/support/support_test_main.c
++++ b/support/support_test_main.c
+@@ -30,6 +30,7 @@
+ #include <string.h>
+ #include <sys/param.h>
+ #include <sys/resource.h>
++#include <sys/time.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <time.h>
+@@ -86,6 +87,19 @@ static pid_t test_pid;
+ /* The cleanup handler passed to test_main.  */
+ static void (*cleanup_function) (void);
+ 
++static void
++print_timestamp (const char *what, struct timeval tv)
++{
++  struct tm tm;
++  if (gmtime_r (&tv.tv_sec, &tm) == NULL)
++    printf ("%s: %lld.%06d\n",
++            what, (long long int) tv.tv_sec, (int) tv.tv_usec);
++  else
++    printf ("%s: %04d-%02d-%02dT%02d:%02d:%02d.%06d\n",
++            what, 1900 + tm.tm_year, tm.tm_mon + 1, tm.tm_mday,
++            tm.tm_hour, tm.tm_min, tm.tm_sec, (int) tv.tv_usec);
++}
++
+ /* Timeout handler.  We kill the child and exit with an error.  */
+ static void
+ __attribute__ ((noreturn))
+@@ -94,6 +108,13 @@ signal_handler (int sig)
+   int killed;
+   int status;
+ 
++  /* Do this first to avoid further interference from the
++     subprocess.  */
++  struct timeval now;
++  bool now_available = gettimeofday (&now, NULL) == 0;
++  struct stat64 st;
++  bool st_available = fstat64 (STDOUT_FILENO, &st) == 0 && st.st_mtime != 0;
++
+   assert (test_pid > 1);
+   /* Kill the whole process group.  */
+   kill (-test_pid, SIGKILL);
+@@ -144,6 +165,13 @@ signal_handler (int sig)
+     printf ("Timed out: killed the child process but it exited %d\n",
+             WEXITSTATUS (status));
+ 
++  if (now_available)
++    print_timestamp ("Termination time", now);
++  if (st_available)
++    print_timestamp ("Last write to standard output",
++                     (struct timeval) { st.st_mtim.tv_sec,
++                         st.st_mtim.tv_nsec / 1000 });
++
+   /* Exit with an error.  */
+   exit (1);
+ }
diff --git a/SOURCES/glibc-rh1654010-1.patch b/SOURCES/glibc-rh1654010-1.patch
new file mode 100644
index 0000000..b32ce03
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-1.patch
@@ -0,0 +1,35 @@
+commit d527c860f5a3f0ed687bd03f0cb464612dc23408
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Nov 27 16:12:43 2018 +0100
+
+    CVE-2018-19591: if_nametoindex: Fix descriptor for overlong name [BZ #23927]
+
+diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
+index e3d08982d9931108..782fc5e1750e9ead 100644
+--- a/sysdeps/unix/sysv/linux/if_index.c
++++ b/sysdeps/unix/sysv/linux/if_index.c
+@@ -38,11 +38,6 @@ __if_nametoindex (const char *ifname)
+   return 0;
+ #else
+   struct ifreq ifr;
+-  int fd = __opensock ();
+-
+-  if (fd < 0)
+-    return 0;
+-
+   if (strlen (ifname) >= IFNAMSIZ)
+     {
+       __set_errno (ENODEV);
+@@ -50,6 +45,12 @@ __if_nametoindex (const char *ifname)
+     }
+ 
+   strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
++
++  int fd = __opensock ();
++
++  if (fd < 0)
++    return 0;
++
+   if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0)
+     {
+       int saved_errno = errno;
diff --git a/SOURCES/glibc-rh1654010-2.patch b/SOURCES/glibc-rh1654010-2.patch
new file mode 100644
index 0000000..5e8faa2
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-2.patch
@@ -0,0 +1,142 @@
+commit c74a91deaa5de416237c02bbb3e41bda76ca4c7b
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Nov 27 21:35:56 2018 +0100
+
+    support: Implement support_quote_string
+    
+    Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
+
+diff --git a/support/Makefile b/support/Makefile
+index 2b663fbbfa334ea2..a2536980d1d5a89b 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -58,6 +58,7 @@ libsupport-routines = \
+   support_openpty \
+   support_paths \
+   support_quote_blob \
++  support_quote_string \
+   support_record_failure \
+   support_run_diff \
+   support_shared_allocate \
+@@ -196,6 +197,7 @@ tests = \
+   tst-support_capture_subprocess \
+   tst-support_format_dns_packet \
+   tst-support_quote_blob \
++  tst-support_quote_string \
+   tst-support_record_failure \
+   tst-test_compare \
+   tst-test_compare_blob \
+diff --git a/support/support.h b/support/support.h
+index 9418cd11ef6e684d..835e7173eb566355 100644
+--- a/support/support.h
++++ b/support/support.h
+@@ -69,6 +69,11 @@ void support_write_file_string (const char *path, const char *contents);
+    the result).  */
+ char *support_quote_blob (const void *blob, size_t length);
+ 
++/* Quote the contents of the at STR, in such a way that the result
++   string can be included in a C literal (in single/double quotes,
++   without putting the quotes into the result).  */
++char *support_quote_string (const char *str);
++
+ /* Returns non-zero if the file descriptor is a regular file on a file
+    system which supports holes (that is, seeking and writing does not
+    allocate storage for the range of zeros).  FD must refer to a
+diff --git a/support/support_quote_string.c b/support/support_quote_string.c
+new file mode 100644
+index 0000000000000000..d324371b133a4d66
+--- /dev/null
++++ b/support/support_quote_string.c
+@@ -0,0 +1,26 @@
++/* Quote a string so that it can be used in C literals.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <string.h>
++#include <support/support.h>
++
++char *
++support_quote_string (const char *str)
++{
++  return support_quote_blob (str, strlen (str));
++}
+diff --git a/support/tst-support_quote_string.c b/support/tst-support_quote_string.c
+new file mode 100644
+index 0000000000000000..3c004759b76e21d7
+--- /dev/null
++++ b/support/tst-support_quote_string.c
+@@ -0,0 +1,60 @@
++/* Test the support_quote_string function.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <support/check.h>
++#include <support/support.h>
++#include <string.h>
++#include <stdlib.h>
++
++static int
++do_test (void)
++{
++  char *p = support_quote_string ("");
++  TEST_COMPARE (strlen (p), 0);
++  free (p);
++  p = support_quote_string ("X");
++  TEST_COMPARE (strlen (p), 1);
++  TEST_COMPARE (p[0], 'X');
++  free (p);
++
++  /* Check escaping of backslash-escaped characters, and lack of
++     escaping for other shell meta-characters.  */
++  p = support_quote_string ("$()*?`@[]{}~\'\"X");
++  TEST_COMPARE (strcmp (p, "$()*?`@[]{}~\\'\\\"X"), 0);
++  free (p);
++
++  /* Check lack of escaping for letters and digits.  */
++#define LETTERS_AND_DIGTS                       \
++  "abcdefghijklmnopqrstuvwxyz"                  \
++  "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                  \
++  "0123456789"
++  p = support_quote_string (LETTERS_AND_DIGTS "@");
++  TEST_COMPARE (strcmp (p, LETTERS_AND_DIGTS "@"), 0);
++  free (p);
++
++  /* Check escaping of control characters and other non-printable
++     characters.  */
++  p = support_quote_string ("\r\n\t\a\b\f\v\1\177\200\377@");
++  TEST_COMPARE (strcmp (p, "\\r\\n\\t\\a\\b\\f\\v\\001"
++                        "\\177\\200\\377@"), 0);
++  free (p);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1654010-3.patch b/SOURCES/glibc-rh1654010-3.patch
new file mode 100644
index 0000000..d28ea27
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-3.patch
@@ -0,0 +1,26 @@
+commit 47d8d9a2172f827a8dde7695f415aa6f78a82d0e
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Nov 28 07:00:48 2018 +0100
+
+    support_quote_string: Do not use str parameter name
+    
+    This avoids a build failure if this identifier is used as a macro
+    in a test.
+
+diff --git a/support/support.h b/support/support.h
+index 835e7173eb566355..c3ad76901e352ee7 100644
+--- a/support/support.h
++++ b/support/support.h
+@@ -69,10 +69,10 @@ void support_write_file_string (const char *path, const char *contents);
+    the result).  */
+ char *support_quote_blob (const void *blob, size_t length);
+ 
+-/* Quote the contents of the at STR, in such a way that the result
++/* Quote the contents of the string, in such a way that the result
+    string can be included in a C literal (in single/double quotes,
+    without putting the quotes into the result).  */
+-char *support_quote_string (const char *str);
++char *support_quote_string (const char *);
+ 
+ /* Returns non-zero if the file descriptor is a regular file on a file
+    system which supports holes (that is, seeking and writing does not
diff --git a/SOURCES/glibc-rh1654010-4.patch b/SOURCES/glibc-rh1654010-4.patch
new file mode 100644
index 0000000..709bb84
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-4.patch
@@ -0,0 +1,32 @@
+commit 02cd5c1a8d033d7f91fea12a66bb44d1bbf85f76
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Dec 1 21:43:36 2018 +0100
+
+    support: Close original descriptors in support_capture_subprocess
+
+diff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c
+index 6d2029e13bd6ae73..93f6ea310290000a 100644
+--- a/support/support_capture_subprocess.c
++++ b/support/support_capture_subprocess.c
+@@ -59,8 +59,12 @@ support_capture_subprocess (void (*callback) (void *), void *closure)
+ 
+   int stdout_pipe[2];
+   xpipe (stdout_pipe);
++  TEST_VERIFY (stdout_pipe[0] > STDERR_FILENO);
++  TEST_VERIFY (stdout_pipe[1] > STDERR_FILENO);
+   int stderr_pipe[2];
+   xpipe (stderr_pipe);
++  TEST_VERIFY (stderr_pipe[0] > STDERR_FILENO);
++  TEST_VERIFY (stderr_pipe[1] > STDERR_FILENO);
+ 
+   TEST_VERIFY (fflush (stdout) == 0);
+   TEST_VERIFY (fflush (stderr) == 0);
+@@ -72,6 +76,8 @@ support_capture_subprocess (void (*callback) (void *), void *closure)
+       xclose (stderr_pipe[0]);
+       xdup2 (stdout_pipe[1], STDOUT_FILENO);
+       xdup2 (stderr_pipe[1], STDERR_FILENO);
++      xclose (stdout_pipe[1]);
++      xclose (stderr_pipe[1]);
+       callback (closure);
+       _exit (0);
+     }
diff --git a/SOURCES/glibc-rh1654010-5.patch b/SOURCES/glibc-rh1654010-5.patch
new file mode 100644
index 0000000..9dbfb9d
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-5.patch
@@ -0,0 +1,594 @@
+commit f255336a9301619519045548acb2e1027065a837
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Dec 6 15:39:42 2018 +0100
+
+    support: Implement <support/descriptors.h> to track file descriptors
+
+diff --git a/support/Makefile b/support/Makefile
+index a2536980d1d5a89b..93a514301654132e 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -46,6 +46,7 @@ libsupport-routines = \
+   support_chroot \
+   support_copy_file_range \
+   support_descriptor_supports_holes \
++  support_descriptors \
+   support_enter_mount_namespace \
+   support_enter_network_namespace \
+   support_format_address_family \
+@@ -195,6 +196,7 @@ tests = \
+   tst-support-namespace \
+   tst-support_blob_repeat \
+   tst-support_capture_subprocess \
++  tst-support_descriptors \
+   tst-support_format_dns_packet \
+   tst-support_quote_blob \
+   tst-support_quote_string \
+diff --git a/support/check.h b/support/check.h
+index e6765289f2492501..7ea9a86a9c7ed055 100644
+--- a/support/check.h
++++ b/support/check.h
+@@ -183,6 +183,10 @@ int support_report_failure (int status)
+ /* Internal function used to test the failure recording framework.  */
+ void support_record_failure_reset (void);
+ 
++/* Returns true or false depending on whether there have been test
++   failures or not.  */
++int support_record_failure_is_failed (void);
++
+ __END_DECLS
+ 
+ #endif /* SUPPORT_CHECK_H */
+diff --git a/support/descriptors.h b/support/descriptors.h
+new file mode 100644
+index 0000000000000000..8ec4cbbdfb8f1770
+--- /dev/null
++++ b/support/descriptors.h
+@@ -0,0 +1,47 @@
++/* Monitoring file descriptor usage.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#ifndef SUPPORT_DESCRIPTORS_H
++#define SUPPORT_DESCRIPTORS_H
++
++#include <stdio.h>
++
++/* Opaque pointer, for capturing file descriptor lists.  */
++struct support_descriptors;
++
++/* Record the currently open file descriptors and store them in the
++   returned list.  Terminate the process if the listing operation
++   fails.  */
++struct support_descriptors *support_descriptors_list (void);
++
++/* Deallocate the list of descriptors.  */
++void support_descriptors_free (struct support_descriptors *);
++
++/* Write the list of descriptors to STREAM, adding PREFIX to each
++   line.  */
++void support_descriptors_dump (struct support_descriptors *,
++                               const char *prefix, FILE *stream);
++
++/* Check for file descriptor leaks and other file descriptor changes:
++   Compare the current list of descriptors with the passed list.
++   Record a test failure if there are additional open descriptors,
++   descriptors have been closed, or if a change in file descriptor can
++   be detected.  */
++void support_descriptors_check (struct support_descriptors *);
++
++#endif /* SUPPORT_DESCRIPTORS_H */
+diff --git a/support/support_descriptors.c b/support/support_descriptors.c
+new file mode 100644
+index 0000000000000000..d66cf550800201c5
+--- /dev/null
++++ b/support/support_descriptors.c
+@@ -0,0 +1,274 @@
++/* Monitoring file descriptor usage.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <dirent.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/support.h>
++#include <sys/stat.h>
++#include <sys/sysmacros.h>
++#include <xunistd.h>
++
++struct procfs_descriptor
++{
++  int fd;
++  char *link_target;
++  dev_t dev;
++  ino64_t ino;
++};
++
++/* Used with qsort.  */
++static int
++descriptor_compare (const void *l, const void *r)
++{
++  const struct procfs_descriptor *left = l;
++  const struct procfs_descriptor *right = r;
++  /* Cannot overflow due to limited file descriptor range.  */
++  return left->fd - right->fd;
++}
++
++#define DYNARRAY_STRUCT descriptor_list
++#define DYNARRAY_ELEMENT struct procfs_descriptor
++#define DYNARRAY_PREFIX descriptor_list_
++#define DYNARRAY_ELEMENT_FREE(e) free ((e)->link_target)
++#define DYNARRAY_INITIAL_SIZE 0
++#include <malloc/dynarray-skeleton.c>
++
++struct support_descriptors
++{
++  struct descriptor_list list;
++};
++
++struct support_descriptors *
++support_descriptors_list (void)
++{
++  struct support_descriptors *result = xmalloc (sizeof (*result));
++  descriptor_list_init (&result->list);
++
++  DIR *fds = opendir ("/proc/self/fd");
++  if (fds == NULL)
++    FAIL_EXIT1 ("opendir (\"/proc/self/fd\"): %m");
++
++  while (true)
++    {
++      errno = 0;
++      struct dirent64 *e = readdir64 (fds);
++      if (e == NULL)
++        {
++          if (errno != 0)
++            FAIL_EXIT1 ("readdir: %m");
++          break;
++        }
++
++      if (e->d_name[0] == '.')
++        continue;
++
++      char *endptr;
++      long int fd = strtol (e->d_name, &endptr, 10);
++      if (*endptr != '\0' || fd < 0 || fd > INT_MAX)
++        FAIL_EXIT1 ("readdir: invalid file descriptor name: /proc/self/fd/%s",
++                    e->d_name);
++
++      /* Skip the descriptor which is used to enumerate the
++         descriptors.  */
++      if (fd == dirfd (fds))
++        continue;
++
++      char *target;
++      {
++        char *path = xasprintf ("/proc/self/fd/%ld", fd);
++        target = xreadlink (path);
++        free (path);
++      }
++      struct stat64 st;
++      if (fstat64 (fd, &st) != 0)
++        FAIL_EXIT1 ("readdir: fstat64 (%ld) failed: %m", fd);
++
++      struct procfs_descriptor *item = descriptor_list_emplace (&result->list);
++      if (item == NULL)
++        FAIL_EXIT1 ("descriptor_list_emplace: %m");
++      item->fd = fd;
++      item->link_target = target;
++      item->dev = st.st_dev;
++      item->ino = st.st_ino;
++    }
++
++  closedir (fds);
++
++  /* Perform a merge join between descrs and current.  This assumes
++     that the arrays are sorted by file descriptor.  */
++
++  qsort (descriptor_list_begin (&result->list),
++         descriptor_list_size (&result->list),
++         sizeof (struct procfs_descriptor), descriptor_compare);
++
++  return result;
++}
++
++void
++support_descriptors_free (struct support_descriptors *descrs)
++{
++  descriptor_list_free (&descrs->list);
++  free (descrs);
++}
++
++void
++support_descriptors_dump (struct support_descriptors *descrs,
++                          const char *prefix, FILE *fp)
++{
++  struct procfs_descriptor *end = descriptor_list_end (&descrs->list);
++  for (struct procfs_descriptor *d = descriptor_list_begin (&descrs->list);
++       d != end; ++d)
++    {
++      char *quoted = support_quote_string (d->link_target);
++      fprintf (fp, "%s%d: target=\"%s\" major=%lld minor=%lld ino=%lld\n",
++               prefix, d->fd, quoted,
++               (long long int) major (d->dev),
++               (long long int) minor (d->dev),
++               (long long int) d->ino);
++      free (quoted);
++    }
++}
++
++static void
++dump_mismatch (bool *first,
++               struct support_descriptors *descrs,
++               struct support_descriptors *current)
++{
++  if (*first)
++    *first = false;
++  else
++    return;
++
++  puts ("error: Differences found in descriptor set");
++  puts ("Reference descriptor set:");
++  support_descriptors_dump (descrs, "  ", stdout);
++  puts ("Current descriptor set:");
++  support_descriptors_dump (current, "  ", stdout);
++  puts ("Differences:");
++}
++
++static void
++report_closed_descriptor (bool *first,
++                          struct support_descriptors *descrs,
++                          struct support_descriptors *current,
++                          struct procfs_descriptor *left)
++{
++  support_record_failure ();
++  dump_mismatch (first, descrs, current);
++  printf ("error: descriptor %d was closed\n", left->fd);
++}
++
++static void
++report_opened_descriptor (bool *first,
++                          struct support_descriptors *descrs,
++                          struct support_descriptors *current,
++                          struct procfs_descriptor *right)
++{
++  support_record_failure ();
++  dump_mismatch (first, descrs, current);
++  char *quoted = support_quote_string (right->link_target);
++  printf ("error: descriptor %d was opened (\"%s\")\n", right->fd, quoted);
++  free (quoted);
++}
++
++void
++support_descriptors_check (struct support_descriptors *descrs)
++{
++  struct support_descriptors *current = support_descriptors_list ();
++
++  /* Perform a merge join between descrs and current.  This assumes
++     that the arrays are sorted by file descriptor.  */
++
++  struct procfs_descriptor *left = descriptor_list_begin (&descrs->list);
++  struct procfs_descriptor *left_end = descriptor_list_end (&descrs->list);
++  struct procfs_descriptor *right = descriptor_list_begin (&current->list);
++  struct procfs_descriptor *right_end = descriptor_list_end (&current->list);
++
++  bool first = true;
++  while (left != left_end && right != right_end)
++    {
++      if (left->fd == right->fd)
++        {
++          if (strcmp (left->link_target, right->link_target) != 0)
++            {
++              support_record_failure ();
++              char *left_quoted = support_quote_string (left->link_target);
++              char *right_quoted = support_quote_string (right->link_target);
++              dump_mismatch (&first, descrs, current);
++              printf ("error: descriptor %d changed from \"%s\" to \"%s\"\n",
++                      left->fd, left_quoted, right_quoted);
++              free (left_quoted);
++              free (right_quoted);
++            }
++          if (left->dev != right->dev)
++            {
++              support_record_failure ();
++              dump_mismatch (&first, descrs, current);
++              printf ("error: descriptor %d changed device"
++                      " from %lld:%lld to %lld:%lld\n",
++                      left->fd,
++                      (long long int) major (left->dev),
++                      (long long int) minor (left->dev),
++                      (long long int) major (right->dev),
++                      (long long int) minor (right->dev));
++            }
++          if (left->ino != right->ino)
++            {
++              support_record_failure ();
++              dump_mismatch (&first, descrs, current);
++              printf ("error: descriptor %d changed ino from %lld to %lld\n",
++                      left->fd,
++                      (long long int) left->ino, (long long int) right->ino);
++            }
++          ++left;
++          ++right;
++        }
++      else if (left->fd < right->fd)
++        {
++          /* Gap on the right.  */
++          report_closed_descriptor (&first, descrs, current, left);
++          ++left;
++        }
++      else
++        {
++          /* Gap on the left.  */
++          TEST_VERIFY_EXIT (left->fd > right->fd);
++          report_opened_descriptor (&first, descrs, current, right);
++          ++right;
++        }
++    }
++
++  while (left != left_end)
++    {
++      /* Closed descriptors (more descriptors on the left).  */
++      report_closed_descriptor (&first, descrs, current, left);
++      ++left;
++    }
++
++  while (right != right_end)
++    {
++      /* Opened descriptors (more descriptors on the right).  */
++      report_opened_descriptor (&first, descrs, current, right);
++      ++right;
++    }
++
++  support_descriptors_free (current);
++}
+diff --git a/support/support_record_failure.c b/support/support_record_failure.c
+index 356798f55608ca71..17ab1d80ef2bbdea 100644
+--- a/support/support_record_failure.c
++++ b/support/support_record_failure.c
+@@ -104,3 +104,11 @@ support_record_failure_reset (void)
+   __atomic_store_n (&state->failed, 0, __ATOMIC_RELAXED);
+   __atomic_add_fetch (&state->counter, 0, __ATOMIC_RELAXED);
+ }
++
++int
++support_record_failure_is_failed (void)
++{
++  /* Relaxed MO is sufficient because we need (blocking) external
++     synchronization for reliable test error reporting anyway.  */
++  return __atomic_load_n (&state->failed, __ATOMIC_RELAXED);
++}
+diff --git a/support/tst-support_descriptors.c b/support/tst-support_descriptors.c
+new file mode 100644
+index 0000000000000000..5e9e824bc3820499
+--- /dev/null
++++ b/support/tst-support_descriptors.c
+@@ -0,0 +1,198 @@
++/* Tests for monitoring file descriptor usage.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <fcntl.h>
++#include <stdbool.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/capture_subprocess.h>
++#include <support/check.h>
++#include <support/descriptors.h>
++#include <support/support.h>
++#include <support/xunistd.h>
++
++/* This is the next free descriptor that the subprocess will pick.  */
++static int free_descriptor;
++
++static void
++subprocess_no_change (void *closure)
++{
++  struct support_descriptors *descrs = support_descriptors_list ();
++  int fd = xopen ("/dev/null", O_WRONLY, 0);
++  TEST_COMPARE (fd, free_descriptor);
++  xclose (fd);
++  support_descriptors_free (descrs);
++}
++
++static void
++subprocess_closed_descriptor (void *closure)
++{
++  int fd = xopen ("/dev/null", O_WRONLY, 0);
++  TEST_COMPARE (fd, free_descriptor);
++  struct support_descriptors *descrs = support_descriptors_list ();
++  xclose (fd);
++  support_descriptors_check (descrs); /* Will report failure.  */
++  puts ("EOT");
++  support_descriptors_free (descrs);
++}
++
++static void
++subprocess_opened_descriptor (void *closure)
++{
++  struct support_descriptors *descrs = support_descriptors_list ();
++  int fd = xopen ("/dev/null", O_WRONLY, 0);
++  TEST_COMPARE (fd, free_descriptor);
++  support_descriptors_check (descrs); /* Will report failure.  */
++  puts ("EOT");
++  support_descriptors_free (descrs);
++}
++
++static void
++subprocess_changed_descriptor (void *closure)
++{
++  int fd = xopen ("/dev/null", O_WRONLY, 0);
++  TEST_COMPARE (fd, free_descriptor);
++  struct support_descriptors *descrs = support_descriptors_list ();
++  xclose (fd);
++  TEST_COMPARE (xopen ("/dev", O_DIRECTORY | O_RDONLY, 0), fd);
++  support_descriptors_check (descrs); /* Will report failure.  */
++  puts ("EOT");
++  support_descriptors_free (descrs);
++}
++
++static void
++report_subprocess_output (const char *name,
++                          struct support_capture_subprocess *proc)
++{
++  printf ("info: BEGIN %s output\n"
++          "%s"
++          "info: END %s output\n",
++          name, proc->out.buffer, name);
++}
++
++/* Use an explicit flag to preserve failure status across
++   support_record_failure_reset calls.  */
++static bool good = true;
++
++static void
++test_run (void)
++{
++  struct support_capture_subprocess proc = support_capture_subprocess
++    (&subprocess_no_change, NULL);
++  support_capture_subprocess_check (&proc, "subprocess_no_change",
++                                    0, sc_allow_none);
++  support_capture_subprocess_free (&proc);
++
++  char *expected = xasprintf ("\nDifferences:\n"
++                              "error: descriptor %d was closed\n"
++                              "EOT\n",
++                              free_descriptor);
++  good = good && !support_record_failure_is_failed ();
++  proc = support_capture_subprocess (&subprocess_closed_descriptor, NULL);
++  good = good && support_record_failure_is_failed ();
++  support_record_failure_reset (); /* Discard the reported error.  */
++  report_subprocess_output ("subprocess_closed_descriptor", &proc);
++  TEST_VERIFY (strstr (proc.out.buffer, expected) != NULL);
++  support_capture_subprocess_check (&proc, "subprocess_closed_descriptor",
++                                    0, sc_allow_stdout);
++  support_capture_subprocess_free (&proc);
++  free (expected);
++
++  expected = xasprintf ("\nDifferences:\n"
++                        "error: descriptor %d was opened (\"/dev/null\")\n"
++                        "EOT\n",
++                        free_descriptor);
++  good = good && !support_record_failure_is_failed ();
++  proc = support_capture_subprocess (&subprocess_opened_descriptor, NULL);
++  good = good && support_record_failure_is_failed ();
++  support_record_failure_reset (); /* Discard the reported error.  */
++  report_subprocess_output ("subprocess_opened_descriptor", &proc);
++  TEST_VERIFY (strstr (proc.out.buffer, expected) != NULL);
++  support_capture_subprocess_check (&proc, "subprocess_opened_descriptor",
++                                    0, sc_allow_stdout);
++  support_capture_subprocess_free (&proc);
++  free (expected);
++
++  expected = xasprintf ("\nDifferences:\n"
++                        "error: descriptor %d changed from \"/dev/null\""
++                        " to \"/dev\"\n"
++                        "error: descriptor %d changed ino ",
++                        free_descriptor, free_descriptor);
++  good = good && !support_record_failure_is_failed ();
++  proc = support_capture_subprocess (&subprocess_changed_descriptor, NULL);
++  good = good && support_record_failure_is_failed ();
++  support_record_failure_reset (); /* Discard the reported error.  */
++  report_subprocess_output ("subprocess_changed_descriptor", &proc);
++  TEST_VERIFY (strstr (proc.out.buffer, expected) != NULL);
++  support_capture_subprocess_check (&proc, "subprocess_changed_descriptor",
++                                    0, sc_allow_stdout);
++  support_capture_subprocess_free (&proc);
++  free (expected);
++}
++
++static int
++do_test (void)
++{
++  puts ("info: initial descriptor set");
++  {
++    struct support_descriptors *descrs = support_descriptors_list ();
++    support_descriptors_dump (descrs, "info:  ", stdout);
++    support_descriptors_free (descrs);
++  }
++
++  free_descriptor = xopen ("/dev/null", O_WRONLY, 0);
++  puts ("info: descriptor set with additional free descriptor");
++  {
++    struct support_descriptors *descrs = support_descriptors_list ();
++    support_descriptors_dump (descrs, "info:  ", stdout);
++    support_descriptors_free (descrs);
++  }
++  TEST_VERIFY (free_descriptor >= 3);
++  xclose (free_descriptor);
++
++  /* Initial test run without a sentinel descriptor.  The presence of
++     such a descriptor exercises different conditions in the list
++     comparison in support_descriptors_check.  */
++  test_run ();
++
++  /* Allocate a sentinel descriptor at the end of the descriptor list,
++     after free_descriptor.  */
++  int sentinel_fd;
++  {
++    int fd = xopen ("/dev/full", O_WRONLY, 0);
++    TEST_COMPARE (fd, free_descriptor);
++    sentinel_fd = dup (fd);
++    TEST_VERIFY_EXIT (sentinel_fd > fd);
++    xclose (fd);
++  }
++  puts ("info: descriptor set with sentinel descriptor");
++  {
++    struct support_descriptors *descrs = support_descriptors_list ();
++    support_descriptors_dump (descrs, "info:  ", stdout);
++    support_descriptors_free (descrs);
++  }
++
++  /* Second test run with sentinel descriptor.  */
++  test_run ();
++
++  xclose (sentinel_fd);
++
++  return !good;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1654010-6.patch b/SOURCES/glibc-rh1654010-6.patch
new file mode 100644
index 0000000..bf6a137
--- /dev/null
+++ b/SOURCES/glibc-rh1654010-6.patch
@@ -0,0 +1,86 @@
+commit 899478c2bfa00c5df8d8bedb52effbb065700278
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Dec 6 15:39:50 2018 +0100
+
+    inet/tst-if_index-long: New test case for CVE-2018-19591 [BZ #23927]
+
+diff --git a/inet/Makefile b/inet/Makefile
+index 09f5ba78fc5f3120..7782913b4c06f057 100644
+--- a/inet/Makefile
++++ b/inet/Makefile
+@@ -52,7 +52,7 @@ aux := check_pf check_native ifreq
+ tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
+ 	 tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-ether_line \
+ 	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks tst-checks-posix \
+-	 tst-sockaddr test-hnto-types
++	 tst-sockaddr test-hnto-types tst-if_index-long
+ 
+ # tst-deadline must be linked statically so that we can access
+ # internal functions.
+diff --git a/inet/tst-if_index-long.c b/inet/tst-if_index-long.c
+new file mode 100644
+index 0000000000000000..3dc74874e5310945
+--- /dev/null
++++ b/inet/tst-if_index-long.c
+@@ -0,0 +1,61 @@
++/* Check for descriptor leak in if_nametoindex with a long interface name.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This test checks for a descriptor leak in case of a long interface
++   name (CVE-2018-19591, bug 23927).  */
++
++#include <errno.h>
++#include <net/if.h>
++#include <netdb.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/descriptors.h>
++#include <support/support.h>
++
++static int
++do_test (void)
++{
++  struct support_descriptors *descrs = support_descriptors_list ();
++
++  /* Prepare a name which is just as long as required for trigging the
++     bug.  */
++  char name[IFNAMSIZ + 1];
++  memset (name, 'A', IFNAMSIZ);
++  name[IFNAMSIZ] = '\0';
++  TEST_COMPARE (strlen (name), IFNAMSIZ);
++  struct ifreq ifr;
++  TEST_COMPARE (strlen (name), sizeof (ifr.ifr_name));
++
++  /* Test directly via if_nametoindex.  */
++  TEST_COMPARE (if_nametoindex (name), 0);
++  TEST_COMPARE (errno, ENODEV);
++  support_descriptors_check (descrs);
++
++  /* Same test via getaddrinfo.  */
++  char *host = xasprintf ("fea0::%%%s", name);
++  struct addrinfo hints = { .ai_flags = AI_NUMERICHOST, };
++  struct addrinfo *ai;
++  TEST_COMPARE (getaddrinfo (host, NULL, &hints, &ai), EAI_NONAME);
++  support_descriptors_check (descrs);
++
++  support_descriptors_free (descrs);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1654872-1.patch b/SOURCES/glibc-rh1654872-1.patch
new file mode 100644
index 0000000..38b6412
--- /dev/null
+++ b/SOURCES/glibc-rh1654872-1.patch
@@ -0,0 +1,446 @@
+commit 3d265911c2aac65d978f679101594f9071024874
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon Nov 12 11:11:40 2018 +0100
+
+    Reindent nptl/pthread_rwlock_common.c
+
+diff --git a/nptl/pthread_rwlock_common.c b/nptl/pthread_rwlock_common.c
+index a290d08332b802a5..5dd534271aed6b41 100644
+--- a/nptl/pthread_rwlock_common.c
++++ b/nptl/pthread_rwlock_common.c
+@@ -34,7 +34,7 @@
+ 
+    A thread is allowed to acquire a read lock recursively (i.e., have rdlock
+    critical sections that overlap in sequenced-before) unless the kind of the
+-   rwlock is set to PTHREAD_RWLOCK_PREFER_WRITERS_NONRECURSIVE_NP.
++   rwlock is set to PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP.
+ 
+    This lock is built so that workloads of mostly readers can be executed with
+    low runtime overheads.  This matches that the default kind of the lock is
+@@ -46,7 +46,7 @@
+    An uncontended write lock acquisition is as fast as for a normal
+    exclusive mutex but writer contention is somewhat more costly due to
+    keeping track of the exact number of writers.  If the rwlock kind requests
+-   writers to be preferred (i.e., PTHREAD_RWLOCK_PREFER_WRITERS_NP or the
++   writers to be preferred (i.e., PTHREAD_RWLOCK_PREFER_WRITER_NP or the
+    no-recursive-readers variant of it), then writer--to--writer lock ownership
+    hand-over is fairly fast and bypasses lock acquisition attempts by readers.
+    The costs of lock ownership transfer between readers and writers vary.  If
+@@ -251,7 +251,7 @@ __pthread_rwlock_rdunlock (pthread_rwlock_t *rwlock)
+ 	 the first reader's store to __wrphase_futex (or a later value) if
+ 	 the writer observes that a write phase has been started.  */
+       if (atomic_compare_exchange_weak_release (&rwlock->__data.__readers,
+-	  &r, rnew))
++						&r, rnew))
+ 	break;
+       /* TODO Back-off.  */
+     }
+@@ -285,7 +285,7 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+   /* Make sure we are not holding the rwlock as a writer.  This is a deadlock
+      situation we recognize and report.  */
+   if (__glibc_unlikely (atomic_load_relaxed (&rwlock->__data.__cur_writer)
+-      == THREAD_GETMEM (THREAD_SELF, tid)))
++			== THREAD_GETMEM (THREAD_SELF, tid)))
+     return EDEADLK;
+ 
+   /* If we prefer writers, recursive rdlock is disallowed, we are in a read
+@@ -299,9 +299,9 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+   if (rwlock->__data.__flags == PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
+     {
+       r = atomic_load_relaxed (&rwlock->__data.__readers);
+-      while (((r & PTHREAD_RWLOCK_WRPHASE) == 0)
+-	      && ((r & PTHREAD_RWLOCK_WRLOCKED) != 0)
+-	      && ((r >> PTHREAD_RWLOCK_READER_SHIFT) > 0))
++      while ((r & PTHREAD_RWLOCK_WRPHASE) == 0
++	     && (r & PTHREAD_RWLOCK_WRLOCKED) != 0
++	     && (r >> PTHREAD_RWLOCK_READER_SHIFT) > 0)
+ 	{
+ 	  /* TODO Spin first.  */
+ 	  /* Try setting the flag signaling that we are waiting without having
+@@ -315,11 +315,11 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+ 		 __readers, and all threads set the flag under the same
+ 		 conditions.  */
+ 	      while ((atomic_load_relaxed (&rwlock->__data.__readers)
+-		  & PTHREAD_RWLOCK_RWAITING) != 0)
++		      & PTHREAD_RWLOCK_RWAITING) != 0)
+ 		{
+ 		  int private = __pthread_rwlock_get_private (rwlock);
+ 		  int err = futex_abstimed_wait (&rwlock->__data.__readers,
+-		      r, abstime, private);
++						 r, abstime, private);
+ 		  /* We ignore EAGAIN and EINTR.  On time-outs, we can just
+ 		     return because we don't need to clean up anything.  */
+ 		  if (err == ETIMEDOUT)
+@@ -338,8 +338,9 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+      expected value for future operations.  Acquire MO so we synchronize with
+      prior writers as well as the last reader of the previous read phase (see
+      below).  */
+-  r = atomic_fetch_add_acquire (&rwlock->__data.__readers,
+-      (1 << PTHREAD_RWLOCK_READER_SHIFT)) + (1 << PTHREAD_RWLOCK_READER_SHIFT);
++  r = (atomic_fetch_add_acquire (&rwlock->__data.__readers,
++				 (1 << PTHREAD_RWLOCK_READER_SHIFT))
++       + (1 << PTHREAD_RWLOCK_READER_SHIFT));
+ 
+   /* Check whether there is an overflow in the number of readers.  We assume
+      that the total number of threads is less than half the maximum number
+@@ -359,8 +360,9 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+       /* Relaxed MO is okay because we just want to undo our registration and
+ 	 cannot have changed the rwlock state substantially if the CAS
+ 	 succeeds.  */
+-      if (atomic_compare_exchange_weak_relaxed (&rwlock->__data.__readers, &r,
+-	  r - (1 << PTHREAD_RWLOCK_READER_SHIFT)))
++      if (atomic_compare_exchange_weak_relaxed
++	  (&rwlock->__data.__readers,
++	   &r, r - (1 << PTHREAD_RWLOCK_READER_SHIFT)))
+ 	return EAGAIN;
+     }
+ 
+@@ -378,15 +380,15 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+   /* Otherwise, if we were in a write phase (states #6 or #8), we must wait
+      for explicit hand-over of the read phase; the only exception is if we
+      can start a read phase if there is no primary writer currently.  */
+-  while (((r & PTHREAD_RWLOCK_WRPHASE) != 0)
+-      && ((r & PTHREAD_RWLOCK_WRLOCKED) == 0))
++  while ((r & PTHREAD_RWLOCK_WRPHASE) != 0
++	 && (r & PTHREAD_RWLOCK_WRLOCKED) == 0)
+     {
+-       /* Try to enter a read phase: If the CAS below succeeds, we have
++      /* Try to enter a read phase: If the CAS below succeeds, we have
+ 	 ownership; if it fails, we will simply retry and reassess the
+ 	 situation.
+ 	 Acquire MO so we synchronize with prior writers.  */
+       if (atomic_compare_exchange_weak_acquire (&rwlock->__data.__readers, &r,
+-	  r ^ PTHREAD_RWLOCK_WRPHASE))
++						r ^ PTHREAD_RWLOCK_WRPHASE))
+ 	{
+ 	  /* We started the read phase, so we are also responsible for
+ 	     updating the write-phase futex.  Relaxed MO is sufficient.
+@@ -397,7 +399,7 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+ 	     (but we can pretend to do the setting and unsetting of WRLOCKED
+ 	     atomically, and thus can skip this step).  */
+ 	  if ((atomic_exchange_relaxed (&rwlock->__data.__wrphase_futex, 0)
+-	      & PTHREAD_RWLOCK_FUTEX_USED) != 0)
++	       & PTHREAD_RWLOCK_FUTEX_USED) != 0)
+ 	    {
+ 	      int private = __pthread_rwlock_get_private (rwlock);
+ 	      futex_wake (&rwlock->__data.__wrphase_futex, INT_MAX, private);
+@@ -435,16 +437,17 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+   for (;;)
+     {
+       while (((wpf = atomic_load_relaxed (&rwlock->__data.__wrphase_futex))
+-	  | PTHREAD_RWLOCK_FUTEX_USED) == (1 | PTHREAD_RWLOCK_FUTEX_USED))
++	      | PTHREAD_RWLOCK_FUTEX_USED) == (1 | PTHREAD_RWLOCK_FUTEX_USED))
+ 	{
+ 	  int private = __pthread_rwlock_get_private (rwlock);
+ 	  if (((wpf & PTHREAD_RWLOCK_FUTEX_USED) == 0)
+-	      && !atomic_compare_exchange_weak_relaxed
++	      && (!atomic_compare_exchange_weak_relaxed
+ 		  (&rwlock->__data.__wrphase_futex,
+-		   &wpf, wpf | PTHREAD_RWLOCK_FUTEX_USED))
++		   &wpf, wpf | PTHREAD_RWLOCK_FUTEX_USED)))
+ 	    continue;
+ 	  int err = futex_abstimed_wait (&rwlock->__data.__wrphase_futex,
+-	      1 | PTHREAD_RWLOCK_FUTEX_USED, abstime, private);
++					 1 | PTHREAD_RWLOCK_FUTEX_USED,
++					 abstime, private);
+ 	  if (err == ETIMEDOUT)
+ 	    {
+ 	      /* If we timed out, we need to unregister.  If no read phase
+@@ -477,8 +480,8 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+ 		 in this case and thus make the spin-waiting we need
+ 		 unnecessarily expensive.  */
+ 	      while ((atomic_load_relaxed (&rwlock->__data.__wrphase_futex)
+-		  | PTHREAD_RWLOCK_FUTEX_USED)
+-		  == (1 | PTHREAD_RWLOCK_FUTEX_USED))
++		      | PTHREAD_RWLOCK_FUTEX_USED)
++		     == (1 | PTHREAD_RWLOCK_FUTEX_USED))
+ 		{
+ 		  /* TODO Back-off?  */
+ 		}
+@@ -495,7 +498,7 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+ 	 release of the writer, and so that we observe a recent value of
+ 	 __wrphase_futex (see below).  */
+       if ((atomic_load_acquire (&rwlock->__data.__readers)
+-	  & PTHREAD_RWLOCK_WRPHASE) == 0)
++	   & PTHREAD_RWLOCK_WRPHASE) == 0)
+ 	/* We are in a read phase now, so the least recent modification of
+ 	   __wrphase_futex we can read from is the store by the writer
+ 	   with value 1.  Thus, only now we can assume that if we observe
+@@ -516,8 +519,9 @@ __pthread_rwlock_wrunlock (pthread_rwlock_t *rwlock)
+   atomic_store_relaxed (&rwlock->__data.__cur_writer, 0);
+   /* Disable waiting by writers.  We will wake up after we decided how to
+      proceed.  */
+-  bool wake_writers = ((atomic_exchange_relaxed
+-      (&rwlock->__data.__writers_futex, 0) & PTHREAD_RWLOCK_FUTEX_USED) != 0);
++  bool wake_writers
++    = ((atomic_exchange_relaxed (&rwlock->__data.__writers_futex, 0)
++	& PTHREAD_RWLOCK_FUTEX_USED) != 0);
+ 
+   if (rwlock->__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP)
+     {
+@@ -529,8 +533,8 @@ __pthread_rwlock_wrunlock (pthread_rwlock_t *rwlock)
+ 	     synchronize with us and thus can take over our view of
+ 	     __readers (including, for example, whether we are in a write
+ 	     phase or not).  */
+-	  if (atomic_compare_exchange_weak_release (&rwlock->__data.__writers,
+-	      &w, w | PTHREAD_RWLOCK_WRHANDOVER))
++	  if (atomic_compare_exchange_weak_release
++	      (&rwlock->__data.__writers, &w, w | PTHREAD_RWLOCK_WRHANDOVER))
+ 	    /* Another writer will take over.  */
+ 	    goto done;
+ 	  /* TODO Back-off.  */
+@@ -543,9 +547,10 @@ __pthread_rwlock_wrunlock (pthread_rwlock_t *rwlock)
+   unsigned int r = atomic_load_relaxed (&rwlock->__data.__readers);
+   /* Release MO so that subsequent readers or writers synchronize with us.  */
+   while (!atomic_compare_exchange_weak_release
+-      (&rwlock->__data.__readers, &r, (r ^ PTHREAD_RWLOCK_WRLOCKED)
+-	  ^ ((r >> PTHREAD_RWLOCK_READER_SHIFT) == 0 ? 0
+-	      : PTHREAD_RWLOCK_WRPHASE)))
++	 (&rwlock->__data.__readers, &r,
++	  ((r ^ PTHREAD_RWLOCK_WRLOCKED)
++	   ^ ((r >> PTHREAD_RWLOCK_READER_SHIFT) == 0 ? 0
++	      : PTHREAD_RWLOCK_WRPHASE))))
+     {
+       /* TODO Back-off.  */
+     }
+@@ -574,7 +579,7 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+   /* Make sure we are not holding the rwlock as a writer.  This is a deadlock
+      situation we recognize and report.  */
+   if (__glibc_unlikely (atomic_load_relaxed (&rwlock->__data.__cur_writer)
+-      == THREAD_GETMEM (THREAD_SELF, tid)))
++			== THREAD_GETMEM (THREAD_SELF, tid)))
+     return EDEADLK;
+ 
+   /* First we try to acquire the role of primary writer by setting WRLOCKED;
+@@ -593,12 +598,12 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+      this could be less scalable if readers arrive and leave frequently.  */
+   bool may_share_futex_used_flag = false;
+   unsigned int r = atomic_fetch_or_acquire (&rwlock->__data.__readers,
+-      PTHREAD_RWLOCK_WRLOCKED);
++					    PTHREAD_RWLOCK_WRLOCKED);
+   if (__glibc_unlikely ((r & PTHREAD_RWLOCK_WRLOCKED) != 0))
+     {
+       /* There is another primary writer.  */
+-      bool prefer_writer =
+-	  (rwlock->__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP);
++      bool prefer_writer
++	= (rwlock->__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP);
+       if (prefer_writer)
+ 	{
+ 	  /* We register as a waiting writer, so that we can make use of
+@@ -617,8 +622,7 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 	      /* Try to become the primary writer or retry.  Acquire MO as in
+ 		 the fetch_or above.  */
+ 	      if (atomic_compare_exchange_weak_acquire
+-		  (&rwlock->__data.__readers, &r,
+-		      r | PTHREAD_RWLOCK_WRLOCKED))
++		  (&rwlock->__data.__readers, &r, r | PTHREAD_RWLOCK_WRLOCKED))
+ 		{
+ 		  if (prefer_writer)
+ 		    {
+@@ -633,8 +637,7 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 			 __writers).
+ 			 ??? Perhaps this is not strictly necessary for
+ 			 reasons we do not yet know of.  */
+-		      atomic_fetch_add_relaxed (&rwlock->__data.__writers,
+-			  -1);
++		      atomic_fetch_add_relaxed (&rwlock->__data.__writers, -1);
+ 		    }
+ 		  break;
+ 		}
+@@ -646,8 +649,7 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 	     succeed, we own WRLOCKED.  */
+ 	  if (prefer_writer)
+ 	    {
+-	      unsigned int w = atomic_load_relaxed
+-		  (&rwlock->__data.__writers);
++	      unsigned int w = atomic_load_relaxed (&rwlock->__data.__writers);
+ 	      if ((w & PTHREAD_RWLOCK_WRHANDOVER) != 0)
+ 		{
+ 		  /* Acquire MO is required here so that we synchronize with
+@@ -677,13 +679,13 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 	  /* We did not acquire WRLOCKED nor were able to use writer--writer
+ 	     hand-over, so we block on __writers_futex.  */
+ 	  int private = __pthread_rwlock_get_private (rwlock);
+-	  unsigned int wf = atomic_load_relaxed
+-	      (&rwlock->__data.__writers_futex);
++	  unsigned int wf
++	    = atomic_load_relaxed (&rwlock->__data.__writers_futex);
+ 	  if (((wf & ~(unsigned int) PTHREAD_RWLOCK_FUTEX_USED) != 1)
+ 	      || ((wf != (1 | PTHREAD_RWLOCK_FUTEX_USED))
+-		  && !atomic_compare_exchange_weak_relaxed
++		  && (!atomic_compare_exchange_weak_relaxed
+ 		      (&rwlock->__data.__writers_futex, &wf,
+-		       1 | PTHREAD_RWLOCK_FUTEX_USED)))
++		       1 | PTHREAD_RWLOCK_FUTEX_USED))))
+ 	    {
+ 	      /* If we cannot block on __writers_futex because there is no
+ 		 primary writer, or we cannot set PTHREAD_RWLOCK_FUTEX_USED,
+@@ -704,7 +706,8 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 	     in this group.  */
+ 	  may_share_futex_used_flag = true;
+ 	  int err = futex_abstimed_wait (&rwlock->__data.__writers_futex,
+-	      1 | PTHREAD_RWLOCK_FUTEX_USED, abstime, private);
++					 1 | PTHREAD_RWLOCK_FUTEX_USED,
++					 abstime, private);
+ 	  if (err == ETIMEDOUT)
+ 	    {
+ 	      if (prefer_writer)
+@@ -716,10 +719,10 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 		     that this happened before the timeout; see
+ 		     pthread_rwlock_rdlock_full for the full reasoning.)
+ 		     Also see the similar code above.  */
+-		  unsigned int w = atomic_load_relaxed
+-		      (&rwlock->__data.__writers);
++		  unsigned int w
++		    = atomic_load_relaxed (&rwlock->__data.__writers);
+ 		  while (!atomic_compare_exchange_weak_acquire
+-		      (&rwlock->__data.__writers, &w,
++			 (&rwlock->__data.__writers, &w,
+ 			  (w == PTHREAD_RWLOCK_WRHANDOVER + 1 ? 0 : w - 1)))
+ 		    {
+ 		      /* TODO Back-off.  */
+@@ -751,7 +754,8 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+      modifications of __readers ensures that this store happens after the
+      store of value 0 by the previous primary writer.  */
+   atomic_store_relaxed (&rwlock->__data.__writers_futex,
+-      1 | (may_share_futex_used_flag ? PTHREAD_RWLOCK_FUTEX_USED : 0));
++			1 | (may_share_futex_used_flag
++			     ? PTHREAD_RWLOCK_FUTEX_USED : 0));
+ 
+   /* If we are in a write phase, we have acquired the lock.  */
+   if ((r & PTHREAD_RWLOCK_WRPHASE) != 0)
+@@ -759,15 +763,15 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 
+   /* If we are in a read phase and there are no readers, try to start a write
+      phase.  */
+-  while (((r & PTHREAD_RWLOCK_WRPHASE) == 0)
+-      && ((r >> PTHREAD_RWLOCK_READER_SHIFT) == 0))
++  while ((r & PTHREAD_RWLOCK_WRPHASE) == 0
++	 && (r >> PTHREAD_RWLOCK_READER_SHIFT) == 0)
+     {
+       /* Acquire MO so that we synchronize with prior writers and do
+ 	 not interfere with their updates to __writers_futex, as well
+ 	 as regarding prior readers and their updates to __wrphase_futex,
+ 	 respectively.  */
+       if (atomic_compare_exchange_weak_acquire (&rwlock->__data.__readers,
+-	  &r, r | PTHREAD_RWLOCK_WRPHASE))
++						&r, r | PTHREAD_RWLOCK_WRPHASE))
+ 	{
+ 	  /* We have started a write phase, so need to enable readers to wait.
+ 	     See the similar case in __pthread_rwlock_rdlock_full.  Unlike in
+@@ -792,24 +796,24 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+   for (;;)
+     {
+       while (((wpf = atomic_load_relaxed (&rwlock->__data.__wrphase_futex))
+-	  | PTHREAD_RWLOCK_FUTEX_USED) == PTHREAD_RWLOCK_FUTEX_USED)
++	      | PTHREAD_RWLOCK_FUTEX_USED) == PTHREAD_RWLOCK_FUTEX_USED)
+ 	{
+ 	  int private = __pthread_rwlock_get_private (rwlock);
+-	  if (((wpf & PTHREAD_RWLOCK_FUTEX_USED) == 0)
+-	      && !atomic_compare_exchange_weak_relaxed
++	  if ((wpf & PTHREAD_RWLOCK_FUTEX_USED) == 0
++	      && (!atomic_compare_exchange_weak_relaxed
+ 		  (&rwlock->__data.__wrphase_futex, &wpf,
+-		   PTHREAD_RWLOCK_FUTEX_USED))
++		   PTHREAD_RWLOCK_FUTEX_USED)))
+ 	    continue;
+ 	  int err = futex_abstimed_wait (&rwlock->__data.__wrphase_futex,
+-	      PTHREAD_RWLOCK_FUTEX_USED, abstime, private);
++					 PTHREAD_RWLOCK_FUTEX_USED,
++					 abstime, private);
+ 	  if (err == ETIMEDOUT)
+ 	    {
+-	      if (rwlock->__data.__flags
+-		  != PTHREAD_RWLOCK_PREFER_READER_NP)
++	      if (rwlock->__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP)
+ 		{
+ 		  /* We try writer--writer hand-over.  */
+-		  unsigned int w = atomic_load_relaxed
+-		      (&rwlock->__data.__writers);
++		  unsigned int w
++		    = atomic_load_relaxed (&rwlock->__data.__writers);
+ 		  if (w != 0)
+ 		    {
+ 		      /* We are about to hand over WRLOCKED, so we must
+@@ -823,13 +827,13 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 			 Release MO so that another writer that gets
+ 			 WRLOCKED from us can take over our view of
+ 			 __readers.  */
+-		      unsigned int wf = atomic_exchange_relaxed
+-			  (&rwlock->__data.__writers_futex, 0);
++		      unsigned int wf
++			= atomic_exchange_relaxed (&rwlock->__data.__writers_futex, 0);
+ 		      while (w != 0)
+ 			{
+ 			  if (atomic_compare_exchange_weak_release
+ 			      (&rwlock->__data.__writers, &w,
+-				  w | PTHREAD_RWLOCK_WRHANDOVER))
++			       w | PTHREAD_RWLOCK_WRHANDOVER))
+ 			    {
+ 			      /* Wake other writers.  */
+ 			      if ((wf & PTHREAD_RWLOCK_FUTEX_USED) != 0)
+@@ -844,8 +848,7 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 			 again.  Make sure we don't loose the flag that
+ 			 signals whether there are threads waiting on
+ 			 this futex.  */
+-		      atomic_store_relaxed
+-			  (&rwlock->__data.__writers_futex, wf);
++		      atomic_store_relaxed (&rwlock->__data.__writers_futex, wf);
+ 		    }
+ 		}
+ 	      /* If we timed out and we are not in a write phase, we can
+@@ -857,8 +860,8 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 		  /* We are about to release WRLOCKED, so we must release
+ 		     __writers_futex too; see the handling of
+ 		     writer--writer hand-over above.  */
+-		  unsigned int wf = atomic_exchange_relaxed
+-		      (&rwlock->__data.__writers_futex, 0);
++		  unsigned int wf
++		    = atomic_exchange_relaxed (&rwlock->__data.__writers_futex, 0);
+ 		  while ((r & PTHREAD_RWLOCK_WRPHASE) == 0)
+ 		    {
+ 		      /* While we don't need to make anything from a
+@@ -877,11 +880,11 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 			  /* Wake other writers.  */
+ 			  if ((wf & PTHREAD_RWLOCK_FUTEX_USED) != 0)
+ 			    futex_wake (&rwlock->__data.__writers_futex,
+-				1, private);
++					1, private);
+ 			  /* Wake waiting readers.  */
+ 			  if ((r & PTHREAD_RWLOCK_RWAITING) != 0)
+ 			    futex_wake (&rwlock->__data.__readers,
+-				INT_MAX, private);
++					INT_MAX, private);
+ 			  return ETIMEDOUT;
+ 			}
+ 		    }
+@@ -898,10 +901,9 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+ 	      atomic_thread_fence_acquire ();
+ 	      /* We still need to wait for explicit hand-over, but we must
+ 		 not use futex_wait anymore.  */
+-	      while ((atomic_load_relaxed
+-		  (&rwlock->__data.__wrphase_futex)
+-		   | PTHREAD_RWLOCK_FUTEX_USED)
+-		  == PTHREAD_RWLOCK_FUTEX_USED)
++	      while ((atomic_load_relaxed (&rwlock->__data.__wrphase_futex)
++		      | PTHREAD_RWLOCK_FUTEX_USED)
++		     == PTHREAD_RWLOCK_FUTEX_USED)
+ 		{
+ 		  /* TODO Back-off.  */
+ 		}
+@@ -915,12 +917,12 @@ __pthread_rwlock_wrlock_full (pthread_rwlock_t *rwlock,
+       if (ready)
+ 	break;
+       if ((atomic_load_acquire (&rwlock->__data.__readers)
+-	  & PTHREAD_RWLOCK_WRPHASE) != 0)
++	   & PTHREAD_RWLOCK_WRPHASE) != 0)
+ 	ready = true;
+     }
+ 
+  done:
+   atomic_store_relaxed (&rwlock->__data.__cur_writer,
+-      THREAD_GETMEM (THREAD_SELF, tid));
++			THREAD_GETMEM (THREAD_SELF, tid));
+   return 0;
+ }
diff --git a/SOURCES/glibc-rh1654872-2.patch b/SOURCES/glibc-rh1654872-2.patch
new file mode 100644
index 0000000..04c40ee
--- /dev/null
+++ b/SOURCES/glibc-rh1654872-2.patch
@@ -0,0 +1,134 @@
+commit f21e8f8ca466320fed38bdb71526c574dae98026
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Thu Nov 8 14:28:22 2018 +0100
+
+    Fix rwlock stall with PREFER_WRITER_NONRECURSIVE_NP (bug 23861)
+    
+    In the read lock function (__pthread_rwlock_rdlock_full) there was a
+    code path which would fail to reload __readers while waiting for
+    PTHREAD_RWLOCK_RWAITING to change. This failure to reload __readers
+    into a local value meant that various conditionals used the old value
+    of __readers and with only two threads left it could result in an
+    indefinite stall of one of the readers (waiting for PTHREAD_RWLOCK_RWAITING
+    to go to zero, but it never would).
+
+diff --git a/nptl/Makefile b/nptl/Makefile
+index ee720960d18f33d1..2d2db648f730db61 100644
+--- a/nptl/Makefile
++++ b/nptl/Makefile
+@@ -318,7 +318,8 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
+ 	tst-minstack-throw \
+ 	tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
+ 	tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
+-	tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock
++	tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \
++	tst-rwlock-pwn
+ 
+ tests-internal := tst-rwlock19 tst-rwlock20 \
+ 		  tst-sem11 tst-sem12 tst-sem13 \
+diff --git a/nptl/pthread_rwlock_common.c b/nptl/pthread_rwlock_common.c
+index 5dd534271aed6b41..85fc1bcfc7f5e60d 100644
+--- a/nptl/pthread_rwlock_common.c
++++ b/nptl/pthread_rwlock_common.c
+@@ -314,7 +314,7 @@ __pthread_rwlock_rdlock_full (pthread_rwlock_t *rwlock,
+ 		 harmless because the flag is just about the state of
+ 		 __readers, and all threads set the flag under the same
+ 		 conditions.  */
+-	      while ((atomic_load_relaxed (&rwlock->__data.__readers)
++	      while (((r = atomic_load_relaxed (&rwlock->__data.__readers))
+ 		      & PTHREAD_RWLOCK_RWAITING) != 0)
+ 		{
+ 		  int private = __pthread_rwlock_get_private (rwlock);
+diff --git a/nptl/tst-rwlock-pwn.c b/nptl/tst-rwlock-pwn.c
+new file mode 100644
+index 0000000000000000..c39dd70973f1a76e
+--- /dev/null
++++ b/nptl/tst-rwlock-pwn.c
+@@ -0,0 +1,87 @@
++/* Test rwlock with PREFER_WRITER_NONRECURSIVE_NP (bug 23861).
++   Copyright (C) 2018 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <pthread.h>
++#include <support/xthread.h>
++
++/* We choose 10 iterations because this happens to be able to trigger the
++   stall on contemporary hardware.  */
++#define LOOPS 10
++/* We need 3 threads to trigger bug 23861.  One thread as a writer, and
++   two reader threads.  The test verifies that the second-to-last reader
++   is able to notify the *last* reader that it should be done waiting.
++   If the second-to-last reader fails to notify the last reader or does
++   so incorrectly then the last reader may stall indefinitely.  */
++#define NTHREADS 3
++
++_Atomic int do_exit;
++pthread_rwlockattr_t mylock_attr;
++pthread_rwlock_t mylock;
++
++void *
++run_loop (void *a)
++{
++  while (!do_exit)
++    {
++      if (random () & 1)
++	{
++	  xpthread_rwlock_wrlock (&mylock);
++	  xpthread_rwlock_unlock (&mylock);
++	}
++      else
++	{
++	  xpthread_rwlock_rdlock (&mylock);
++	  xpthread_rwlock_unlock (&mylock);
++	}
++    }
++  return NULL;
++}
++
++int
++do_test (void)
++{
++  xpthread_rwlockattr_init (&mylock_attr);
++  xpthread_rwlockattr_setkind_np (&mylock_attr,
++				  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
++  xpthread_rwlock_init (&mylock, &mylock_attr);
++
++  for (int n = 0; n < LOOPS; n++)
++    {
++      pthread_t tids[NTHREADS];
++      do_exit = 0;
++      for (int i = 0; i < NTHREADS; i++)
++	tids[i] = xpthread_create (NULL, run_loop, NULL);
++      /* Let the threads run for some time.  */
++      sleep (1);
++      printf ("Exiting...");
++      fflush (stdout);
++      do_exit = 1;
++      for (int i = 0; i < NTHREADS; i++)
++	xpthread_join (tids[i]);
++      printf ("done.\n");
++    }
++  pthread_rwlock_destroy (&mylock);
++  pthread_rwlockattr_destroy (&mylock_attr);
++  return 0;
++}
++
++#define TIMEOUT (DEFAULT_TIMEOUT + 3 * LOOPS)
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh697421.patch b/SOURCES/glibc-rh697421.patch
new file mode 100644
index 0000000..e909aa1
--- /dev/null
+++ b/SOURCES/glibc-rh697421.patch
@@ -0,0 +1,21 @@
+Short description: Add UCS-2 aliases.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #697421
+Upstream status: https://sourceware.org/ml/libc-alpha/2012-12/msg00103.html
+
+This is a Fedora-specific change to include new aliases for UCS-2
+data for gconv used by a certain class of users. This should be
+revisited at some point to determine if those users are just using
+UTF-8 at this point.
+
+diff -rup a/iconvdata/gconv-modules b/iconvdata/gconv-modules
+--- a/iconvdata/gconv-modules	2010-05-04 05:27:23.000000000 -0600
++++ b/iconvdata/gconv-modules	2012-01-26 10:58:24.181895489 -0700
+@@ -1954,3 +1954,6 @@ alias	HPGREEK8//		HP-GREEK8//
+ alias	OSF10010004//		HP-GREEK8//
+ module	HP-GREEK8//		INTERNAL		HP-GREEK8	1
+ module	INTERNAL		HP-GREEK8//		HP-GREEK8	1
++
++alias	ISO-10646-UCS-2//	UNICODE//
++alias	ISO-10646-UCS-2//	ISO-10646/UTF8/
diff --git a/SOURCES/glibc-rh741105.patch b/SOURCES/glibc-rh741105.patch
new file mode 100644
index 0000000..f7d06ca
--- /dev/null
+++ b/SOURCES/glibc-rh741105.patch
@@ -0,0 +1,84 @@
+Short description: Work ld.so --verify crash on debuginfo files.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #741105, #767146
+Upstream status: not-needed
+
+This change is designed to work around running ld.so on a debuginfo
+file. This is the wrong fix for this problem and should be dropped.
+The correct solution is to mark debuginfo files as new types of
+ELF files.
+
+Index: glibc-2.22-386-g95e8397/elf/dl-load.c
+===================================================================
+--- glibc-2.22-386-g95e8397.orig/elf/dl-load.c
++++ glibc-2.22-386-g95e8397/elf/dl-load.c
+@@ -881,7 +881,8 @@ _dl_map_object_from_fd (const char *name
+ 
+   /* Get file information.  */
+   struct r_file_id id;
+-  if (__glibc_unlikely (!_dl_get_file_id (fd, &id)))
++  struct stat64 st;
++  if (__glibc_unlikely (!_dl_get_file_id (fd, &id, &st)))
+     {
+       errstring = N_("cannot stat shared object");
+     call_lose_errno:
+@@ -1076,6 +1077,16 @@ _dl_map_object_from_fd (const char *name
+ 		= N_("ELF load command address/offset not properly aligned");
+ 	      goto call_lose;
+ 	    }
++	  if (__glibc_unlikely (ph->p_offset + ph->p_filesz > st.st_size))
++	    {
++	      /* If the segment requires zeroing of part of its last
++		 page, we'll crash when accessing the unmapped page.
++		 There's still a possibility of a race, if the shared
++		 object is truncated between the fxstat above and the
++		 memset below.  */
++	      errstring = N_("ELF load command past end of file");
++	      goto call_lose;
++	    }
+ 
+ 	  struct loadcmd *c = &loadcmds[nloadcmds++];
+ 	  c->mapstart = ALIGN_DOWN (ph->p_vaddr, GLRO(dl_pagesize));
+Index: glibc-2.22-386-g95e8397/sysdeps/generic/dl-fileid.h
+===================================================================
+--- glibc-2.22-386-g95e8397.orig/sysdeps/generic/dl-fileid.h
++++ glibc-2.22-386-g95e8397/sysdeps/generic/dl-fileid.h
+@@ -29,7 +29,8 @@ struct r_file_id
+    On error, returns false, with errno set.  */
+ static inline bool
+ _dl_get_file_id (int fd __attribute__ ((unused)),
+-		 struct r_file_id *id __attribute__ ((unused)))
++		 struct r_file_id *id __attribute__ ((unused)),
++		 struct stat64_t *st __attribute__((unused)))
+ {
+   return true;
+ }
+Index: glibc-2.22-386-g95e8397/sysdeps/posix/dl-fileid.h
+===================================================================
+--- glibc-2.22-386-g95e8397.orig/sysdeps/posix/dl-fileid.h
++++ glibc-2.22-386-g95e8397/sysdeps/posix/dl-fileid.h
+@@ -27,18 +27,16 @@ struct r_file_id
+     ino64_t ino;
+   };
+ 
+-/* Sample FD to fill in *ID.  Returns true on success.
++/* Sample FD to fill in *ID and *ST.  Returns true on success.
+    On error, returns false, with errno set.  */
+ static inline bool
+-_dl_get_file_id (int fd, struct r_file_id *id)
++_dl_get_file_id (int fd, struct r_file_id *id, struct stat64 *st)
+ {
+-  struct stat64 st;
+-
+-  if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, &st) < 0))
++  if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, st) < 0))
+     return false;
+ 
+-  id->dev = st.st_dev;
+-  id->ino = st.st_ino;
++  id->dev = st->st_dev;
++  id->ino = st->st_ino;
+   return true;
+ }
+ 
diff --git a/SOURCES/glibc-rh819430.patch b/SOURCES/glibc-rh819430.patch
new file mode 100644
index 0000000..8b766f1
--- /dev/null
+++ b/SOURCES/glibc-rh819430.patch
@@ -0,0 +1,91 @@
+Short description: fnmatch() fails with MBCS.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #819430, #826149, #826151
+Bug-Upstream: #14185
+Upstream status: not-submitted
+
+fnmatch() fails when '*' wildcard is applied on the file name
+containing multi-byte character(s)
+
+This needs to be reviewed thoroughly and go upstream with a
+new test case.
+
+diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c
+--- a/posix/fnmatch.c	2012-01-01 07:16:32.000000000 -0500
++++ b/posix/fnmatch.c	2012-05-23 14:14:29.099461189 -0400
+@@ -333,6 +333,7 @@ fnmatch (pattern, string, flags)
+ # if HANDLE_MULTIBYTE
+   if (__builtin_expect (MB_CUR_MAX, 1) != 1)
+     {
++      const char *orig_pattern = pattern;
+       mbstate_t ps;
+       size_t n;
+       const char *p;
+@@ -356,10 +357,8 @@ fnmatch (pattern, string, flags)
+ 						 alloca_used);
+ 	  n = mbsrtowcs (wpattern, &p, n + 1, &ps);
+ 	  if (__glibc_unlikely (n == (size_t) -1))
+-	    /* Something wrong.
+-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+-	       already done?  */
+-	    return -1;
++	    /* Something wrong: Fall back to single byte matching. */
++	    goto try_singlebyte;
+ 	  if (p)
+ 	    {
+ 	      memset (&ps, '\0', sizeof (ps));
+@@ -371,10 +370,8 @@ fnmatch (pattern, string, flags)
+ 	prepare_wpattern:
+ 	  n = mbsrtowcs (NULL, &pattern, 0, &ps);
+ 	  if (__glibc_unlikely (n == (size_t) -1))
+-	    /* Something wrong.
+-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+-	       already done?  */
+-	    return -1;
++	    /*Something wrong: Fall back to single byte matching. */
++	    goto try_singlebyte;
+ 	  if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t)))
+ 	    {
+ 	      __set_errno (ENOMEM);
+@@ -401,14 +398,8 @@ fnmatch (pattern, string, flags)
+ 						alloca_used);
+ 	  n = mbsrtowcs (wstring, &p, n + 1, &ps);
+ 	  if (__glibc_unlikely (n == (size_t) -1))
+-	    {
+-	      /* Something wrong.
+-		 XXX Do we have to set `errno' to something which
+-		 mbsrtows hasn't already done?  */
+-	    free_return:
+-	      free (wpattern_malloc);
+-	      return -1;
+-	    }
++	    /* Something wrong: Fall back to single byte matching. */
++	    goto free_and_try_singlebyte;
+ 	  if (p)
+ 	    {
+ 	      memset (&ps, '\0', sizeof (ps));
+@@ -420,10 +411,8 @@ fnmatch (pattern, string, flags)
+ 	prepare_wstring:
+ 	  n = mbsrtowcs (NULL, &string, 0, &ps);
+ 	  if (__glibc_unlikely (n == (size_t) -1))
+-	    /* Something wrong.
+-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+-	       already done?  */
+-	    goto free_return;
++	    /* Something wrong: Fall back to singlebyte matching. */
++	    goto free_and_try_singlebyte;
+ 	  if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t)))
+ 	    {
+ 	      free (wpattern_malloc);
+@@ -450,6 +439,10 @@ fnmatch (pattern, string, flags)
+       free (wpattern_malloc);
+ 
+       return res;
++      free_and_try_singlebyte:
++	free(wpattern_malloc);
++      try_singlebyte:
++	pattern = orig_pattern;
+     }
+ # endif  /* mbstate_t and mbsrtowcs or _LIBC.  */
+ 
diff --git a/SOURCES/glibc-rh827510.patch b/SOURCES/glibc-rh827510.patch
new file mode 100644
index 0000000..6115891
--- /dev/null
+++ b/SOURCES/glibc-rh827510.patch
@@ -0,0 +1,37 @@
+Short description: Fix newlocale error return.
+Author(s): Fedora glibc team <glibc@lists.fedoraproject.org>
+Origin: PATCH
+Bug-RHEL: #832516
+Bug-Fedora: #827510
+Bug-Upstream: #14247
+Upstream status: not-submitted
+
+This needs to go upstream right away to fix the error case for
+newlocale not correctly returning an error.
+
+2012-06-14  Jeff Law  <law@redhat.com>
+
+	* locale/loadlocale.c (_nl_load_locale): Delay setting
+	file->decided until we have successfully loaded the file's
+	data.
+
+diff --git a/locale/loadlocale.c b/locale/loadlocale.c
+index e3fa187..9fd9216 100644
+--- a/locale/loadlocale.c
++++ b/locale/loadlocale.c
+@@ -169,7 +169,6 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
+   int save_err;
+   int alloc = ld_mapped;
+ 
+-  file->decided = 1;
+   file->data = NULL;
+ 
+   fd = __open_nocancel (file->filename, O_RDONLY | O_CLOEXEC);
+@@ -278,6 +277,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
+   newdata->alloc = alloc;
+ 
+   file->data = newdata;
++  file->decided = 1;
+ }
+ 
+ void
diff --git a/SOURCES/glibc-with-nonshared-cflags.patch b/SOURCES/glibc-with-nonshared-cflags.patch
new file mode 100644
index 0000000..af7f65b
--- /dev/null
+++ b/SOURCES/glibc-with-nonshared-cflags.patch
@@ -0,0 +1,139 @@
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Jul 4 11:34:36 2018 +0200
+
+    Add --with-nonshared-cflags option to configure
+
+Submitted upstream:
+
+  https://sourceware.org/ml/libc-alpha/2018-07/msg00071.html
+
+diff --git a/INSTALL b/INSTALL
+index 0a22aa7d01e6e87b..0f80d9d615db6d42 100644
+--- a/INSTALL
++++ b/INSTALL
+@@ -90,6 +90,15 @@ if 'CFLAGS' is specified it must enable optimization.  For example:
+      library will still be usable, but functionality may be lost--for
+      example, you can't build a shared libc with old binutils.
+ 
++'--with-nonshared-cflags=CFLAGS'
++     Use additional compiler flags CFLAGS to build the parts of the
++     library which are always statically linked into applications and
++     libraries even with shared linking (that is, the object files
++     contained in 'lib*_nonshared.a' libraries).  The build process will
++     automatically use the appropriate flags, but this option can be
++     used to set additional flags required for building applications and
++     libraries, to match local policy.
++
+ '--disable-shared'
+      Don't build shared libraries even if it is possible.  Not all
+      systems support shared libraries; you need ELF support and
+diff --git a/Makeconfig b/Makeconfig
+index 608ffe648c80c724..b0b27f0113ac18b8 100644
+--- a/Makeconfig
++++ b/Makeconfig
+@@ -1038,7 +1038,7 @@ object-suffixes-for-libc += .oS
+ # Must build the routines as PIC, though, because they can end up in (users')
+ # shared objects.  We don't want to use CFLAGS-os because users may, for
+ # example, make that processor-specific.
+-CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag)
++CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) $(extra-nonshared-cflags)
+ CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
+ libtype.oS = lib%_nonshared.a
+ endif
+diff --git a/config.make.in b/config.make.in
+index d9891b2cd8ec3fbf..a6fe48d31f4d2725 100644
+--- a/config.make.in
++++ b/config.make.in
+@@ -110,6 +110,7 @@ BUILD_CC = @BUILD_CC@
+ CFLAGS = @CFLAGS@
+ CPPFLAGS-config = @CPPFLAGS@
+ CPPUNDEFS = @CPPUNDEFS@
++extra-nonshared-cflags = @extra_nonshared_cflags@
+ ASFLAGS-config = @ASFLAGS_config@
+ AR = @AR@
+ NM = @NM@
+diff --git a/configure b/configure
+index ef1830221522b7a5..fec0efff8216addd 100755
+--- a/configure
++++ b/configure
+@@ -684,6 +684,7 @@ force_install
+ bindnow
+ hardcoded_path_in_tests
+ enable_timezone_tools
++extra_nonshared_cflags
+ use_default_link
+ sysheaders
+ ac_ct_CXX
+@@ -762,6 +763,7 @@ with_binutils
+ with_selinux
+ with_headers
+ with_default_link
++with_nonshared_cflags
+ enable_sanity_checks
+ enable_shared
+ enable_profile
+@@ -1479,6 +1481,8 @@ Optional Packages:
+   --with-headers=PATH     location of system headers to use (for example
+                           /usr/src/linux/include) [default=compiler default]
+   --with-default-link     do not use explicit linker scripts
++  --with-nonshared-cflags=FLAGS
++                          build nonshared libraries with additional FLAGS
+   --with-cpu=CPU          select code for CPU variant
+ 
+ Some influential environment variables:
+@@ -3336,6 +3340,16 @@ else
+ fi
+ 
+ 
++
++# Check whether --with-nonshared-cflags was given.
++if test "${with_nonshared_cflags+set}" = set; then :
++  withval=$with_nonshared_cflags; extra_nonshared_cflags=$withval
++else
++  extra_nonshared_cflags=
++fi
++
++
++
+ # Check whether --enable-sanity-checks was given.
+ if test "${enable_sanity_checks+set}" = set; then :
+   enableval=$enable_sanity_checks; enable_sanity=$enableval
+diff --git a/configure.ac b/configure.ac
+index dc517017f588626a..154185d70de38928 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -154,6 +154,14 @@ AC_ARG_WITH([default-link],
+ 	    [use_default_link=$withval],
+ 	    [use_default_link=default])
+ 
++dnl Additional build flags injection.
++AC_ARG_WITH([nonshared-cflags],
++	    AC_HELP_STRING([--with-nonshared-cflags=FLAGS],
++			   [build nonshared libraries with additional FLAGS]),
++	    [extra_nonshared_cflags=$withval],
++	    [extra_nonshared_cflags=])
++AC_SUBST(extra_nonshared_cflags)
++
+ AC_ARG_ENABLE([sanity-checks],
+ 	      AC_HELP_STRING([--disable-sanity-checks],
+ 			     [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
+diff --git a/manual/install.texi b/manual/install.texi
+index 422da1447eb4dc68..eaf0cd09e7501b96 100644
+--- a/manual/install.texi
++++ b/manual/install.texi
+@@ -117,6 +117,15 @@ problem and suppress these constructs, so that the library will still be
+ usable, but functionality may be lost---for example, you can't build a
+ shared libc with old binutils.
+ 
++@item --with-nonshared-cflags=@var{cflags}
++Use additional compiler flags @var{cflags} to build the parts of the
++library which are always statically linked into applications and
++libraries even with shared linking (that is, the object files contained
++in @file{lib*_nonshared.a} libraries).  The build process will
++automatically use the appropriate flags, but this option can be used to
++set additional flags required for building applications and libraries,
++to match local policy.
++
+ @c disable static doesn't work currently
+ @c @item --disable-static
+ @c Don't build static libraries.  Static libraries aren't that useful these
diff --git a/SOURCES/nscd.conf b/SOURCES/nscd.conf
new file mode 100644
index 0000000..8a24a78
--- /dev/null
+++ b/SOURCES/nscd.conf
@@ -0,0 +1 @@
+d /run/nscd 0755 root root
diff --git a/SOURCES/nsswitch.conf b/SOURCES/nsswitch.conf
new file mode 100644
index 0000000..b49a3b2
--- /dev/null
+++ b/SOURCES/nsswitch.conf
@@ -0,0 +1,56 @@
+#
+# /etc/nsswitch.conf
+#
+# An example Name Service Switch config file. This file should be
+# sorted with the most-used services at the beginning.
+#
+# The entry '[NOTFOUND=return]' means that the search for an
+# entry should stop if the search in the previous entry turned
+# up nothing. Note that if the search failed due to some other reason
+# (like no NIS server responding) then the search continues with the
+# next entry.
+#
+# Valid entries include:
+#
+#	nisplus			Use NIS+ (NIS version 3)
+#	nis			Use NIS (NIS version 2), also called YP
+#	dns			Use DNS (Domain Name Service)
+#	files			Use the local files in /etc
+#	db			Use the pre-processed /var/db files
+#	compat			Use /etc files plus *_compat pseudo-databases
+#	hesiod			Use Hesiod (DNS) for user lookups
+#	sss			Use sssd (System Security Services Daemon)
+#	[NOTFOUND=return]	Stop searching if not found so far
+#
+# 'sssd' performs its own 'files'-based caching, so it should
+# generally come before 'files'.
+
+# To use 'db', install the nss_db package, and put the 'db' in front
+# of 'files' for entries you want to be looked up first in the
+# databases, like this:
+#
+# passwd:    db files
+# shadow:    db files
+# group:     db files
+
+passwd:     sss files
+shadow:     files sss
+group:      sss files
+
+hosts:      files dns myhostname
+
+bootparams: files
+
+ethers:     files
+netmasks:   files
+networks:   files
+protocols:  files
+rpc:        files
+services:   files sss
+
+netgroup:   sss
+
+publickey:  files
+
+automount:  files sss
+aliases:    files
diff --git a/SOURCES/power6emul.c b/SOURCES/power6emul.c
new file mode 100644
index 0000000..1b0187b
--- /dev/null
+++ b/SOURCES/power6emul.c
@@ -0,0 +1,273 @@
+/* Emulate power6 mf[tf]gpr and fri[zpmn] instructions.
+   Copyright (C) 2006 Red Hat, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2006.
+
+   This 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.
+
+   It is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <signal.h>
+#include <stdio.h>
+
+extern double frip (double), friz (double), frin (double), frim (double);
+asm (".globl frip, friz, frin, frim\n.hidden frip, friz, frin, frim\n\t"
+#ifdef __powerpc64__
+	".section \".toc\",\"aw\"\n"
+"8:"	".tc FD_43300000_0[TC],0x4330000000000000\n"
+"9:"	".tc FD_3fe00000_0[TC],0x3fe0000000000000\n\t"
+	".previous\n\t"
+#else
+	".rodata\n\t"
+	".align 2\n"
+"8:"	".long 0x59800000\n"
+"9:"	".long 0x3f000000\n\t"
+	".previous\n\t"
+#endif
+	"# frip == ceil\n"
+"frip:"	"mffs    11\n\t"
+#ifdef __powerpc64__
+	"lfd     13,8b@toc(2)\n\t"
+#else
+	"mflr    11\n\t"
+	"bcl     20,31,1f\n"
+"1:"	"mflr    9\n\t"
+	"addis   9,9,8b-1b@ha\n\t"
+	"lfs     13,8b-1b@l(9)\n\t"
+	"mtlr    11\n\t"
+#endif
+	"fabs    0,1\n\t"
+	"fsub    12,13,13\n\t"
+	"fcmpu   7,0,13\n\t"
+	"fcmpu   6,1,12\n\t"
+	"bnllr-  7\n\t"
+	"mtfsfi  7,2\n\t"
+	"ble-    6,2f\n\t"
+	"fadd    1,1,13\n\t"
+	"fsub    1,1,13\n\t"
+	"fabs    1,1\n\t"
+	"mtfsf   0x01,11\n\t"
+	"blr\n"
+"2:"	"bge-    6,3f\n\t"
+	"fsub    1,1,13\n\t"
+	"fadd    1,1,13\n\t"
+	"fnabs   1,1\n"
+"3:"	"mtfsf   0x01,11\n\t"
+	"blr\n\t"
+	"# friz == trunc\n"
+"friz:"	"mffs    11\n\t"
+#ifdef __powerpc64__
+	"lfd     13,8b@toc(2)\n\t"
+#else
+	"mflr    11\n\t"
+	"bcl     20,31,1f\n"
+"1:"	"mflr    9\n\t"
+	"addis   9,9,8b-1b@ha\n\t"
+	"lfs     13,8b-1b@l(9)\n\t"
+	"mtlr    11\n\t"
+#endif
+	"fabs    0,1\n\t"
+	"fsub    12,13,13\n\t"
+	"fcmpu   7,0,13\n\t"
+	"fcmpu   6,1,12\n\t"
+	"bnllr-  7\n\t"
+	"mtfsfi  7,1\n\t"
+	"ble-    6,2f\n\t"
+	"fadd    1,1,13\n\t"
+	"fsub    1,1,13\n\t"
+	"fabs    1,1\n\t"
+	"mtfsf   0x01,11\n\t"
+	"blr\n"
+"2:"	"bge-    6,3f\n\t"
+	"fsub    1,1,13\n\t"
+	"fadd    1,1,13\n\t"
+	"fnabs   1,1\n"
+"3:"	"mtfsf   0x01,11\n\t"
+	"blr\n\t"
+	"# frin == round\n"
+"frin:"	"mffs    11\n\t"
+#ifdef __powerpc64__
+	"lfd     13,8b@toc(2)\n\t"
+#else
+	"mflr    11\n\t"
+	"bcl     20,31,1f\n"
+"1:"	"mflr    9\n\t"
+	"addis   9,9,8b-1b@ha\n\t"
+	"addi    9,9,8b-1b@l\n\t"
+	"mtlr    11\n\t"
+	"lfs     13,0(9)\n\t"
+#endif
+	"fabs    0,1\n\t"
+	"fsub    12,13,13\n\t"
+	"fcmpu   7,0,13\n\t"
+	"fcmpu   6,1,12\n\t"
+	"bnllr-  7\n\t"
+	"mtfsfi  7,1\n\t"
+#ifdef __powerpc64__
+	"lfd     10,9b@toc(2)\n\t"
+#else
+	"lfs     10,9b-8b(9)\n\t"
+#endif
+	"ble-    6,2f\n\t"
+	"fadd    1,1,10\n\t"
+	"fadd    1,1,13\n\t"
+	"fsub    1,1,13\n\t"
+	"fabs    1,1\n\t"
+	"mtfsf   0x01,11\n\t"
+	"blr\n"
+"2:"	"fsub    9,1,10\n\t"
+	"bge-    6,3f\n\t"
+	"fsub    1,9,13\n\t"
+	"fadd    1,1,13\n\t"
+	"fnabs   1,1\n"
+"3:"	"mtfsf   0x01,11\n\t"
+	"blr\n\t"
+	"# frim == floor\n"
+"frim:"	"mffs    11\n\t"
+#ifdef __powerpc64__
+	"lfd     13,8b@toc(2)\n\t"
+#else
+	"mflr    11\n\t"
+	"bcl     20,31,1f\n"
+"1:"	"mflr    9\n\t"
+	"addis   9,9,8b-1b@ha\n\t"
+	"lfs     13,8b-1b@l(9)\n\t"
+	"mtlr    11\n\t"
+#endif
+	"fabs    0,1\n\t"
+	"fsub    12,13,13\n\t"
+	"fcmpu   7,0,13\n\t"
+	"fcmpu   6,1,12\n\t"
+	"bnllr-  7\n\t"
+	"mtfsfi  7,3\n\t"
+	"ble-    6,2f\n\t"
+	"fadd    1,1,13\n\t"
+	"fsub    1,1,13\n\t"
+	"fabs    1,1\n\t"
+	"mtfsf   0x01,11\n\t"
+	"blr\n"
+"2:"	"bge-    6,3f\n\t"
+	"fsub    1,1,13\n\t"
+	"fadd    1,1,13\n\t"
+	"fnabs   1,1\n"
+"3:"	"mtfsf   0x01,11\n\t"
+	"blr\n");
+
+#ifdef __powerpc64__
+#define m1 0x5555555555555555L
+#define m2 0x3333333333333333L
+#define m3 0x0f0f0f0f0f0f0f0fL
+#else
+#define m1 0x55555555
+#define m2 0x33333333
+#define m3 0x0f0f0f0f
+#endif
+
+static inline unsigned long
+popcntb (unsigned long n)
+{
+  n -= (n >> 1) & m1;
+  n = (n & m2) + ((n >> 2) & m2);
+  n = (n + (n >> 4)) & m3;
+  return n;
+}
+
+static void
+catch_sigill (int signal, struct sigcontext *ctx)
+{
+  unsigned int insn = *(unsigned int *) (ctx->regs->nip);
+#ifdef __powerpc64__
+  if ((insn & 0xfc1f07ff) == 0x7c0005be) /* mftgpr */
+    {
+      unsigned long *regs = (unsigned long *) ctx->regs;
+      unsigned fpr = (insn >> 11) & 0x1f;
+      unsigned gpr = (insn >> 21) & 0x1f;
+      regs[gpr] = regs[fpr + 0x30];
+      ctx->regs->nip += 4;
+      return;
+    }
+  if ((insn & 0xfc1f07ff) == 0x7c0004be) /*mffgpr */
+    {
+      unsigned long *regs = (unsigned long *) ctx->regs;
+      unsigned fpr = (insn >> 21) & 0x1f;
+      unsigned gpr = (insn >> 11) & 0x1f;
+      regs[fpr + 0x30] = regs[gpr];
+      ctx->regs->nip += 4;
+      return;
+    }
+#endif
+  if ((insn & 0xfc1f073f) == 0xfc000310) /* fri[pznm] */
+    {
+#ifdef __powerpc64__
+      double *regs = (double *) (((char *) ctx->regs) + 0x30 * 8);
+      unsigned int *fpscr = (unsigned int *) (((char *) ctx->regs) + 0x50 * 8 + 4);
+#else
+      double *regs = (double *) (((char *) ctx->regs) + 0x30 * 4);
+      unsigned int *fpscr = (unsigned int *) (((char *) ctx->regs) + 0x30 * 4 + 0x20 * 8 + 4);
+#endif
+      unsigned dest = (insn >> 21) & 0x1f;
+      unsigned src = (insn >> 11) & 0x1f;
+      switch (insn & 0xc0)
+	{
+	case 0:
+	  regs[dest] = frin (regs[src]);
+	  break;
+	case 0x40:
+	  regs[dest] = friz (regs[src]);
+	  break;
+	case 0x80:
+	  regs[dest] = frip (regs[src]);
+	  break;
+	case 0xc0:
+	  regs[dest] = frim (regs[src]);
+	  break;
+	}
+      /* Update raised exceptions.  */
+      union { unsigned int i[2]; double d; } u;
+      asm volatile ("mffs %0" : "=f" (u.d));
+      u.i[1] &= 0xfffe0000; /* Is this correct?  */
+      *fpscr |= u.i[1];
+      ctx->regs->nip += 4;
+      return;
+    }
+  if ((insn & 0xfc00ffff) == 0x7c0000f4) /* popcntb */
+    {
+      unsigned long *regs = (unsigned long *) ctx->regs;
+      unsigned dest = (insn >> 16) & 0x1f;
+      unsigned src = (insn >> 21) & 0x1f;
+      unsigned long res = 0;
+      int i;
+
+      regs[dest] = popcntb (regs[src]);
+      ctx->regs->nip += 4;
+      return;
+    }
+
+  struct sigaction sa;
+  sa.sa_handler = SIG_DFL;
+  sigemptyset (&sa.sa_mask);
+  sa.sa_flags = 0;
+  sigaction (signal, &sa, NULL);
+  raise (signal);
+}
+
+static void
+__attribute__ ((constructor))
+install_handler (void)
+{
+  struct sigaction sa;
+  sa.sa_handler = (void *) catch_sigill;
+  sigemptyset (&sa.sa_mask);
+  sa.sa_flags = SA_RESTART;
+  sigaction (SIGILL, &sa, NULL);
+}
diff --git a/SPECS/glibc.spec b/SPECS/glibc.spec
new file mode 100644
index 0000000..0ec340c
--- /dev/null
+++ b/SPECS/glibc.spec
@@ -0,0 +1,2795 @@
+%define glibcsrcdir glibc-2.28
+%define glibcversion 2.28
+%define glibcrelease 42%{?dist}
+# Pre-release tarballs are pulled in from git using a command that is
+# effectively:
+#
+# git archive HEAD --format=tar --prefix=$(git describe --match 'glibc-*')/ \
+#	> $(git describe --match 'glibc-*').tar
+# gzip -9 $(git describe --match 'glibc-*').tar
+#
+# glibc_release_url is only defined when we have a release tarball.
+%{lua: if string.match(rpm.expand("%glibcsrcdir"), "^glibc%-[0-9.]+$") then
+  rpm.define("glibc_release_url https://ftp.gnu.org/gnu/glibc/") end}
+##############################################################################
+# We support the following options:
+# --with/--without,
+# * testsuite - Running the testsuite.
+# * benchtests - Running and building benchmark subpackage.
+# * bootstrap - Bootstrapping the package.
+# * werror - Build with -Werror
+# * docs - Build with documentation and the required dependencies.
+# * valgrind - Run smoke tests with valgrind to verify dynamic loader.
+#
+# You must always run the testsuite for production builds.
+# Default: Always run the testsuite.
+%bcond_without testsuite
+# Default: Always build the benchtests.
+%bcond_without benchtests
+# Default: Not bootstrapping.
+%bcond_with bootstrap
+# Default: Enable using -Werror
+%bcond_without werror
+# Default: Always build documentation.
+%bcond_without docs
+
+# Default: Always run valgrind tests if there is architecture support.
+%ifarch %{valgrind_arches}
+%bcond_without valgrind
+%else
+%bcond_with valgrind
+%endif
+# Restrict %%{valgrind_arches} further in case there are problems with
+# the smoke test.
+%if %{with valgrind}
+%ifarch ppc64 ppc64p7
+# The valgrind smoke test does not work on ppc64, ppc64p7 (bug 1273103).
+%undefine with_valgrind
+%endif
+%endif
+
+%if %{with bootstrap}
+# Disable benchtests, -Werror, docs, and valgrind if we're bootstrapping
+%undefine with_benchtests
+%undefine with_werror
+%undefine with_docs
+%undefine with_valgrind
+%endif
+##############################################################################
+# Auxiliary arches are those arches that can be built in addition
+# to the core supported arches. You either install an auxarch or
+# you install the base arch, not both. You would do this in order
+# to provide a more optimized version of the package for your arch.
+%define auxarches athlon alphaev6
+
+# Only some architectures have static PIE support.
+%define pie_arches %{ix86} x86_64
+
+# Build the POWER9 runtime on POWER, but only for downstream.
+%ifarch ppc64le
+%define buildpower9 0%{?rhel} > 0
+%else
+%define buildpower9 0
+%endif
+
+##############################################################################
+# Any architecture/kernel combination that supports running 32-bit and 64-bit
+# code in userspace is considered a biarch arch.
+%define biarcharches %{ix86} x86_64 %{power64} s390 s390x
+##############################################################################
+# If the debug information is split into two packages, the core debuginfo
+# pacakge and the common debuginfo package then the arch should be listed
+# here. If the arch is not listed here then a single core debuginfo package
+# will be created for the architecture.
+%define debuginfocommonarches %{biarcharches} alpha alphaev6
+##############################################################################
+# %%package glibc - The GNU C Library (glibc) core package.
+##############################################################################
+Summary: The GNU libc libraries
+Name: glibc
+Version: %{glibcversion}
+Release: %{glibcrelease}
+
+# In general, GPLv2+ is used by programs, LGPLv2+ is used for
+# libraries.
+#
+# LGPLv2+ with exceptions is used for things that are linked directly
+# into dynamically linked programs and shared libraries (e.g. crt
+# files, lib*_nonshared.a).  Historically, this exception also applies
+# to parts of libio.
+#
+# GPLv2+ with exceptions is used for parts of the Arm unwinder.
+#
+# GFDL is used for the documentation.
+#
+# Some other licenses are used in various places (BSD, Inner-Net,
+# ISC, Public Domain).
+#
+# HSRL and FSFAP are only used in test cases, which currently do not
+# ship in binary RPMs, so they are not listed here.  MIT is used for
+# scripts/install-sh, which does not ship, either.
+#
+# GPLv3+ is used by manual/texinfo.tex, which we do not use.
+#
+# LGPLv3+ is used by some Hurd code, which we do not build.
+#
+# LGPLv2 is used in one place (time/timespec_get.c, by mistake), but
+# it is not actually compiled, so it does not matter for libraries.
+License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ and GPLv2+ with exceptions and BSD and Inner-Net and ISC and Public Domain and GFDL
+
+URL: http://www.gnu.org/software/glibc/
+Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.xz
+Source1: build-locale-archive.c
+Source4: nscd.conf
+Source7: nsswitch.conf
+Source8: power6emul.c
+Source9: bench.mk
+Source10: glibc-bench-compare
+# A copy of localedata/SUPPORTED in the Source0 tarball.  The
+# SUPPORTED file is used below to generate the list of locale
+# packages, using a Lua snippet.
+Source11: SUPPORTED
+
+# Include in the source RPM for reference.
+Source12: ChangeLog.old
+
+##############################################################################
+# Patches:
+# - See each individual patch file for origin and upstream status.
+# - For new patches follow template.patch format.
+##############################################################################
+Patch1: glibc-post_upgrade.patch
+Patch2: glibc-fedora-nscd.patch
+Patch3: glibc-rh697421.patch
+Patch4: glibc-fedora-linux-tcsetattr.patch
+Patch5: glibc-rh741105.patch
+Patch6: glibc-fedora-localedef.patch
+Patch7: glibc-fedora-nis-rh188246.patch
+Patch8: glibc-fedora-manual-dircategory.patch
+Patch9: glibc-rh827510.patch
+Patch10: glibc-fedora-locarchive.patch
+Patch11: glibc-fedora-streams-rh436349.patch
+Patch12: glibc-rh819430.patch
+Patch13: glibc-fedora-localedata-rh61908.patch
+Patch14: glibc-fedora-__libc_multiple_libcs.patch
+Patch15: glibc-rh1070416.patch
+Patch16: glibc-nscd-sysconfig.patch
+Patch17: glibc-cs-path.patch
+Patch18: glibc-c-utf8-locale.patch
+Patch23: glibc-python3.patch
+Patch24: glibc-with-nonshared-cflags.patch
+Patch25: glibc-asflags.patch
+Patch27: glibc-rh1614253.patch
+Patch28: glibc-rh1577365.patch
+Patch29: glibc-rh1615781.patch
+Patch30: glibc-rh1615784.patch
+Patch31: glibc-rh1615790.patch
+Patch32: glibc-rh1622675.patch
+Patch33: glibc-rh1622678-1.patch
+Patch34: glibc-rh1622678-2.patch
+Patch35: glibc-rh1631293-1.patch
+Patch36: glibc-rh1631293-2.patch
+Patch37: glibc-rh1623536.patch
+Patch38: glibc-rh1631722.patch
+Patch39: glibc-rh1631730.patch
+Patch40: glibc-rh1623536-2.patch
+Patch41: glibc-rh1614979.patch
+Patch42: glibc-rh1645593.patch
+Patch43: glibc-rh1645596.patch
+Patch44: glibc-rh1645604.patch
+Patch45: glibc-rh1646379.patch
+Patch46: glibc-rh1645601.patch
+Patch52: glibc-rh1638523-1.patch
+Patch47: glibc-rh1638523-2.patch
+Patch48: glibc-rh1638523-3.patch
+Patch49: glibc-rh1638523-4.patch
+Patch50: glibc-rh1638523-5.patch
+Patch51: glibc-rh1638523-6.patch
+Patch53: glibc-rh1641982.patch
+Patch54: glibc-rh1645597.patch
+Patch55: glibc-rh1650560-1.patch
+Patch56: glibc-rh1650560-2.patch
+Patch57: glibc-rh1650563.patch
+Patch58: glibc-rh1650566.patch
+Patch59: glibc-rh1650571.patch
+Patch60: glibc-rh1638520.patch
+Patch61: glibc-rh1651274.patch
+Patch62: glibc-rh1654010-1.patch
+Patch63: glibc-rh1635779.patch
+Patch64: glibc-rh1654010-2.patch
+Patch65: glibc-rh1654010-3.patch
+Patch66: glibc-rh1654010-4.patch
+Patch67: glibc-rh1654010-5.patch
+Patch68: glibc-rh1654010-6.patch
+Patch69: glibc-rh1642094-1.patch
+Patch70: glibc-rh1642094-2.patch
+Patch71: glibc-rh1642094-3.patch
+Patch72: glibc-rh1654872-1.patch
+Patch73: glibc-rh1654872-2.patch
+
+##############################################################################
+# Continued list of core "glibc" package information:
+##############################################################################
+Obsoletes: glibc-profile < 2.4
+Provides: ldconfig
+
+# The dynamic linker supports DT_GNU_HASH
+Provides: rtld(GNU_HASH)
+Requires: glibc-common = %{version}-%{release}
+
+# Various components (regex, glob) have been imported from gnulib.
+Provides: bundled(gnulib)
+
+Requires(pre): basesystem
+
+# This is for building auxiliary programs like memusage, nscd
+# For initial glibc bootstraps it can be commented out
+%if %{without bootstrap}
+BuildRequires: gd-devel libpng-devel zlib-devel
+%endif
+%if %{with docs}
+# Removing texinfo will cause check-safety.sh test to fail because it seems to
+# trigger documentation generation based on dependencies.  We need to fix this
+# upstream in some way that doesn't depend on generating docs to validate the
+# texinfo.  I expect it's simply the wrong dependency for that target.
+BuildRequires: texinfo >= 5.0
+%endif
+%if %{without bootstrap}
+BuildRequires: libselinux-devel >= 1.33.4-3
+%endif
+BuildRequires: audit-libs-devel >= 1.1.3, sed >= 3.95, libcap-devel, gettext
+# We need procps-ng (/bin/ps), util-linux (/bin/kill), and gawk (/bin/awk),
+# but it is more flexible to require the actual programs and let rpm infer
+# the packages. However, until bug 1259054 is widely fixed we avoid the
+# following:
+# BuildRequires: /bin/ps, /bin/kill, /bin/awk
+# And use instead (which should be reverted some time in the future):
+BuildRequires: procps-ng, util-linux, gawk
+BuildRequires: systemtap-sdt-devel
+
+%if %{with valgrind}
+# Require valgrind for smoke testing the dynamic loader to make sure we
+# have not broken valgrind.
+BuildRequires: valgrind
+%endif
+
+# We use systemd rpm macros for nscd
+BuildRequires: systemd
+
+# We use python for the microbenchmarks and locale data regeneration
+# from unicode sources (carried out manually). We choose python3
+# explicitly because it supports both use cases.  On some
+# distributions, python3 does not actually install /usr/bin/python3,
+# so we also depend on python3-devel.
+BuildRequires: python3 python3-devel
+
+# This is the first GCC version with enhanced valgrind support in the
+# inline expansion of string functions (#1532205, #1652929, #1652932).
+BuildRequires: gcc >= 8.2.1-3.4
+%define enablekernel 3.2
+Conflicts: kernel < %{enablekernel}
+%define target %{_target_cpu}-redhat-linux
+%ifarch %{arm}
+%define target %{_target_cpu}-redhat-linuxeabi
+%endif
+%ifarch %{power64}
+%ifarch ppc64le
+%define target ppc64le-redhat-linux
+%else
+%define target ppc64-redhat-linux
+%endif
+%endif
+
+# GNU make 4.0 introduced the -O option.
+BuildRequires: make >= 4.0
+
+# The intl subsystem generates a parser using bison.
+BuildRequires: bison >= 2.7
+
+# binutils 2.30-17 is needed for --generate-missing-build-notes.
+BuildRequires: binutils >= 2.30-17
+
+# Earlier releases have broken support for IRELATIVE relocations
+Conflicts: prelink < 0.4.2
+
+%if 0%{?_enable_debug_packages}
+BuildRequires: elfutils >= 0.72
+BuildRequires: rpm >= 4.2-0.56
+%endif
+
+%if %{without bootstrap}
+%if %{with testsuite}
+# The testsuite builds static C++ binaries that require a C++ compiler,
+# static C++ runtime from libstdc++-static, and lastly static glibc.
+BuildRequires: gcc-c++
+BuildRequires: libstdc++-static
+# A configure check tests for the ability to create static C++ binaries
+# before glibc is built and therefore we need a glibc-static for that
+# check to pass even if we aren't going to use any of those objects to
+# build the tests.
+BuildRequires: glibc-static
+
+# libidn2 (but not libidn2-devel) is needed for testing AI_IDN/NI_IDN.
+BuildRequires: libidn2
+%endif
+%endif
+
+# Filter out all GLIBC_PRIVATE symbols since they are internal to
+# the package and should not be examined by any other tool.
+%global __filter_GLIBC_PRIVATE 1
+
+# For language packs we have glibc require a virtual dependency
+# "glibc-langpack" wich gives us at least one installed langpack.
+# If no langpack providing 'glibc-langpack' was installed you'd
+# get all of them, and that would make the transition from a
+# system without langpacks smoother (you'd get all the locales
+# installed). You would then trim that list, and the trimmed list
+# is preserved. One problem is you can't have "no" locales installed,
+# in that case we offer a "glibc-minimal-langpack" sub-pakcage for
+# this purpose.
+Requires: glibc-langpack = %{version}-%{release}
+Suggests: glibc-all-langpacks = %{version}-%{release}
+
+%description
+The glibc package contains standard libraries which are used by
+multiple programs on the system. In order to save disk space and
+memory, as well as to make upgrading easier, common system code is
+kept in one place and shared between programs. This particular package
+contains the most important sets of shared libraries: the standard C
+library and the standard math library. Without these two libraries, a
+Linux system will not function.
+
+######################################################################
+# libnsl subpackage
+######################################################################
+
+%package -n libnsl
+Summary: Legacy support library for NIS
+Requires: %{name}%{_isa} = %{version}-%{release}
+
+%description -n libnsl
+This package provides the legacy version of libnsl library, for
+accessing NIS services.
+
+This library is provided for backwards compatibility only;
+applications should use libnsl2 instead to gain IPv6 support.
+
+##############################################################################
+# glibc "devel" sub-package
+##############################################################################
+%package devel
+Summary: Object files for development using standard C libraries.
+Requires(pre): /sbin/install-info
+Requires(pre): %{name}-headers
+Requires: %{name}-headers = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
+Requires: libgcc%{_isa}
+Requires: libxcrypt-devel%{_isa} >= 4.0.0
+
+%description devel
+The glibc-devel package contains the object files necessary
+for developing programs which use the standard C libraries (which are
+used by nearly all programs).  If you are developing programs which
+will use the standard C libraries, your system needs to have these
+standard object files available in order to create the
+executables.
+
+Install glibc-devel if you are going to develop programs which will
+use the standard C libraries.
+
+##############################################################################
+# glibc "static" sub-package
+##############################################################################
+%package static
+Summary: C library static libraries for -static linking.
+Requires: %{name}-devel = %{version}-%{release}
+Requires: libxcrypt-static%{?_isa} >= 4.0.0
+
+%description static
+The glibc-static package contains the C library static libraries
+for -static linking.  You don't need these, unless you link statically,
+which is highly discouraged.
+
+##############################################################################
+# glibc "headers" sub-package
+# - The headers package includes all common headers that are shared amongst
+#   the multilib builds. It was created to reduce the download size, and
+#   thus avoid downloading one header package per multilib. The package is
+#   identical both in content and file list, any difference is an error.
+#   Files like gnu/stubs.h which have gnu/stubs-32.h (i686) and gnu/stubs-64.h
+#   are included in glibc-headers, but the -32 and -64 files are in their
+#   respective i686 and x86_64 devel packages.
+##############################################################################
+%package headers
+Summary: Header files for development using standard C libraries.
+Provides: %{name}-headers(%{_target_cpu})
+Requires(pre): kernel-headers
+Requires: kernel-headers >= 2.2.1, %{name} = %{version}-%{release}
+BuildRequires: kernel-headers >= 3.2
+
+%description headers
+The glibc-headers package contains the header files necessary
+for developing programs which use the standard C libraries (which are
+used by nearly all programs).  If you are developing programs which
+will use the standard C libraries, your system needs to have these
+standard header files available in order to create the
+executables.
+
+Install glibc-headers if you are going to develop programs which will
+use the standard C libraries.
+
+##############################################################################
+# glibc "common" sub-package
+##############################################################################
+%package common
+Summary: Common binaries and locale data for glibc
+Requires: %{name} = %{version}-%{release}
+Requires: tzdata >= 2003a
+
+%description common
+The glibc-common package includes common binaries for the GNU libc
+libraries, as well as national language (locale) support.
+
+######################################################################
+# File triggers to do ldconfig calls automatically (see rhbz#1380878)
+######################################################################
+
+# File triggers for when libraries are added or removed in standard
+# paths.
+%transfiletriggerin common -P 2000000 -- /lib /usr/lib /lib64 /usr/lib64
+/sbin/ldconfig
+%end
+
+%transfiletriggerpostun common -P 2000000 -- /lib /usr/lib /lib64 /usr/lib64
+/sbin/ldconfig
+%end
+
+# We need to run ldconfig manually because ldconfig cannot handle the
+# relative include path in the /etc/ld.so.conf file we gneerate.
+%undefine __brp_ldconfig
+
+######################################################################
+
+%package locale-source
+Summary: The sources for the locales
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
+
+%description locale-source
+The sources for all locales provided in the language packs.
+If you are building custom locales you will most likely use
+these sources as the basis for your new locale.
+
+%{lua:
+-- Array of languages (ISO-639 codes).
+local languages = {}
+-- Dictionary from language codes (as in the languages array) to arrays
+-- of regions.
+local supplements = {}
+do
+   -- Parse the SUPPORTED file.  Eliminate duplicates.
+   local lang_region_seen = {}
+   for line in io.lines(rpm.expand("%{SOURCE11}")) do
+      -- Match lines which contain a language (eo) or language/region
+      -- (en_US) strings.
+      local lang_region = string.match(line, "^([a-z][^/@.]+)")
+      if lang_region ~= nil then
+	 if lang_region_seen[lang_region] == nil then
+	    lang_region_seen[lang_region] = true
+
+	    -- Split language/region pair.
+	    local lang, region = string.match(lang_region, "^(.+)_(.+)")
+	    if lang == nil then
+	       -- Region is missing, use only the language.
+	       lang = lang_region
+	    end
+	    local suppl = supplements[lang]
+	    if suppl == nil then
+	       suppl = {}
+	       supplements[lang] = suppl
+	       -- New language not seen before.
+	       languages[#languages + 1] = lang
+	    end
+	    if region ~= nil then
+	       -- New region because of the check against
+	       -- lang_region_seen above.
+	       suppl[#suppl + 1] = region
+	    end
+	 end
+      end
+   end
+   -- Sort for determinism.
+   table.sort(languages)
+   for _, supples in pairs(supplements) do
+      table.sort(supplements)
+   end
+end
+
+-- Compute the Supplements: list for a language, based on the regions.
+local function compute_supplements(lang)
+   result = "langpacks-" .. lang
+   regions = supplements[lang]
+   if regions ~= nil then
+      for i = 1, #regions do
+	 result = result .. " or langpacks-" .. lang .. "_" .. regions[i]
+      end
+   end
+   return result
+end
+
+-- Emit the definition of a language pack package.
+local function lang_package(lang)
+   local suppl = compute_supplements(lang)
+   print(rpm.expand([[
+
+%package langpack-]]..lang..[[
+
+Summary: Locale data for ]]..lang..[[
+
+Provides: glibc-langpack = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
+Supplements: (glibc and (]]..suppl..[[))
+%description langpack-]]..lang..[[
+
+The glibc-langpack-]]..lang..[[ package includes the basic information required
+to support the ]]..lang..[[ language in your applications.
+%ifnarch %{auxarches}
+%files -f langpack-]]..lang..[[.filelist langpack-]]..lang..[[
+
+%endif
+]]))
+end
+
+for i = 1, #languages do
+   lang_package(languages[i])
+end
+}
+
+# The glibc-all-langpacks provides the virtual glibc-langpack,
+# and thus satisfies glibc's requirement for installed locales.
+# Users can add one more other langauge packs and then eventually
+# uninstall all-langpacks to save space.
+%package all-langpacks
+Summary: All language packs for %{name}.
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
+Provides: %{name}-langpack = %{version}-%{release}
+%description all-langpacks
+
+# No %files, this is an empty pacakge. The C/POSIX and
+# C.UTF-8 files are already installed by glibc. We create
+# minimal-langpack because the virtual provide of
+# glibc-langpack needs at least one package installed
+# to satisfy it. Given that no-locales installed is a valid
+# use case we support it here with this package.
+%package minimal-langpack
+Summary: Minimal language packs for %{name}.
+Provides: glibc-langpack = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-common = %{version}-%{release}
+%description minimal-langpack
+This is a Meta package that is used to install minimal language packs.
+This package ensures you can use C, POSIX, or C.UTF-8 locales, but
+nothing else. It is designed for assembling a minimal system.
+%ifnarch %{auxarches}
+%files minimal-langpack
+%endif
+
+##############################################################################
+# glibc "nscd" sub-package
+##############################################################################
+%package -n nscd
+Summary: A Name Service Caching Daemon (nscd).
+Requires: %{name} = %{version}-%{release}
+%if %{without bootstrap}
+Requires: libselinux >= 1.17.10-1
+%endif
+Requires: audit-libs >= 1.1.3
+Requires(pre): /usr/sbin/useradd, coreutils
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd, /usr/sbin/userdel
+
+%description -n nscd
+The nscd daemon caches name service lookups and can improve
+performance with LDAP, and may help with DNS as well.
+
+##############################################################################
+# Subpackages for NSS modules except nss_files, nss_compat, nss_dns
+##############################################################################
+
+# This should remain it's own subpackage or "Provides: nss_db" to allow easy
+# migration from old systems that previously had the old nss_db package
+# installed. Note that this doesn't make the migration that smooth, the
+# databases still need rebuilding because the formats were different.
+# The nss_db package was deprecated in F16 and onwards:
+# https://lists.fedoraproject.org/pipermail/devel/2011-July/153665.html
+# The different database format does cause some issues for users:
+# https://lists.fedoraproject.org/pipermail/devel/2011-December/160497.html
+%package -n nss_db
+Summary: Name Service Switch (NSS) module using hash-indexed files
+Requires: %{name}%{_isa} = %{version}-%{release}
+
+%description -n nss_db
+The nss_db Name Service Switch module uses hash-indexed files in /var/db
+to speed up user, group, service, host name, and other NSS-based lookups.
+
+%package -n nss_hesiod
+Summary: Name Service Switch (NSS) module using Hesiod
+Requires: %{name}%{_isa} = %{version}-%{release}
+
+%description -n nss_hesiod
+The nss_hesiod Name Service Switch module uses the Domain Name System
+(DNS) as a source for user, group, and service information, following
+the Hesiod convention of Project Athena.
+
+%package nss-devel
+Summary: Development files for directly linking NSS service modules
+Requires: %{name}%{_isa} = %{version}-%{release}
+Requires: nss_db%{_isa} = %{version}-%{release}
+Requires: nss_hesiod%{_isa} = %{version}-%{release}
+
+%description nss-devel
+The glibc-nss-devel package contains the object files necessary to
+compile applications and libraries which directly link against NSS
+modules supplied by glibc.
+
+This is a rare and special use case; regular development has to use
+the glibc-devel package instead.
+
+##############################################################################
+# glibc "utils" sub-package
+##############################################################################
+%package utils
+Summary: Development utilities from GNU C library
+Requires: %{name} = %{version}-%{release}
+
+%description utils
+The glibc-utils package contains memusage, a memory usage profiler,
+mtrace, a memory leak tracer and xtrace, a function call tracer
+which can be helpful during program debugging.
+
+If unsure if you need this, don't install this package.
+
+##############################################################################
+# glibc core "debuginfo" sub-package
+##############################################################################
+%if 0%{?_enable_debug_packages}
+%define debug_package %{nil}
+%define __debug_install_post %{nil}
+%global __debug_package 1
+# Disable thew new features that glibc packages don't use.
+%undefine _debugsource_packages
+%undefine _debuginfo_subpackages
+%undefine _unique_debug_names
+%undefine _unique_debug_srcs
+
+%package debuginfo
+Summary: Debug information for package %{name}
+AutoReqProv: no
+%ifarch %{debuginfocommonarches}
+Requires: glibc-debuginfo-common = %{version}-%{release}
+%else
+%ifarch %{ix86} %{sparc}
+Obsoletes: glibc-debuginfo-common
+%endif
+%endif
+
+%description debuginfo
+This package provides debug information for package %{name}.
+Debug information is useful when developing applications that use this
+package or when debugging this package.
+
+This package also contains static standard C libraries with
+debugging information.  You need this only if you want to step into
+C library routines during debugging programs statically linked against
+one or more of the standard C libraries.
+To use this debugging information, you need to link binaries
+with -static -L%{_prefix}/lib/debug%{_libdir} compiler options.
+
+##############################################################################
+# glibc common "debuginfo-common" sub-package
+##############################################################################
+%ifarch %{debuginfocommonarches}
+
+%package debuginfo-common
+Summary: Debug information for package %{name}
+AutoReqProv: no
+
+%description debuginfo-common
+This package provides debug information for package %{name}.
+Debug information is useful when developing applications that use this
+package or when debugging this package.
+
+%endif # %{debuginfocommonarches}
+%endif # 0%{?_enable_debug_packages}
+
+%if %{with benchtests}
+%package benchtests
+Summary: Benchmarking binaries and scripts for %{name}
+%description benchtests
+This package provides built benchmark binaries and scripts to run
+microbenchmark tests on the system.
+%endif
+
+##############################################################################
+# compat-libpthread-nonshared
+# See: https://sourceware.org/bugzilla/show_bug.cgi?id=23500
+##############################################################################
+%package -n compat-libpthread-nonshared
+Summary: Compatibility support for linking against libpthread_nonshared.a.
+
+%description -n compat-libpthread-nonshared
+This package provides compatibility support for applications that expect
+libpthread_nonshared.a to exist. The support provided is in the form of
+an empty libpthread_nonshared.a that allows dynamic links to succeed.
+Such applications should be adjusted to avoid linking against
+libpthread_nonshared.a which is no longer used. The static library
+libpthread_nonshared.a is an internal implementation detail of the C
+runtime and should not be expected to exist.
+
+##############################################################################
+# Prepare for the build.
+##############################################################################
+%prep
+%autosetup -n %{glibcsrcdir} -p1
+
+##############################################################################
+# %%prep - Additional prep required...
+##############################################################################
+# Make benchmark scripts executable
+chmod +x benchtests/scripts/*.py scripts/pylint
+
+# Remove all files generated from patching.
+find . -type f -size 0 -o -name "*.orig" -exec rm -f {} \;
+
+# Ensure timestamps on configure files are current to prevent
+# regenerating them.
+touch `find . -name configure`
+
+# Ensure *-kw.h files are current to prevent regenerating them.
+touch locale/programs/*-kw.h
+
+# Verify that our copy of localedata/SUPPORTED matches the glibc
+# version.
+#
+# The separate file copy is used by the Lua parser above.
+# Patches or new upstream versions may change the list of locales,
+# which changes the set of langpacks we need to build.  Verify the
+# differences then update the copy of SUPPORTED.  This approach has
+# two purposes: (a) avoid spurious changes to the set of langpacks,
+# and (b) the Lua snippet can use a fully patched-up version
+# of the localedata/SUPPORTED file.
+diff -u %{SOURCE11} localedata/SUPPORTED
+
+##############################################################################
+# Build glibc...
+##############################################################################
+%build
+# Log system information
+uname -a
+LD_SHOW_AUXV=1 /bin/true
+cat /proc/cpuinfo
+cat /proc/sysinfo 2>/dev/null || true
+cat /proc/meminfo
+df
+
+# We build using the native system compilers.
+GCC=gcc
+GXX=g++
+
+# Part of rpm_inherit_flags.  Is overridden below.
+rpm_append_flag ()
+{
+    BuildFlags="$BuildFlags $*"
+}
+
+# Propagates the listed flags to rpm_append_flag if supplied by
+# redhat-rpm-config.
+BuildFlags="-O2 -g"
+rpm_inherit_flags ()
+{
+	local reference=" $* "
+	local flag
+	for flag in $RPM_OPT_FLAGS $RPM_LD_FLAGS ; do
+		if echo "$reference" | grep -q -F " $flag " ; then
+			rpm_append_flag "$flag"
+		fi
+	done
+}
+
+# Propgate select compiler flags from redhat-rpm-config.  These flags
+# are target-dependent, so we use only those which are specified in
+# redhat-rpm-config.  We keep the -m32/-m32/-m64 flags to support
+# multilib builds.
+#
+# Note: For building alternative run-times, care is required to avoid
+# overriding the architecture flags which go into CC/CXX.  The flags
+# below are passed in CFLAGS.
+
+rpm_inherit_flags \
+	"-Wp,-D_GLIBCXX_ASSERTIONS" \
+	"-fasynchronous-unwind-tables" \
+	"-fstack-clash-protection" \
+	"-funwind-tables" \
+	"-m31" \
+	"-m32" \
+	"-m64" \
+	"-march=i686" \
+	"-march=x86-64" \
+	"-march=z13" \
+	"-march=z14" \
+	"-march=zEC12" \
+	"-mfpmath=sse" \
+	"-msse2" \
+	"-mstackrealign" \
+	"-mtune=generic" \
+	"-mtune=z13" \
+	"-mtune=z14" \
+	"-mtune=zEC12" \
+	"-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1" \
+
+# Propagate additional build flags to BuildFlagsNonshared.  This is
+# very special because some of these files are part of the startup
+# code.  We essentially hope that these flags have little effect
+# there, and only specify the, for consistency, so that annobin
+# records the expected compiler flags.
+BuildFlagsNonshared=
+rpm_append_flag () {
+    BuildFlagsNonshared="$BuildFlagsNonshared $*"
+}
+rpm_inherit_flags \
+	"-Wp,-D_FORTIFY_SOURCE=2" \
+
+# Special flag to enable annobin annotations for statically linked
+# assembler code.  Needs to be passed to make; not preserved by
+# configure.
+%define glibc_make_flags_as ASFLAGS="-g -Wa,--generate-missing-build-notes=yes"
+%define glibc_make_flags %{glibc_make_flags_as}
+
+##############################################################################
+# %%build - Generic options.
+##############################################################################
+EnableKernel="--enable-kernel=%{enablekernel}"
+# Save the used compiler and options into the file "Gcc" for use later
+# by %%install.
+echo "$GCC" > Gcc
+
+##############################################################################
+# build()
+#	Build glibc in `build-%{target}$1', passing the rest of the arguments
+#	as CFLAGS to the build (not the same as configure CFLAGS). Several
+#	global values are used to determine build flags, kernel version,
+#	system tap support, etc.
+##############################################################################
+build()
+{
+	local builddir=build-%{target}${1:+-$1}
+	${1+shift}
+	rm -rf $builddir
+	mkdir $builddir
+	pushd $builddir
+	../configure CC="$GCC" CXX="$GXX" CFLAGS="$BuildFlags $*" \
+		--prefix=%{_prefix} \
+		--with-headers=%{_prefix}/include $EnableKernel \
+		--with-nonshared-cflags="$BuildFlagsNonshared" \
+		--enable-bind-now \
+		--build=%{target} \
+		--enable-stack-protector=strong \
+%ifarch %{pie_arches}
+		--enable-static-pie \
+%endif
+		--enable-tunables \
+		--enable-systemtap \
+		${core_with_options} \
+%ifarch x86_64 %{ix86}
+	       --enable-cet \
+%endif
+%ifarch %{ix86}
+		--disable-multi-arch \
+%endif
+%if %{without werror}
+		--disable-werror \
+%endif
+		--disable-profile \
+%if %{with bootstrap}
+		--without-selinux \
+%endif
+		--disable-crypt ||
+		{ cat config.log; false; }
+
+	make %{?_smp_mflags} -O -r %{glibc_make_flags}
+	popd
+}
+
+# Default set of compiler options.
+build
+
+%if %{buildpower9}
+(
+  GCC="$GCC -mcpu=power9 -mtune=power9"
+  GXX="$GXX -mcpu=power9 -mtune=power9"
+  core_with_options="--with-cpu=power9"
+  build power9
+)
+%endif
+
+##############################################################################
+# Install glibc...
+##############################################################################
+%install
+
+# The built glibc is installed into a subdirectory of $RPM_BUILD_ROOT.
+# For a system glibc that subdirectory is "/" (the root of the filesystem).
+# This is called a sysroot (system root) and can be changed if we have a
+# distribution that supports multiple installed glibc versions.
+%define glibc_sysroot $RPM_BUILD_ROOT
+
+# Remove existing file lists.
+find . -type f -name '*.filelist' -exec rm -rf {} \;
+
+# Ensure the permissions of errlist.c do not change.  When the file is
+# regenerated the Makefile sets the permissions to 444. We set it to 644
+# to match what comes out of git. The tarball of the git archive won't have
+# correct permissions because git doesn't track all of the permissions
+# accurately (see git-cache-meta if you need that). We also set it to 644 to
+# match pre-existing rpms. We do this *after* the build because the build
+# might regenerate the file and set the permissions to 444.
+chmod 644 sysdeps/gnu/errlist.c
+
+# Reload compiler and build options that were used during %%build.
+GCC=`cat Gcc`
+
+%ifarch riscv64
+# RISC-V ABI wants to install everything in /lib64/lp64d or /usr/lib64/lp64d.
+# Make these be symlinks to /lib64 or /usr/lib64 respectively.  See:
+# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/DRHT5YTPK4WWVGL3GIN5BF2IKX2ODHZ3/
+for d in %{glibc_sysroot}%{_libdir} %{glibc_sysroot}/%{_lib}; do
+	mkdir -p $d
+	(cd $d && ln -sf . lp64d)
+done
+%endif
+
+# Build and install:
+make -j1 install_root=%{glibc_sysroot} install -C build-%{target}
+
+# If we are not building an auxiliary arch then install all of the supported
+# locales.
+%ifnarch %{auxarches}
+pushd build-%{target}
+# Do not use a parallel make here because the hardlink optimization in
+# localedef is not fully reproducible when running concurrently.
+make install_root=%{glibc_sysroot} \
+	install-locales -C ../localedata objdir=`pwd`
+popd
+%endif
+
+# install_different:
+#	Install all core libraries into DESTDIR/SUBDIR. Either the file is
+#	installed as a copy or a symlink to the default install (if it is the
+#	same). The path SUBDIR_UP is the prefix used to go from
+#	DESTDIR/SUBDIR to the default installed libraries e.g.
+#	ln -s SUBDIR_UP/foo.so DESTDIR/SUBDIR/foo.so.
+#	When you call this function it is expected that you are in the root
+#	of the build directory, and that the default build directory is:
+#	"../build-%{target}" (relatively).
+#	The primary use of this function is to install alternate runtimes
+#	into the build directory and avoid duplicating this code for each
+#	runtime.
+install_different()
+{
+	local lib libbase libbaseso dlib
+	local destdir="$1"
+	local subdir="$2"
+	local subdir_up="$3"
+	local libdestdir="$destdir/$subdir"
+	# All three arguments must be non-zero paths.
+	if ! [ "$destdir" \
+	       -a "$subdir" \
+	       -a "$subdir_up" ]; then
+		echo "One of the arguments to install_different was emtpy."
+		exit 1
+	fi
+	# Create the destination directory and the multilib directory.
+	mkdir -p "$destdir"
+	mkdir -p "$libdestdir"
+	# Walk all of the libraries we installed...
+	for lib in libc math/libm nptl/libpthread rt/librt nptl_db/libthread_db
+	do
+		libbase=${lib#*/}
+		# Take care that `libbaseso' has a * that needs expanding so
+		# take care with quoting.
+		libbaseso=$(basename %{glibc_sysroot}/%{_lib}/${libbase}-*.so)
+		# Only install if different from default build library.
+		if cmp -s ${lib}.so ../build-%{target}/${lib}.so; then
+			ln -sf "$subdir_up"/$libbaseso $libdestdir/$libbaseso
+		else
+			cp -a ${lib}.so $libdestdir/$libbaseso
+		fi
+		dlib=$libdestdir/$(basename %{glibc_sysroot}/%{_lib}/${libbase}.so.*)
+		ln -sf $libbaseso $dlib
+	done
+}
+
+%if %{buildpower9}
+pushd build-%{target}-power9
+install_different "$RPM_BUILD_ROOT/%{_lib}" power9 ..
+popd
+%endif
+
+##############################################################################
+# Remove the files we don't want to distribute
+##############################################################################
+
+# Remove the libNoVersion files.
+# XXX: This looks like a bug in glibc that accidentally installed these
+#      wrong files. We probably don't need this today.
+rm -f %{glibc_sysroot}/%{_libdir}/libNoVersion*
+rm -f %{glibc_sysroot}/%{_lib}/libNoVersion*
+
+# Remove the old nss modules.
+rm -f %{glibc_sysroot}/%{_lib}/libnss1-*
+rm -f %{glibc_sysroot}/%{_lib}/libnss-*.so.1
+
+# This statically linked binary is no longer necessary in a world where
+# the default Fedora install uses an initramfs, and further we have rpm-ostree
+# which captures the whole userspace FS tree.
+# Further, see https://github.com/projectatomic/rpm-ostree/pull/1173#issuecomment-355014583
+rm -f %{glibc_sysroot}/{usr/,}sbin/sln
+
+######################################################################
+# Run ldconfig to create all the symbolic links we need
+######################################################################
+
+# Note: This has to happen before creating /etc/ld.so.conf.
+
+mkdir -p %{glibc_sysroot}/var/cache/ldconfig
+truncate -s 0 %{glibc_sysroot}/var/cache/ldconfig/aux-cache
+
+# ldconfig is statically linked, so we can use the new version.
+%{glibc_sysroot}/sbin/ldconfig -N -r %{glibc_sysroot}
+
+##############################################################################
+# Install info files
+##############################################################################
+
+%if %{with docs}
+# Move the info files if glibc installed them into the wrong location.
+if [ -d %{glibc_sysroot}%{_prefix}/info -a "%{_infodir}" != "%{_prefix}/info" ]; then
+  mkdir -p %{glibc_sysroot}%{_infodir}
+  mv -f %{glibc_sysroot}%{_prefix}/info/* %{glibc_sysroot}%{_infodir}
+  rm -rf %{glibc_sysroot}%{_prefix}/info
+fi
+
+# Compress all of the info files.
+gzip -9nvf %{glibc_sysroot}%{_infodir}/libc*
+
+%else
+rm -f %{glibc_sysroot}%{_infodir}/dir
+rm -f %{glibc_sysroot}%{_infodir}/libc.info*
+%endif
+
+##############################################################################
+# Create locale sub-package file lists
+##############################################################################
+
+%ifnarch %{auxarches}
+olddir=`pwd`
+pushd %{glibc_sysroot}%{_prefix}/lib/locale
+rm -f locale-archive
+# Intentionally we do not pass --alias-file=, aliases will be added
+# by build-locale-archive.
+$olddir/build-%{target}/elf/ld.so \
+        --library-path $olddir/build-%{target}/ \
+        $olddir/build-%{target}/locale/localedef \
+        --prefix %{glibc_sysroot} --add-to-archive \
+        eo *_*
+# Setup the locale-archive template for use by glibc-all-langpacks.
+mv locale-archive{,.tmpl}
+# Create the file lists for the language specific sub-packages:
+for i in eo *_*
+do
+    lang=${i%%_*}
+    if [ ! -e langpack-${lang}.filelist ]; then
+        echo "%dir %{_prefix}/lib/locale" >> langpack-${lang}.filelist
+    fi
+    echo "%dir  %{_prefix}/lib/locale/$i" >> langpack-${lang}.filelist
+    echo "%{_prefix}/lib/locale/$i/*" >> langpack-${lang}.filelist
+done
+popd
+pushd %{glibc_sysroot}%{_prefix}/share/locale
+for i in */LC_MESSAGES/libc.mo
+do
+    locale=${i%%%%/*}
+    lang=${locale%%%%_*}
+    echo "%lang($lang) %{_prefix}/share/locale/${i}" \
+         >> %{glibc_sysroot}%{_prefix}/lib/locale/langpack-${lang}.filelist
+done
+popd
+mv  %{glibc_sysroot}%{_prefix}/lib/locale/*.filelist .
+%endif
+
+##############################################################################
+# Install configuration files for services
+##############################################################################
+
+install -p -m 644 %{SOURCE7} %{glibc_sysroot}/etc/nsswitch.conf
+
+%ifnarch %{auxarches}
+# This is for ncsd - in glibc 2.2
+install -m 644 nscd/nscd.conf %{glibc_sysroot}/etc
+mkdir -p %{glibc_sysroot}%{_tmpfilesdir}
+install -m 644 %{SOURCE4} %{buildroot}%{_tmpfilesdir}
+mkdir -p %{glibc_sysroot}/lib/systemd/system
+install -m 644 nscd/nscd.service nscd/nscd.socket %{glibc_sysroot}/lib/systemd/system
+%endif
+
+# Include ld.so.conf
+echo 'include ld.so.conf.d/*.conf' > %{glibc_sysroot}/etc/ld.so.conf
+truncate -s 0 %{glibc_sysroot}/etc/ld.so.cache
+chmod 644 %{glibc_sysroot}/etc/ld.so.conf
+mkdir -p %{glibc_sysroot}/etc/ld.so.conf.d
+%ifnarch %{auxarches}
+mkdir -p %{glibc_sysroot}/etc/sysconfig
+truncate -s 0 %{glibc_sysroot}/etc/sysconfig/nscd
+truncate -s 0 %{glibc_sysroot}/etc/gai.conf
+%endif
+
+# Include %{_libdir}/gconv/gconv-modules.cache
+truncate -s 0 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
+chmod 644 %{glibc_sysroot}%{_libdir}/gconv/gconv-modules.cache
+
+# Install the upgrade program
+install -m 700 build-%{target}/elf/glibc_post_upgrade \
+  %{glibc_sysroot}%{_prefix}/sbin/glibc_post_upgrade.%{_target_cpu}
+
+##############################################################################
+# Install debug copies of unstripped static libraries
+# - This step must be last in order to capture any additional static
+#   archives we might have added.
+##############################################################################
+
+# If we are building a debug package then copy all of the static archives
+# into the debug directory to keep them as unstripped copies.
+%if 0%{?_enable_debug_packages}
+mkdir -p %{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}
+cp -a %{glibc_sysroot}%{_libdir}/*.a \
+	%{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}/
+rm -f %{glibc_sysroot}%{_prefix}/lib/debug%{_libdir}/*_p.a
+%endif
+
+# Remove any zoneinfo files; they are maintained by tzdata.
+rm -rf %{glibc_sysroot}%{_prefix}/share/zoneinfo
+
+# Make sure %config files have the same timestamp across multilib packages.
+#
+# XXX: Ideally ld.so.conf should have the timestamp of the spec file, but there
+# doesn't seem to be any macro to give us that.  So we do the next best thing,
+# which is to at least keep the timestamp consistent.  The choice of using
+# glibc_post_upgrade.c is arbitrary.
+touch -r %{SOURCE0} %{glibc_sysroot}/etc/ld.so.conf
+touch -r sunrpc/etc.rpc %{glibc_sysroot}/etc/rpc
+
+pushd build-%{target}
+$GCC -Os -g -static -o build-locale-archive %{SOURCE1} \
+	../build-%{target}/locale/locarchive.o \
+	../build-%{target}/locale/md5.o \
+	../build-%{target}/locale/record-status.o \
+	-I. -DDATADIR=\"%{_datadir}\" -DPREFIX=\"%{_prefix}\" \
+	-L../build-%{target} \
+	-B../build-%{target}/csu/ -lc -lc_nonshared
+install -m 700 build-locale-archive %{glibc_sysroot}%{_prefix}/sbin/build-locale-archive
+popd
+
+# Lastly copy some additional documentation for the packages.
+rm -rf documentation
+mkdir documentation
+cp timezone/README documentation/README.timezone
+cp posix/gai.conf documentation/
+
+%ifarch s390x
+# Compatibility symlink
+mkdir -p %{glibc_sysroot}/lib
+ln -sf /%{_lib}/ld64.so.1 %{glibc_sysroot}/lib/ld64.so.1
+%endif
+
+%if %{with benchtests}
+# Build benchmark binaries.  Ignore the output of the benchmark runs.
+pushd build-%{target}
+make BENCH_DURATION=1 bench-build
+popd
+
+# Copy over benchmark binaries.
+mkdir -p %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests
+cp $(find build-%{target}/benchtests -type f -executable) %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+# ... and the makefile.
+for b in %{SOURCE9} %{SOURCE10}; do
+	cp $b %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+done
+# .. and finally, the comparison scripts.
+cp benchtests/scripts/benchout.schema.json %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+cp benchtests/scripts/compare_bench.py %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+cp benchtests/scripts/import_bench.py %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+cp benchtests/scripts/validate_benchout.py %{glibc_sysroot}%{_prefix}/libexec/glibc-benchtests/
+
+%if 0%{?_enable_debug_packages}
+# The #line directives gperf generates do not give the proper
+# file name relative to the build directory.
+pushd locale
+ln -s programs/*.gperf .
+popd
+pushd iconv
+ln -s ../locale/programs/charmap-kw.gperf .
+popd
+
+%if %{with docs}
+# Remove the `dir' info-heirarchy file which will be maintained
+# by the system as it adds info files to the install.
+rm -f %{glibc_sysroot}%{_infodir}/dir
+%endif
+
+%ifnarch %{auxarches}
+truncate -s 0 %{glibc_sysroot}/%{_prefix}/lib/locale/locale-archive
+mkdir -p %{glibc_sysroot}/var/{db,run}/nscd
+touch %{glibc_sysroot}/var/{db,run}/nscd/{passwd,group,hosts,services}
+touch %{glibc_sysroot}/var/run/nscd/{socket,nscd.pid}
+%endif
+
+# Move libpcprofile.so and libmemusage.so into the proper library directory.
+# They can be moved without any real consequences because users would not use
+# them directly.
+mkdir -p %{glibc_sysroot}%{_libdir}
+mv -f %{glibc_sysroot}/%{_lib}/lib{pcprofile,memusage}.so \
+	%{glibc_sysroot}%{_libdir}
+
+# Strip all of the installed object files.
+strip -g %{glibc_sysroot}%{_libdir}/*.o
+
+###############################################################################
+# Rebuild libpthread.a using --whole-archive to ensure all of libpthread
+# is included in a static link. This prevents any problems when linking
+# statically, using parts of libpthread, and other necessary parts not
+# being included. Upstream has decided that this is the wrong approach to
+# this problem and that the full set of dependencies should be resolved
+# such that static linking works and produces the most minimally sized
+# static application possible.
+###############################################################################
+pushd %{glibc_sysroot}%{_prefix}/%{_lib}/
+$GCC -r -nostdlib -o libpthread.o -Wl,--whole-archive ./libpthread.a
+rm libpthread.a
+ar rcs libpthread.a libpthread.o
+rm libpthread.o
+popd
+
+# The xtrace and memusage scripts have hard-coded paths that need to be
+# translated to a correct set of paths using the $LIB token which is
+# dynamically translated by ld.so as the default lib directory.
+for i in %{glibc_sysroot}%{_prefix}/bin/{xtrace,memusage}; do
+%if %{with bootstrap}
+  test -w $i || continue
+%endif
+  sed -e 's~=/%{_lib}/libpcprofile.so~=%{_libdir}/libpcprofile.so~' \
+      -e 's~=/%{_lib}/libmemusage.so~=%{_libdir}/libmemusage.so~' \
+      -e 's~='\''/\\\$LIB/libpcprofile.so~='\''%{_prefix}/\\$LIB/libpcprofile.so~' \
+      -e 's~='\''/\\\$LIB/libmemusage.so~='\''%{_prefix}/\\$LIB/libmemusage.so~' \
+      -i $i
+done
+
+##############################################################################
+# Build an empty libpthread_nonshared.a for compatiliby with applications
+# that have old linker scripts that reference this file. We ship this only
+# in compat-libpthread-nonshared sub-package.
+##############################################################################
+ar cr %{glibc_sysroot}%{_prefix}/%{_lib}/libpthread_nonshared.a
+
+##############################################################################
+# Beyond this point in the install process we no longer modify the set of
+# installed files, with one exception, for auxarches we cleanup the file list
+# at the end and remove files which we don't intend to ship. We need the file
+# list to effect a proper cleanup, and so it happens last.
+##############################################################################
+
+##############################################################################
+# Build the file lists used for describing the package and subpackages.
+##############################################################################
+# There are several main file lists (and many more for
+# the langpack sub-packages (langpack-${lang}.filelist)):
+# * master.filelist
+#	- Master file list from which all other lists are built.
+# * glibc.filelist
+#	- Files for the glibc packages.
+# * common.filelist
+#	- Flies for the common subpackage.
+# * utils.filelist
+#	- Files for the utils subpackage.
+# * nscd.filelist
+#	- Files for the nscd subpackage.
+# * devel.filelist
+#	- Files for the devel subpackage.
+# * headers.filelist
+#	- Files for the headers subpackage.
+# * static.filelist
+#	- Files for the static subpackage.
+# * libnsl.filelist
+#       - Files for the libnsl subpackage
+# * nss_db.filelist
+# * nss_hesiod.filelist
+#       - File lists for nss_* NSS module subpackages.
+# * nss-devel.filelist
+#       - File list with the .so symbolic links for NSS packages.
+# * compat-libpthread-nonshared.filelist.
+#	- File list for compat-libpthread-nonshared subpackage.
+# * debuginfo.filelist
+#	- Files for the glibc debuginfo package.
+# * debuginfocommon.filelist
+#	- Files for the glibc common debuginfo package.
+#
+
+# Create the main file lists. This way we can append to any one of them later
+# wihtout having to create it. Note these are removed at the start of the
+# install phase.
+touch master.filelist
+touch glibc.filelist
+touch common.filelist
+touch utils.filelist
+touch nscd.filelist
+touch devel.filelist
+touch headers.filelist
+touch static.filelist
+touch libnsl.filelist
+touch nss_db.filelist
+touch nss_hesiod.filelist
+touch nss-devel.filelist
+touch compat-libpthread-nonshared.filelist
+touch debuginfo.filelist
+touch debuginfocommon.filelist
+
+###############################################################################
+# Master file list, excluding a few things.
+###############################################################################
+{
+  # List all files or links that we have created during install.
+  # Files with 'etc' are configuration files, likewise 'gconv-modules'
+  # and 'gconv-modules.cache' are caches, and we exclude them.
+  find %{glibc_sysroot} \( -type f -o -type l \) \
+       \( \
+	 -name etc -printf "%%%%config " -o \
+	 -name gconv-modules \
+	 -printf "%%%%verify(not md5 size mtime) %%%%config(noreplace) " -o \
+	 -name gconv-modules.cache \
+	 -printf "%%%%verify(not md5 size mtime) " \
+	 , \
+	 ! -path "*/lib/debug/*" -printf "/%%P\n" \)
+  # List all directories with a %%dir prefix.  We omit the info directory and
+  # all directories in (and including) /usr/share/locale.
+  find %{glibc_sysroot} -type d \
+       \( -path '*%{_prefix}/share/locale' -prune -o \
+       \( -path '*%{_prefix}/share/*' \
+%if %{with docs}
+	! -path '*%{_infodir}' -o \
+%endif
+	  -path "*%{_prefix}/include/*" \
+       \) -printf "%%%%dir /%%P\n" \)
+} | {
+  # Also remove the *.mo entries.  We will add them to the
+  # language specific sub-packages.
+  # libnss_ files go into subpackages related to NSS modules.
+  # and .*/share/i18n/charmaps/.*), they go into the sub-package
+  # "locale-source":
+  sed -e '\,.*/share/locale/\([^/_]\+\).*/LC_MESSAGES/.*\.mo,d' \
+      -e '\,.*/share/i18n/locales/.*,d' \
+      -e '\,.*/share/i18n/charmaps/.*,d' \
+      -e '\,.*/etc/\(localtime\|nsswitch.conf\|ld\.so\.conf\|ld\.so\.cache\|default\|rpc\|gai\.conf\),d' \
+      -e '\,.*/%{_libdir}/lib\(pcprofile\|memusage\)\.so,d' \
+      -e '\,.*/bin/\(memusage\|mtrace\|xtrace\|pcprofiledump\),d'
+} | sort > master.filelist
+
+# The master file list is now used by each subpackage to list their own
+# files. We go through each package and subpackage now and create their lists.
+# Each subpackage picks the files from the master list that they need.
+# The order of the subpackage list generation does not matter.
+
+# Make the master file list read-only after this point to avoid accidental
+# modification.
+chmod 0444 master.filelist
+
+###############################################################################
+# glibc
+###############################################################################
+
+# Add all files with the following exceptions:
+# - The info files '%{_infodir}/dir'
+# - The partial (lib*_p.a) static libraries, include files.
+# - The static files, objects, unversioned DSOs, and nscd.
+# - The bin, locale, some sbin, and share.
+#   - The use of [^gi] is meant to exclude all files except glibc_post_upgrade,
+#     and iconvconfig, which we want in the main packages.
+# - All the libnss files (we add back the ones we want later).
+# - All bench test binaries.
+# - The aux-cache, since it's handled specially in the files section.
+# - The build-locale-archive binary since it's in the common package.
+cat master.filelist \
+	| grep -v \
+	-e '%{_infodir}' \
+	-e '%{_libdir}/lib.*_p.a' \
+	-e '%{_prefix}/include' \
+	-e '%{_libdir}/lib.*\.a' \
+        -e '%{_libdir}/.*\.o' \
+	-e '%{_libdir}/lib.*\.so' \
+	-e 'nscd' \
+	-e '%{_prefix}/bin' \
+	-e '%{_prefix}/lib/locale' \
+	-e '%{_prefix}/sbin/[^gi]' \
+	-e '%{_prefix}/share' \
+	-e '/var/db/Makefile' \
+	-e '/libnss_.*\.so[0-9.]*$' \
+	-e '/libnsl' \
+	-e 'glibc-benchtests' \
+	-e 'aux-cache' \
+	-e 'build-locale-archive' \
+	> glibc.filelist
+
+# Add specific files:
+# - The nss_files, nss_compat, and nss_db files.
+# - The libmemusage.so and libpcprofile.so used by utils.
+for module in compat files dns; do
+    cat master.filelist \
+	| grep -E \
+	-e "/libnss_$module(\.so\.[0-9.]+|-[0-9.]+\.so)$" \
+	>> glibc.filelist
+done
+grep -e "libmemusage.so" -e "libpcprofile.so" master.filelist >> glibc.filelist
+
+###############################################################################
+# glibc-devel
+###############################################################################
+
+%if %{with docs}
+# Put the info files into the devel file list, but exclude the generated dir.
+grep '%{_infodir}' master.filelist | grep -v '%{_infodir}/dir' > devel.filelist
+%endif
+
+# Put some static files into the devel package.
+grep '%{_libdir}/lib.*\.a' master.filelist \
+  | grep '/lib\(\(c\|pthread\|nldbl\|mvec\)_nonshared\|g\|ieee\|mcheck\)\.a$' \
+  >> devel.filelist
+
+# Put all of the object files and *.so (not the versioned ones) into the
+# devel package.
+grep '%{_libdir}/.*\.o' < master.filelist >> devel.filelist
+grep '%{_libdir}/lib.*\.so' < master.filelist >> devel.filelist
+# The exceptions are:
+# - libmemusage.so and libpcprofile.so in glibc used by utils.
+# - libnss_*.so which are in nss-devel.
+sed -i -e '\,libmemusage.so,d' \
+	-e '\,libpcprofile.so,d' \
+	-e '\,/libnss_[a-z]*\.so$,d' \
+	devel.filelist
+
+###############################################################################
+# glibc-headers
+###############################################################################
+
+# The glibc-headers package includes only common files which are identical
+# across all multilib packages. We must keep gnu/stubs.h and gnu/lib-names.h
+# in the glibc-headers package, but the -32, -64, -64-v1, and -64-v2 versions
+# go into the development packages.
+grep '%{_prefix}/include/gnu/stubs-.*\.h$' < master.filelist >> devel.filelist || :
+grep '%{_prefix}/include/gnu/lib-names-.*\.h$' < master.filelist >> devel.filelist || :
+# Put the include files into headers file list.
+grep '%{_prefix}/include' < master.filelist \
+  | egrep -v '%{_prefix}/include/gnu/stubs-.*\.h$' \
+  | egrep -v '%{_prefix}/include/gnu/lib-names-.*\.h$' \
+  > headers.filelist
+
+###############################################################################
+# glibc-static
+###############################################################################
+
+# Put the rest of the static files into the static package.
+grep '%{_libdir}/lib.*\.a' < master.filelist \
+  | grep -v '/lib\(\(c\|pthread\|nldbl\|mvec\)_nonshared\|g\|ieee\|mcheck\)\.a$' \
+  > static.filelist
+
+###############################################################################
+# glibc-common
+###############################################################################
+
+# All of the bin and certain sbin files go into the common package except
+# glibc_post_upgrade.* and iconvconfig which need to go in glibc. Likewise
+# nscd is excluded because it goes in nscd.
+grep '%{_prefix}/bin' master.filelist >> common.filelist
+grep '%{_prefix}/sbin/[^gi]' master.filelist \
+	| grep -v 'nscd' >> common.filelist
+# All of the files under share go into the common package since they should be
+# multilib-independent.
+# Exceptions:
+# - The actual share directory, not owned by us.
+# - The info files which go in devel, and the info directory.
+grep '%{_prefix}/share' master.filelist \
+	| grep -v \
+	-e '%{_prefix}/share/info/libc.info.*' \
+	-e '%%dir %{prefix}/share/info' \
+	-e '%%dir %{prefix}/share' \
+	>> common.filelist
+
+# Add the binary to build locales to the common subpackage.
+echo '%{_prefix}/sbin/build-locale-archive' >> common.filelist
+
+###############################################################################
+# nscd
+###############################################################################
+
+# The nscd binary must go into the nscd subpackage.
+echo '%{_prefix}/sbin/nscd' > nscd.filelist
+
+###############################################################################
+# glibc-utils
+###############################################################################
+
+# Add the utils scripts and programs to the utils subpackage.
+cat > utils.filelist <<EOF
+%if %{without bootstrap}
+%{_prefix}/bin/memusage
+%{_prefix}/bin/memusagestat
+%endif
+%{_prefix}/bin/mtrace
+%{_prefix}/bin/pcprofiledump
+%{_prefix}/bin/xtrace
+EOF
+
+###############################################################################
+# nss_db, nss_hesiod
+###############################################################################
+
+# Move the NSS-related files to the NSS subpackages.  Be careful not
+# to pick up .debug files, and the -devel symbolic links.
+for module in db hesiod; do
+  grep -E "/libnss_$module(\.so\.[0-9.]+|-[0-9.]+\.so)$" \
+    master.filelist > nss_$module.filelist
+done
+
+###############################################################################
+# nss-devel
+###############################################################################
+
+# Symlinks go into the nss-devel package (instead of the main devel
+# package).
+grep '/libnss_[a-z]*\.so$' master.filelist > nss-devel.filelist
+
+###############################################################################
+# libnsl
+###############################################################################
+
+# Prepare the libnsl-related file lists.
+grep '/libnsl-[0-9.]*.so$' master.filelist > libnsl.filelist
+test $(wc -l < libnsl.filelist) -eq 1
+
+###############################################################################
+# glibc-benchtests
+###############################################################################
+
+# List of benchmarks.
+find build-%{target}/benchtests -type f -executable | while read b; do
+	echo "%{_prefix}/libexec/glibc-benchtests/$(basename $b)"
+done >> benchtests.filelist
+# ... and the makefile.
+for b in %{SOURCE9} %{SOURCE10}; do
+	echo "%{_prefix}/libexec/glibc-benchtests/$(basename $b)" >> benchtests.filelist
+done
+# ... and finally, the comparison scripts.
+echo "%{_prefix}/libexec/glibc-benchtests/benchout.schema.json" >> benchtests.filelist
+echo "%{_prefix}/libexec/glibc-benchtests/compare_bench.py*" >> benchtests.filelist
+echo "%{_prefix}/libexec/glibc-benchtests/import_bench.py*" >> benchtests.filelist
+echo "%{_prefix}/libexec/glibc-benchtests/validate_benchout.py*" >> benchtests.filelist
+%endif
+
+###############################################################################
+# compat-libpthread-nonshared
+###############################################################################
+echo "%{_libdir}/libpthread_nonshared.a" >> compat-libpthread-nonshared.filelist
+
+###############################################################################
+# glibc-debuginfocommon, and glibc-debuginfo
+###############################################################################
+
+find_debuginfo_args='--strict-build-id -g'
+%ifarch %{debuginfocommonarches}
+find_debuginfo_args="$find_debuginfo_args \
+	-l common.filelist \
+	-l utils.filelist \
+	-l nscd.filelist \
+	-p '.*/(sbin|libexec)/.*' \
+	-o debuginfocommon.filelist \
+	-l nss_db.filelist -l nss_hesiod.filelist \
+	-l libnsl.filelist -l glibc.filelist \
+%if %{with benchtests}
+	-l benchtests.filelist
+%endif
+	"
+%endif
+
+/usr/lib/rpm/find-debuginfo.sh $find_debuginfo_args -o debuginfo.filelist
+
+# List all of the *.a archives in the debug directory.
+list_debug_archives()
+{
+	local dir=%{_prefix}/lib/debug%{_libdir}
+	find %{glibc_sysroot}$dir -name "*.a" -printf "$dir/%%P\n"
+}
+
+%ifarch %{debuginfocommonarches}
+
+# Remove the source files from the common package debuginfo.
+sed -i '\#^%{glibc_sysroot}%{_prefix}/src/debug/#d' debuginfocommon.filelist
+
+# Create a list of all of the source files we copied to the debug directory.
+find %{glibc_sysroot}%{_prefix}/src/debug \
+     \( -type d -printf '%%%%dir ' \) , \
+     -printf '%{_prefix}/src/debug/%%P\n' > debuginfocommon.sources
+
+%ifarch %{biarcharches}
+
+# Add the source files to the core debuginfo package.
+cat debuginfocommon.sources >> debuginfo.filelist
+
+%else
+
+%ifarch %{ix86}
+%define basearch i686
+%endif
+%ifarch sparc sparcv9
+%define basearch sparc
+%endif
+
+# The auxarches get only these few source files.
+auxarches_debugsources=\
+'/(generic|linux|%{basearch}|nptl(_db)?)/|/%{glibcsrcdir}/build|/dl-osinfo\.h'
+
+# Place the source files into the core debuginfo pakcage.
+egrep "$auxarches_debugsources" debuginfocommon.sources >> debuginfo.filelist
+
+# Remove the source files from the common debuginfo package.
+egrep -v "$auxarches_debugsources" \
+  debuginfocommon.sources >> debuginfocommon.filelist
+
+%endif # %{biarcharches}
+
+# Add the list of *.a archives in the debug directory to
+# the common debuginfo package.
+list_debug_archives >> debuginfocommon.filelist
+
+%endif # %{debuginfocommonarches}
+
+# Remove some common directories from the common package debuginfo so that we
+# don't end up owning them.
+exclude_common_dirs()
+{
+	exclude_dirs="%{_prefix}/src/debug"
+	exclude_dirs="$exclude_dirs $(echo %{_prefix}/lib/debug{,/%{_lib},/bin,/sbin})"
+	exclude_dirs="$exclude_dirs $(echo %{_prefix}/lib/debug%{_prefix}{,/%{_lib},/libexec,/bin,/sbin})"
+
+	for d in $(echo $exclude_dirs | sed 's/ /\n/g'); do
+		sed -i "\|^%%dir $d/\?$|d" $1
+	done
+}
+
+%ifarch %{debuginfocommonarches}
+exclude_common_dirs debuginfocommon.filelist
+%endif
+exclude_common_dirs debuginfo.filelist
+
+%endif # 0%{?_enable_debug_packages}
+
+##############################################################################
+# Delete files that we do not intended to ship with the auxarch.
+# This is the only place where we touch the installed files after generating
+# the file lists.
+##############################################################################
+%ifarch %{auxarches}
+echo Cutting down the list of unpackaged files
+sed -e '/%%dir/d;/%%config/d;/%%verify/d;s/%%lang([^)]*) //;s#^/*##' \
+	common.filelist devel.filelist static.filelist headers.filelist \
+	utils.filelist nscd.filelist \
+%ifarch %{debuginfocommonarches}
+	debuginfocommon.filelist \
+%endif
+	| (cd %{glibc_sysroot}; xargs --no-run-if-empty rm -f 2> /dev/null || :)
+%endif # %{auxarches}
+
+##############################################################################
+# Run the glibc testsuite
+##############################################################################
+%check
+%if %{with testsuite}
+
+# Run the glibc tests. If any tests fail to build we exit %check with
+# an error, otherwise we print the test failure list and the failed
+# test output and continue.  Write to standard error to avoid
+# synchronization issues with make and shell tracing output if
+# standard output and standard error are different pipes.
+run_tests () {
+  # This hides a test suite build failure, which should be fatal.  We
+  # check "Summary of test results:" below to verify that all tests
+  # were built and run.
+  make %{?_smp_mflags} -O check |& tee rpmbuild.check.log >&2
+  test -n tests.sum
+  if ! grep -q '^Summary of test results:$' rpmbuild.check.log ; then
+    echo "FAIL: test suite build of target: $(basename "$(pwd)")" >& 2
+    exit 1
+  fi
+  set +x
+  grep -v ^PASS: tests.sum > rpmbuild.tests.sum.not-passing || true
+  if test -n rpmbuild.tests.sum.not-passing ; then
+    echo ===================FAILED TESTS===================== >&2
+    echo "Target: $(basename "$(pwd)")" >& 2
+    cat rpmbuild.tests.sum.not-passing >&2
+    while read failed_code failed_test ; do
+      for suffix in out test-result ; do
+        if test -e "$failed_test.$suffix"; then
+	  echo >&2
+          echo "=====$failed_code $failed_test.$suffix=====" >&2
+          cat -- "$failed_test.$suffix" >&2
+	  echo >&2
+        fi
+      done
+    done <rpmbuild.tests.sum.not-passing
+  fi
+
+  # Unconditonally dump differences in the system call list.
+  echo "* System call consistency checks:" >&2
+  cat misc/tst-syscall-list.out >&2
+  set -x
+}
+
+# Increase timeouts
+export TIMEOUTFACTOR=16
+parent=$$
+echo ====================TESTING=========================
+
+# Default libraries.
+pushd build-%{target}
+run_tests
+popd
+
+%if %{buildpower9}
+echo ====================TESTING -mcpu=power9=============
+pushd build-%{target}-power9
+run_tests
+popd
+%endif
+
+
+
+echo ====================TESTING END=====================
+PLTCMD='/^Relocation section .*\(\.rela\?\.plt\|\.rela\.IA_64\.pltoff\)/,/^$/p'
+echo ====================PLT RELOCS LD.SO================
+readelf -Wr %{glibc_sysroot}/%{_lib}/ld-*.so | sed -n -e "$PLTCMD"
+echo ====================PLT RELOCS LIBC.SO==============
+readelf -Wr %{glibc_sysroot}/%{_lib}/libc-*.so | sed -n -e "$PLTCMD"
+echo ====================PLT RELOCS END==================
+
+# Finally, check if valgrind runs with the new glibc.
+# We want to fail building if valgrind is not able to run with this glibc so
+# that we can then coordinate with valgrind to get it fixed before we update
+# glibc.
+pushd build-%{target}
+
+# Show the auxiliary vector as seen by the new library
+# (even if we do not perform the valgrind test).
+LD_SHOW_AUXV=1 elf/ld.so --library-path .:elf:nptl:dlfcn /bin/true
+
+%if %{with valgrind}
+elf/ld.so --library-path .:elf:nptl:dlfcn \
+	/usr/bin/valgrind --error-exitcode=1 \
+	elf/ld.so --library-path .:elf:nptl:dlfcn /usr/bin/true
+%endif
+popd
+
+%endif # %{run_glibc_tests}
+
+
+%pre -p <lua>
+-- Check that the running kernel is new enough
+required = '%{enablekernel}'
+rel = posix.uname("%r")
+if rpm.vercmp(rel, required) < 0 then
+  error("FATAL: kernel too old", 0)
+end
+
+%post -p %{_prefix}/sbin/glibc_post_upgrade.%{_target_cpu}
+
+%posttrans all-langpacks -e -p <lua>
+-- If at the end of the transaction we are still installed
+-- (have a template of non-zero size), then we rebuild the
+-- locale cache (locale-archive) from the pre-populated
+-- locale cache (locale-archive.tmpl) i.e. template.
+if posix.stat("%{_prefix}/lib/locale/locale-archive.tmpl", "size") > 0 then
+  pid = posix.fork()
+  if pid == 0 then
+    posix.exec("%{_prefix}/sbin/build-locale-archive", "--install-langs", "%%{_install_langs}")
+  elseif pid > 0 then
+    posix.wait(pid)
+  end
+end
+
+%postun all-langpacks -p <lua>
+-- In the postun we always remove the locale cache.
+-- We are being uninstalled and if this is an upgrade
+-- then the new packages template will be used to
+-- recreate a new copy of the cache.
+os.remove("%{_prefix}/lib/locale/locale-archive")
+
+%if %{with docs}
+%post devel
+/sbin/install-info %{_infodir}/libc.info.gz %{_infodir}/dir > /dev/null 2>&1 || :
+%endif
+
+%pre headers
+# this used to be a link and it is causing nightmares now
+if [ -L %{_prefix}/include/scsi ] ; then
+  rm -f %{_prefix}/include/scsi
+fi
+
+%if %{with docs}
+%preun devel
+if [ "$1" = 0 ]; then
+  /sbin/install-info --delete %{_infodir}/libc.info.gz %{_infodir}/dir > /dev/null 2>&1 || :
+fi
+%endif
+
+%pre -n nscd
+getent group nscd >/dev/null || /usr/sbin/groupadd -g 28 -r nscd
+getent passwd nscd >/dev/null ||
+  /usr/sbin/useradd -M -o -r -d / -s /sbin/nologin \
+		    -c "NSCD Daemon" -u 28 -g nscd nscd
+
+%post -n nscd
+%systemd_post nscd.service
+
+%preun -n nscd
+%systemd_preun nscd.service
+
+%postun -n nscd
+if test $1 = 0; then
+  /usr/sbin/userdel nscd > /dev/null 2>&1 || :
+fi
+%systemd_postun_with_restart nscd.service
+
+%files -f glibc.filelist
+%dir %{_prefix}/%{_lib}/audit
+%if %{buildpower9}
+%dir /%{_lib}/power9
+%endif
+%ifarch s390x
+/lib/ld64.so.1
+%endif
+%verify(not md5 size mtime) %config(noreplace) /etc/nsswitch.conf
+%verify(not md5 size mtime) %config(noreplace) /etc/ld.so.conf
+%verify(not md5 size mtime) %config(noreplace) /etc/rpc
+%dir /etc/ld.so.conf.d
+%dir %{_prefix}/libexec/getconf
+%dir %{_libdir}/gconv
+%dir %attr(0700,root,root) /var/cache/ldconfig
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/cache/ldconfig/aux-cache
+%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /etc/ld.so.cache
+%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /etc/gai.conf
+%doc README NEWS INSTALL elf/rtld-debugger-interface.txt
+# If rpm doesn't support %license, then use %doc instead.
+%{!?_licensedir:%global license %%doc}
+%license COPYING COPYING.LIB LICENSES
+
+%ifnarch %{auxarches}
+%files -f common.filelist common
+%dir %{_prefix}/lib/locale
+%dir %{_prefix}/lib/locale/C.utf8
+%{_prefix}/lib/locale/C.utf8/*
+%doc documentation/README.timezone
+%doc documentation/gai.conf
+
+%files all-langpacks
+%attr(0644,root,root) %verify(not md5 size mtime) %{_prefix}/lib/locale/locale-archive.tmpl
+%attr(0644,root,root) %verify(not md5 size mtime mode) %ghost %config(missingok,noreplace) %{_prefix}/lib/locale/locale-archive
+
+%files locale-source
+%dir %{_prefix}/share/i18n/locales
+%{_prefix}/share/i18n/locales/*
+%dir %{_prefix}/share/i18n/charmaps
+%{_prefix}/share/i18n/charmaps/*
+
+%files -f devel.filelist devel
+
+%files -f static.filelist static
+
+%files -f headers.filelist headers
+
+%files -f utils.filelist utils
+
+%files -f nscd.filelist -n nscd
+%config(noreplace) /etc/nscd.conf
+%dir %attr(0755,root,root) /var/run/nscd
+%dir %attr(0755,root,root) /var/db/nscd
+/lib/systemd/system/nscd.service
+/lib/systemd/system/nscd.socket
+%{_tmpfilesdir}/nscd.conf
+%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/nscd.pid
+%attr(0666,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/socket
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/passwd
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/group
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/hosts
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/services
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/db/nscd/passwd
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/db/nscd/group
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/db/nscd/hosts
+%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/db/nscd/services
+%ghost %config(missingok,noreplace) /etc/sysconfig/nscd
+%endif
+
+%files -f nss_db.filelist -n nss_db
+/var/db/Makefile
+%files -f nss_hesiod.filelist -n nss_hesiod
+%doc hesiod/README.hesiod
+%files -f nss-devel.filelist nss-devel
+
+%files -f libnsl.filelist -n libnsl
+/%{_lib}/libnsl.so.1
+
+%if 0%{?_enable_debug_packages}
+%files debuginfo -f debuginfo.filelist
+%ifarch %{debuginfocommonarches}
+%ifnarch %{auxarches}
+%files debuginfo-common -f debuginfocommon.filelist
+%endif
+%endif
+%endif
+
+%if %{with benchtests}
+%files benchtests -f benchtests.filelist
+%endif
+
+%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
+
+%changelog
+* Fri Dec 14 2018 Florian Weimer <fweimer@redhat.com> - 2.28-42
+- Fix rdlock stall with PREFER_WRITER_NONRECURSIVE_NP (#1654872)
+
+* Fri Dec 14 2018 Florian Weimer <fweimer@redhat.com> - 2.28-41
+- malloc: Implement double-free check for the thread cache (#1642094)
+
+* Thu Dec 13 2018 Florian Weimer <fweimer@redhat.com> - 2.28-40
+- Add upstream test case for CVE-2018-19591 (#1654010)
+
+* Thu Dec 13 2018 Florian Weimer <fweimer@redhat.com> - 2.28-39
+- Add GCC dependency for new inline string functions on ppc64le (#1652932)
+
+* Sat Dec 01 2018 Carlos O'Donell <carlos@redhat.com> - 2.28-38
+- Add requires on explicit glibc version for glibc-nss-devel (#1649890)
+
+* Fri Nov 30 2018 Carlos O'Donell <carlos@redhat.com> - 2.28-37
+- Fix data race in dynamic loader when using LD_AUDIT (#1635779)
+
+* Wed Nov 28 2018 Florian Weimer <fweimer@redhat.com> - 2.28-36
+- CVE-2018-19591: File descriptor leak in if_nametoindex (#1654010)
+
+* Mon Nov 26 2018 Florian Weimer <fweimer@redhat.com> - 2.28-35
+- Do not use parallel make for building locales (#1652229)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-34
+- support: Print timestamps in timeout handler (#1651274)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-33
+- Increase test timeout for  libio/tst-readline (#1638520)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-32
+- Fix tzfile low-memory assertion failure (#1650571)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-31
+- Add newlines in __libc_fatal calls (#1650566)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-30
+- nscd: Fix use-after-free in addgetnetgrentX (#1650563)
+
+* Tue Nov 20 2018 Florian Weimer <fweimer@redhat.com> - 2.28-29
+- Update syscall names to Linux 4.19 (#1650560)
+
+* Tue Nov 13 2018 Florian Weimer <fweimer@redhat.com> - 2.28-28
+- kl_GL: Fix spelling of Sunday, should be "sapaat" (#1645597)
+
+* Tue Nov 13 2018 Florian Weimer <fweimer@redhat.com> - 2.28-27
+- Fix x86 CPU flags analysis for string function selection (#1641982)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-26
+- Reduce RAM requirements for stdlib/test-bz22786 (#1638523)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-25
+- x86: Improve enablement for 32-bit code using CET (#1645601)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-24
+- Fix crash in getaddrinfo_a when thread creation fails (#1646379)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-23
+- Fix race in pthread_mutex_lock related to PTHREAD_MUTEX_ELISION_NP (#1645604)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-22
+- Fix misreported errno on preadv2/pwritev2 (#1645596)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-21
+- Fix posix/tst-spawn4-compat test case (#1645593)
+
+* Fri Nov  9 2018 Florian Weimer <fweimer@redhat.com> - 2.28-20
+- Disable CET for binaries created by older link editors (#1614979)
+
+* Fri Nov  2 2018 Mike FABIAN <mfabian@redhat.com> - 2.28-19
+- Include Esperanto (eo) in glibc-all-langpacks (#1644303)
+
+* Thu Sep 27 2018 Florian Weimer <fweimer@redhat.com> - 2.28-18
+- stdlib/tst-setcontext9 test suite failure on ppc64le (#1623536)
+
+* Wed Sep 26 2018 Florian Weimer <fweimer@redhat.com> - 2.28-17
+- Add missing ENDBR32 in start.S (#1631730)
+
+* Wed Sep 26 2018 Florian Weimer <fweimer@redhat.com> - 2.28-16
+- Fix bug in generic strstr with large needles (#1631722)
+
+* Wed Sep 26 2018 Florian Weimer <fweimer@redhat.com> - 2.28-15
+- stdlib/tst-setcontext9 test suite failure (#1623536)
+
+* Wed Sep 26 2018 Florian Weimer <fweimer@redhat.com> - 2.28-14
+- gethostid: Missing NULL check for gethostbyname_r (#1631293)
+
+* Wed Sep  5 2018 Carlos O'Donell <carlos@redhat.com> - 2.28-13
+- Provide compatibility support for linking against libpthread_nonshared.a
+  (#1614439)
+
+* Wed Sep  5 2018 Florian Weimer <fweimer@redhat.com> - 2.28-12
+- Add python3-devel build dependency (#1625592)
+
+* Wed Aug 29 2018 Florian Weimer <fweimer@redhat.com> - 2.28-11
+- Drop glibc-ldflags.patch and valgrind bug workaround (#1623456)
+
+* Wed Aug 29 2018 Florian Weimer <fweimer@redhat.com> - 2.28-10
+- regex: Fix memory overread when pattern contains NUL byte (#1622678)
+
+* Wed Aug 29 2018 Florian Weimer <fweimer@redhat.com> - 2.28-9
+- nptl: Fix waiters-after-spinning case in pthread_cond_broadcast (#1622675)
+
+* Tue Aug 14 2018 Florian Weimer <fweimer@redhat.com> - 2.28-8
+- nss_files aliases database file stream leak (#1615790)
+
+* Tue Aug 14 2018 Florian Weimer <fweimer@redhat.com> - 2.28-7
+- Fix static analysis warning in nscd user name allocation (#1615784)
+
+* Tue Aug 14 2018 Florian Weimer <fweimer@redhat.com> - 2.28-6
+- error, error_at_line: Add missing va_end calls (#1615781)
+
+* Mon Aug 13 2018 Carlos O'Donell <carlos@redhat.com> - 2.28-5
+- Remove abort() warning in manual (#1577365)
+
+* Fri Aug 10 2018 Florian Weimer <fweimer@redhat.com> - 2.28-4
+- Fix regression in readdir64@GLIBC_2.1 compat symbol (#1614253)
+
+* Thu Aug  2 2018 Florian Weimer <fweimer@redhat.com> - 2.28-3
+- Log /proc/sysinfo if available (on s390x)
+
+* Thu Aug  2 2018 Florian Weimer <fweimer@redhat.com> - 2.28-2
+- Honor %%{valgrind_arches}
+
+* Wed Aug 01 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-43
+- Update to glibc 2.28 release tarball:
+- Translation updates
+- x86/CET: Fix property note parser (swbz#23467)
+- x86: Add tst-get-cpu-features-static to $(tests) (swbz#23458)
+
+* Mon Jul 30 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-42
+- Auto-sync with upstream branch master,
+  commit af86087f02a5522d8801a11d8381e04f95e33162:
+- x86/CET: Don't parse beyond the note end
+- Fix Linux fcntl OFD locks tests on unsupported kernels
+- x86: Populate COMMON_CPUID_INDEX_80000001 for Intel CPUs (swbz#23459)
+- x86: Correct index_cpu_LZCNT (swbz#23456)
+- Fix string/tst-xbzero-opt if build with gcc head
+
+* Thu Jul 26 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-41
+- Build with --enable-cet on x86_64, i686
+- Auto-sync with upstream branch master,
+  commit cfba5dbb10cc3abde632b46c60c10b2843917035:
+- Keep expected behaviour for [a-z] and [A-z] (#1607286)
+- Additional ucontext tests
+- Intel CET enhancements
+- ISO C11 threads support
+- Fix out-of-bounds access in IBM-1390 converter (swbz#23448)
+- New locale Yakut (Sakha) for Russia (sah_RU) (swbz#22241)
+- os_RU: Add alternative month names (swbz#23140)
+- powerpc64: Always restore TOC on longjmp (swbz#21895)
+- dsb_DE locale: Fix syntax error and add tests (swbz#23208)
+- Improve performance of the generic strstr implementation
+- regcomp: Fix off-by-one bug in build_equiv_class (swbz#23396)
+- Fix out of bounds access in findidxwc (swbz#23442)
+
+* Fri Jul 13 2018 Carlos O'Donell <carlos@redhat.com> - 2.27.9000-40
+- Fix file list for glibc RPM packaging (#1601011).
+
+* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-39
+- Add POWER9 multilib (downstream only)
+
+* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-38
+- Auto-sync with upstream branch master,
+  commit 93304f5f7a32f73b551266c5a181db51d97a71e4:
+- Install <bits/statx.h> header
+- Put the correct Unicode version number 11.0.0 into the generated files
+
+* Wed Jul 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-37
+- Work around valgrind issue on i686 (#1600034)
+
+* Tue Jul 10 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-36
+- Auto-sync with upstream branch master,
+  commit fd70af45528d59a00eb3190ef6706cb299488fcd:
+- Add the statx function
+- regexec: Fix off-by-one bug in weight comparison (#1582229)
+- nss_files: Fix re-reading of long lines (swbz#18991)
+- aarch64: add HWCAP_ATOMICS to HWCAP_IMPORTANT
+- aarch64: Remove HWCAP_CPUID from HWCAP_IMPORTANT
+- conform/conformtest.pl: Escape literal braces in regular expressions
+- x86: Use AVX_Fast_Unaligned_Load from Zen onwards.
+
+* Fri Jul  6 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-35
+- Remove ppc64 multilibs
+
+* Fri Jul 06 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-34
+- Auto-sync with upstream branch master,
+  commit 3a885c1f51b18852869a91cf59a1b39da1595c7a.
+
+* Thu Jul  5 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-33
+- Enable build flags inheritance for nonshared flags
+
+* Wed Jul  4 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-32
+- Add annobin annotations to assembler code (#1548438)
+
+* Wed Jul  4 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-31
+- Enable -D_FORTIFY_SOURCE=2 for nonshared code
+
+* Mon Jul 02 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-30
+- Auto-sync with upstream branch master,
+  commit b7b88cea4151d85eafd7ababc2e4b7ae1daeedf5:
+- New locale: dsb_DE (Lower Sorbian)
+
+* Fri Jun 29 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-29
+- Drop glibc-deprecate_libcrypt.patch.  Variant applied upstream. (#1566464)
+- Drop glibc-linux-timespec-header-compat.patch.  Upstreamed.
+- Auto-sync with upstream branch master,
+  commit e69d994a63afc2d367f286a2a7df28cbf710f0fe.
+
+* Thu Jun 28 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-28
+- Drop glibc-rh1315108.patch.  extend_alloca was removed upstream. (#1315108)
+- Auto-sync with upstream branch master,
+  commit c49e18222e4c40f21586dabced8a49732d946917.
+
+* Thu Jun 21 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-27
+- Compatibility fix for <sys/stat.h> and <linux/time.h>
+
+* Thu Jun 21 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-26
+- Auto-sync with upstream branch master,
+  commit f496b28e61d0342f579bf794c71b80e9c7d0b1b5.
+
+* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-25
+- Auto-sync with upstream branch master,
+  commit f2857da7cdb65bfad75ee30981f5b2fde5bbb1dc.
+
+* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-24
+- Auto-sync with upstream branch master,
+  commit 14beef7575099f6373f9a45b4656f1e3675f7372:
+- iconv: Make IBM273 equivalent to ISO-8859-1 (#1592270)
+
+* Mon Jun 18 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-23
+- Inherit the -msse2 build flag as well (#1592212)
+
+* Fri Jun 01 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-22
+- Modernise nsswitch.conf defaults (#1581809)
+- Adjust build flags inheritence from redhat-rpm-config
+- Auto-sync with upstream branch master,
+  commit 104502102c6fa322515ba0bb3c95c05c3185da7a.
+
+* Fri May 25 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-21
+- Auto-sync with upstream branch master,
+  commit c1dc1e1b34873db79dfbfa8f2f0a2abbe28c0514.
+
+* Wed May 23 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-20
+- Auto-sync with upstream branch master,
+  commit 7f9f1ecb710eac4d65bb02785ddf288cac098323:
+- CVE-2018-11237: Buffer overflow in __mempcpy_avx512_no_vzeroupper (#1581275)
+- Drop glibc-rh1452750-allocate_once.patch,
+  glibc-rh1452750-libidn2.patch.  Applied upstream.
+
+* Wed May 23 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-19
+- Auto-sync with upstream branch master,
+  commit 8f145c77123a565b816f918969e0e35ee5b89153.
+
+* Thu May 17 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-18
+- Do not run telinit u on upgrades (#1579225)
+- Auto-sync with upstream branch master,
+  commit 632a6cbe44cdd41dba7242887992cdca7b42922a.
+
+* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-17
+- Avoid exporting some Sun RPC symbols with default versions (#1577210)
+- Inherit the -mstackrealign flag if it is set
+- Inherit compiler flags in the original order
+- Auto-sync with upstream branch master,
+  commit 89aacb513eb77549a29df2638913a0f8178cf3f5:
+- CVE-2018-11236: realpath: Fix path length overflow (#1581270, swbz#22786)
+
+* Fri May 11 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-16
+- Use /usr/bin/python3 for benchmarks scripts (#1577223)
+
+* Thu Apr 19 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-15
+- Auto-sync with upstream branch master,
+  commit 0085be1415a38b40a5a1a12e49368498f1687380.
+
+* Mon Apr 09 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-14
+- Auto-sync with upstream branch master,
+  commit 583a27d525ae189bdfaa6784021b92a9a1dae12e.
+
+* Thu Mar 29 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-13
+- Auto-sync with upstream branch master,
+  commit d39c0a459ef32a41daac4840859bf304d931adab:
+- CVE-2017-18269: memory corruption in i386 memmove (#1580934)
+
+* Mon Mar 19 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-12
+- Auto-sync with upstream branch master,
+  commit fbce6f7260c3847f14dfa38f60c9111978fb33a5.
+
+* Fri Mar 16 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-11
+- Auto-sync with upstream branch master,
+  commit 700593fdd7aef1e36cfa8bad969faab76a6facda.
+
+* Wed Mar 14 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-10
+- Auto-sync with upstream branch master,
+  commit 7108f1f944792ac68332967015d5e6418c5ccc88.
+
+* Mon Mar 12 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-9
+- Auto-sync with upstream branch master,
+  commit da6d4404ecfd7eacba8c096b0761a5758a59da4b.
+
+* Tue Mar  6 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-8
+- Enable annobin annotations (#1548438)
+
+* Thu Mar 01 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-7
+- Auto-sync with upstream branch master,
+  commit 1a2f44a848663036c8a14671fe0faa3fed0b2a25:
+- Remove spurios reference to libpthread_nonshared.a
+
+* Thu Mar 01 2018 Florian Weimer <fweimer@redhat.com> - 2.27.9000-6
+- Switch back to upstream master branch
+- Drop glibc-rh1013801.patch, applied upstream.
+- Drop glibc-fedora-nptl-linklibc.patch, no longer needed.
+- Auto-sync with upstream branch master,
+  commit bd60ce86520b781ca24b99b2555e2ad389bbfeaa.
+
+* Wed Feb 28 2018 Florian Weimer <fweimer@redhat.com> - 2.27-5
+- Inherit as many flags as possible from redhat-rpm-config (#1550914)
+
+* Mon Feb 19 2018 Richard W.M. Jones <rjones@redhat.com> - 2.27-4
+- riscv64: Add symlink from /usr/lib64/lp64d -> /usr/lib64 for ABI compat.
+- riscv64: Disable valgrind smoke test on this architecture.
+
+* Wed Feb 14 2018 Florian Weimer <fweimer@redhat.com> - 2.27-3
+- Spec file cleanups:
+  - Remove %%defattr(-,root,root)
+  - Use shell to run ldconfig %%transfiletrigger
+  - Move %%transfiletrigger* to the glibc-common subpackage
+  - Trim changelog
+  - Include ChangeLog.old in the source RPM
+
+* Wed Feb  7 2018 Florian Weimer <fweimer@redhat.com> - 2.27-2.1
+- Linux: use reserved name __key in pkey_get (#1542643)
+- Auto-sync with upstream branch release/2.27/master,
+  commit 56170e064e2b21ce204f0817733e92f1730541ea.
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org>
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Mon Feb 05 2018 Carlos O'Donell <carlos@redhat.com> - 2.27-1
+- Update to released glibc 2.27.
+- Auto-sync with upstream branch master,
+  commit 23158b08a0908f381459f273a984c6fd328363cb.
+
+* Tue Jan 30 2018 Richard W.M. Jones <rjones@redhat.com> - 2.26.9000-52
+- Disable -fstack-clash-protection on riscv64:
+  not supported even by GCC 7.3.1 on this architecture.
+
+* Mon Jan 29 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-51
+- Explicitly run ldconfig in the buildroot
+- Do not run ldconfig from scriptlets
+- Put triggers into the glibc-common package, do not pass arguments to ldconfig
+
+* Mon Jan 29 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-50
+- Auto-sync with upstream branch master,
+  commit cdd14619a713ab41e26ba700add4880604324dbb:
+- libnsl: Turn remaining symbols into compat symbols (swbz#22701)
+- be_BY, be_BY@latin, lt_LT, el_CY, el_GR, ru_RU, ru_UA, uk_UA:
+  Add alternative month names (swbz#10871)
+- x86: Revert Intel CET changes to __jmp_buf_tag (swbz#22743)
+- aarch64: Revert the change of the __reserved member of mcontext_t
+
+* Mon Jan 29 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.26.9000-49
+- Add file triggers to do ldconfig calls automatically
+
+* Mon Jan 22 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-48
+- Auto-sync with upstream branch master,
+  commit 21c0696cdef617517de6e25711958c40455c554f:
+- locale: Implement alternative month names (swbz#10871)
+- locale: Change month names for pl_PL (swbz#10871)
+
+* Mon Jan 22 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-47
+- Unconditionally build without libcrypt
+
+* Fri Jan 19 2018 Björn Esser <besser82@fedoraproject.org> - 2.26.9000-46
+- Remove deprecated libcrypt, gets replaced by libxcrypt
+- Add applicable Requires on libxcrypt
+
+* Fri Jan 19 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-45
+- Drop static PIE support on aarch64.  It leads to crashes at run time.
+- Remove glibc-rpcgen subpackage.  See rpcsvc-proto.  (#1531540)
+
+* Fri Jan 19 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-44
+- Correct the list of static PIE architectures (#1247050)
+- glibc_post_upgrade: Remove process restart logic
+- glibc_post_upgrade: Integrate into the build process
+- glibc_post_upgrade: Do not clean up tls subdirectories
+- glibc_post_upgrade: Drop ia64 support
+- Remove architecture-specific symbolic link for iconvconfig
+- Auto-sync with upstream branch master,
+  commit 4612268a0ad8e3409d8ce2314dd2dd8ee0af5269:
+- powerpc: Fix syscalls during early process initialization (swbz#22685)
+
+* Fri Jan 19 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-43
+- Enable static PIE support on i386, x86_64 (#1247050)
+- Remove add-on support (already gone upstream)
+- Rework test suite status reporting
+- Auto-sync with upstream branch master,
+  commit 64f63cb4583ecc1ba16c7253aacc192b6d088511:
+- malloc: Fix integer overflows in memalign and malloc functions (swbz#22343)
+- x86-64: Properly align La_x86_64_retval to VEC_SIZE (swbz#22715)
+- aarch64: Update bits/hwcap.h for Linux 4.15
+- Add NT_ARM_SVE to elf.h
+
+* Wed Jan 17 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-42
+- CVE-2017-14062, CVE-2016-6261, CVE-2016-6263:
+  Use libidn2 for IDNA support (#1452750)
+
+* Mon Jan 15 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-41
+- CVE-2018-1000001: Make getcwd fail if it cannot obtain an absolute path
+  (#1533837)
+- elf: Synchronize DF_1_* flags with binutils (#1439328)
+- Auto-sync with upstream branch master,
+  commit 860b0240a5645edd6490161de3f8d1d1f2786025:
+- aarch64: fix static pie enabled libc when main is in a shared library
+- malloc: Ensure that the consolidated fast chunk has a sane size
+
+* Fri Jan 12 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-40
+- libnsl: Do not install libnsl.so, libnsl.a (#1531540)
+- Use unversioned Supplements: for langpacks (#1490725)
+- Auto-sync with upstream branch master,
+  commit 9a08a366a7e7ddffe62113a9ffe5e50605ea0924:
+- hu_HU locale: Avoid double space (swbz#22657)
+- math: Make default libc_feholdsetround_noex_ctx use __feholdexcept
+  (swbz#22702)
+
+* Thu Jan 11 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-39
+- nptl: Open libgcc.so with RTLD_NOW during pthread_cancel (#1527887)
+- Introduce libnsl subpackage and remove NIS headers (#1531540)
+- Use versioned Obsoletes: for libcrypt-nss.
+- Auto-sync with upstream branch master,
+  commit 08c6e95234c60a5c2f37532d1111acf084f39345:
+- nptl: Add tst-minstack-cancel, tst-minstack-exit (swbz#22636)
+- math: ldbl-128ibm log1pl (-qNaN) spurious "invalid" exception (swbz#22693)
+
+* Wed Jan 10 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-38
+- nptl: Fix stack guard size accounting (#1527887)
+- Remove invalid Obsoletes: on glibc-header provides
+- Require python3 instead of python during builds
+- Auto-sync with upstream branch master,
+  commit 09085ede12fb9650f286bdcd805609ae69f80618:
+- math: ldbl-128ibm lrintl/lroundl missing "invalid" exceptions (swbz#22690)
+- x86-64: Add sincosf with vector FMA
+
+* Mon Jan  8 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-37
+- Add glibc-rpcgen subpackage, until the replacement is packaged (#1531540)
+
+* Mon Jan 08 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-36
+- Auto-sync with upstream branch master,
+  commit 579396ee082565ab5f42ff166a264891223b7b82:
+- nptl: Add test for callee-saved register restore in pthread_exit
+- getrlimit64: fix for 32-bit configurations with default version >= 2.2
+- elf: Add linux-4.15 VDSO hash for RISC-V
+- elf: Add RISC-V dynamic relocations to elf.h
+- powerpc: Fix error message during relocation overflow
+- prlimit: Replace old_rlimit RLIM64_INFINITY with RLIM_INFINITY (swbz#22678)
+
+* Fri Jan 05 2018 Florian Weimer <fweimer@redhat.com> - 2.26.9000-35
+- Remove sln (#1531546)
+- Remove Sun RPC interfaces (#1531540)
+- Rebuild with newer GCC to fix pthread_exit stack unwinding issue (#1529549)
+- Auto-sync with upstream branch master,
+  commit f1a844ac6389ea4e111afc019323ca982b5b027d:
+- CVE-2017-16997: elf: Check for empty tokens before DST expansion (#1526866)
+- i386: In makecontext, align the stack before calling exit (swbz#22667)
+- x86, armhfp: sync sys/ptrace.h with Linux 4.15 (swbz#22433)
+- elf: check for rpath emptiness before making a copy of it
+- elf: remove redundant is_path argument
+- elf: remove redundant code from is_dst
+- elf: remove redundant code from _dl_dst_substitute
+- scandir: fix wrong assumption about errno (swbz#17804)
+- Deprecate external use of libio.h and _G_config.h
+
+* Fri Dec 22 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-34
+- Auto-sync with upstream branch master,
+  commit bad7a0c81f501fbbcc79af9eaa4b8254441c4a1f:
+- copy_file_range: New function to copy file data
+- nptl: Consolidate pthread_{timed,try}join{_np}
+- nptl: Implement pthread_self in libc.so (swbz#22635)
+- math: Provide a C++ version of iseqsig (swbz#22377)
+- elf: remove redundant __libc_enable_secure check from fillin_rpath
+- math: Avoid signed shift overflow in pow (swbz#21309)
+- x86: Add feature_1 to tcbhead_t (swbz#22563)
+- x86: Update cancel_jmp_buf to match __jmp_buf_tag (swbz#22563)
+- ld.so: Examine GLRO to detect inactive loader (swbz#20204)
+- nscd: Fix nscd readlink argument aliasing (swbz#22446)
+- elf: do not substitute dst in $LD_LIBRARY_PATH twice (swbz#22627)
+- ldconfig: set LC_COLLATE to C (swbz#22505)
+- math: New generic sincosf
+- powerpc: st{r,p}cpy optimization for aligned strings
+- CVE-2017-1000409: Count in expanded path in _dl_init_path (#1524867)
+- CVE-2017-1000408: Compute correct array size in _dl_init_paths (#1524867)
+- x86-64: Remove sysdeps/x86_64/fpu/s_cosf.S
+- aarch64: Improve strcmp unaligned performance
+
+* Wed Dec 13 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-33
+- Remove power6 platform directory (#1522675)
+
+* Wed Dec 13 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-32
+- Obsolete the libcrypt-nss subpackage (#1525396)
+- armhfp: Disable -fstack-clash-protection due to GCC bug (#1522678)
+- ppc64: Disable power6 multilib due to GCC bug (#1522675)
+- Auto-sync with upstream branch master,
+  commit 243b63337c2c02f30ec3a988ecc44bc0f6ffa0ad:
+- libio: Free backup area when it not required (swbz#22415)
+- math: Fix nextafter and nexttoward declaration (swbz#22593)
+- math: New generic cosf
+- powerpc: POWER8 memcpy optimization for cached memory
+- x86-64: Add sinf with FMA
+- x86-64: Remove sysdeps/x86_64/fpu/s_sinf.S
+- math: Fix ctanh (0 + i NaN), ctanh (0 + i Inf) (swbz#22568)
+- lt_LT locale: Base collation on copy "iso14651_t1" (swbz#22524)
+- math: Add _Float32 function aliases
+- math: Make cacosh (0 + iNaN) return NaN + i pi/2 (swbz#22561)
+- hsb_DE locale: Base collation on copy "iso14651_t1" (swbz#22515)
+
+* Wed Dec 06 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-31
+- Add elision tunables.  Drop related configure flag.  (#1383986)
+- Auto-sync with upstream branch master,
+  commit 37ac8e635a29810318f6d79902102e2e96b2b5bf:
+- Linux: Implement interfaces for memory protection keys
+- math: Add _Float64, _Float32x function aliases
+- math: Use sign as double for reduced case in sinf
+- math: fix sinf(NAN)
+- math: s_sinf.c: Replace floor with simple casts
+- et_EE locale: Base collation on iso14651_t1 (swbz#22517)
+- tr_TR locale: Base collation on iso14651_t1 (swbz#22527)
+- hr_HR locale: Avoid single code points for digraphs in LC_TIME (swbz#10580)
+- S390: Fix backtrace in vdso functions
+
+* Mon Dec 04 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-30
+- Add build dependency on bison
+- Auto-sync with upstream branch master,
+  commit 7863a7118112fe502e8020a0db0fa74fef281f29:
+- math: New generic sinf (swbz#5997)
+- is_IS locale: Base collation on iso14651_t1 (swbz#22519)
+- intl: Improve reproducibility by using bison (swbz#22432)
+- sr_RS, bs_BA locales: make collation rules the same as for hr_HR (wbz#22534)
+- hr_HR locale: various updates (swbz#10580)
+- x86: Make a space in jmpbuf for shadow stack pointer
+- CVE-2017-17426: malloc: Fix integer overflow in tcache (swbz#22375)
+- locale: make forward accent sorting the default in collating (swbz#17750)
+
+* Wed Nov 29 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-29
+- Enable -fstack-clash-protection (#1512531)
+- Auto-sync with upstream branch master,
+  commit a55430cb0e261834ce7a4e118dd9e0f2b7fb14bc:
+- elf: Properly compute offsets of note descriptor and next note (swbz#22370)
+- cs_CZ locale: Base collation on iso14651_t1 (swbz#22336)
+- Implement the mlock2 function
+- Add _Float64x function aliases
+- elf: Consolidate link map sorting
+- pl_PL locale: Base collation on iso14651_t1 (swbz#22469)
+- nss: Export nscd hash function as __nss_hash (swbz#22459)
+
+* Thu Nov 23 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-28
+- Auto-sync with upstream branch master,
+  commit cccb6d4e87053ed63c74aee063fa84eb63ebf7b8:
+- sigwait can fail with EINTR (#1516394)
+- Add memfd_create function
+- resolv: Fix p_secstodate overflow handling (swbz#22463)
+- resolv: Obsolete p_secstodate
+- Avoid use of strlen in getlogin_r (swbz#22447)
+- lv_LV locale: fix collation (swbz#15537)
+- S390: Add cfi information for start routines in order to stop unwinding
+- aarch64: Optimized memset for falkor
+
+* Sun Nov 19 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-27
+- Auto-sync with upstream branch master,
+  commit f6e965ee94b37289f64ecd3253021541f7c214c3:
+- powerpc: AT_HWCAP2 bit PPC_FEATURE2_HTM_NO_SUSPEND
+- aarch64: Add HWCAP_DCPOP bit
+- ttyname, ttyname_r: Don't bail prematurely (swbz#22145)
+- signal: Optimize sigrelse implementation
+- inet: Check length of ifname in if_nametoindex (swbz#22442)
+- malloc: Account for all heaps in an arena in malloc_info (swbz#22439)
+- malloc: Add missing arena lock in malloc_info (swbz#22408)
+- malloc: Use __builtin_tgmath in tgmath.h with GCC 8 (swbz#21660)
+- locale: Replaced unicode sequences in the ASCII printable range
+- resolv: More precise checks in res_hnok, res_dnok (swbz#22409, swbz#22412)
+- resolv: ns_name_pton should report trailing \ as error (swbz#22413)
+- locale: mfe_MU, miq_NI, an_ES, kab_DZ, om_ET: Escape / in d_fmt (swbz#22403)
+
+* Tue Nov 07 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-26
+- Auto-sync with upstream branch master,
+  commit 6b86036452b9ac47b4ee7789a50f2f37df7ecc4f:
+- CVE-2017-15804: glob: Fix buffer overflow during GLOB_TILDE unescaping
+- powerpc: Use latest string function optimization for internal function calls
+- math: No _Float128 support for ppc64le -mlong-double-64 (swbz#22402)
+- tpi_PG locale: Fix wrong d_fmt
+- aarch64: Disable lazy symbol binding of TLSDESC
+- tpi_PG locale: fix syntax error (swbz#22382)
+- i586: Use conditional branches in strcpy.S (swbz#22353)
+- ffsl, ffsll: Declare under __USE_MISC, not just __USE_GNU
+- csb_PL locale: Fix abmon/mon for March (swbz#19485)
+- locale: Various yesstr/nostr/yesexpr/noexpr fixes (swbz#15260, swbz#15261)
+- localedef: Add --no-warnings/--warnings option
+- powerpc: Replace lxvd2x/stxvd2x with lvx/stvx in P7's memcpy/memmove
+- locale: Use ASCII as much as possible in LC_MESSAGES
+- Add new locale yuw_PG (swbz#20952)
+- malloc: Add single-threaded path to malloc/realloc/calloc/memalloc
+- i386: Replace assembly versions of e_powf with generic e_powf.c
+- i386: Replace assembly versions of e_log2f with generic e_log2f.c
+- x86-64: Add powf with FMA
+- x86-64: Add logf with FMA
+- i386: Replace assembly versions of e_logf with generic e_logf.c
+- i386: Replace assembly versions of e_exp2f with generic e_exp2f.c
+- x86-64: Add exp2f with FMA
+- i386: Replace assembly versions of e_expf with generic e_expf.c
+
+* Sat Oct 21 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-25
+- Auto-sync with upstream branch master,
+  commit 797ba44ba27521261f94cc521f1c2ca74f650147:
+- math: Add bits/floatn.h defines for more _FloatN / _FloatNx types
+- posix: Fix improper assert in Linux posix_spawn (swbz#22273)
+- x86-64: Use fxsave/xsave/xsavec in _dl_runtime_resolve (swbz#21265)
+- CVE-2017-15670: glob: Fix one-byte overflow (#1504807)
+- malloc: Add single-threaded path to _int_free
+- locale: Add new locale kab_DZ (swbz#18812)
+- locale: Add new locale shn_MM (swbz#13605)
+
+* Fri Oct 20 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-24
+- Use make -O to serialize make output
+- Auto-sync with upstream branch master,
+  commit 63b4baa44e8d22501c433c4093aa3310f91b6aa2:
+- sysconf: Fix missing definition of UIO_MAXIOV on Linux (#1504165)
+- Install correct bits/long-double.h for MIPS64 (swbz#22322)
+- malloc: Fix deadlock in _int_free consistency check
+- x86-64: Don't set GLRO(dl_platform) to NULL (swbz#22299)
+- math: Add _Float128 function aliases
+- locale: Add new locale mjw_IN (swbz#13994)
+- aarch64: Rewrite elf_machine_load_address using _DYNAMIC symbol
+- powerpc: fix check-before-set in SET_RESTORE_ROUND
+- locale: Use U+202F as thousands separators in pl_PL locale (swbz#16777)
+- math: Use __f128 to define FLT128_* constants in include/float.h for old GCC
+- malloc: Improve malloc initialization sequence (swbz#22159)
+- malloc: Use relaxed atomics for malloc have_fastchunks
+- locale: New locale ca_ES@valencia (swbz#2522)
+- math: Let signbit use the builtin in C++ mode with gcc < 6.x (swbz#22296)
+- locale: Place monetary symbol in el_GR, el_CY after the amount (swbz#22019)
+
+* Tue Oct 17 2017 Florian Weimer <fweimer@redhat.com> - 2.26.9000-23
+- Switch to .9000 version numbers during development
+
+* Tue Oct 17 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-22
+- Auto-sync with upstream branch master,
+  commit c38a4bfd596db2be2b9c1f96715bdc833eab760a:
+- malloc: Use compat_symbol_reference in libmcheck (swbz#22050)
+
+* Mon Oct 16 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-21
+- Auto-sync with upstream branch master,
+  commit 596f70134a8f11967c65c1d55a94a3a2718c731d:
+- Silence -O3 -Wall warning in malloc/hooks.c with GCC 7 (swbz#22052)
+- locale: No warning for non-symbolic character (swbz#22295)
+- locale: Allow "" int_curr_Symbol (swbz#22294)
+- locale: Fix localedef exit code (swbz#22292)
+- nptl: Preserve error in setxid thread broadcast in coredumps (swbz#22153)
+- powerpc: Avoid putting floating point values in memory (swbz#22189)
+- powerpc: Fix the carry bit on mpn_[add|sub]_n on POWER7 (swbz#22142)
+- Support profiling PIE (swbz#22284)
+
+* Wed Oct 11 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-20
+- Auto-sync with upstream branch master,
+  commit d8425e116cdd954fea0c04c0f406179b5daebbb3:
+- nss_files performance issue in multi mode (swbz#22078)
+- Ensure C99 and C11 interfaces are available for C++ (swbz#21326)
+
+* Mon Oct 09 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-19
+- Move /var/db/Makefile to nss_db (#1498900)
+- Auto-sync with upstream branch master,
+  commit 645ac9aaf89e3311949828546df6334322f48933:
+- openpty: use TIOCGPTPEER to open slave side fd
+
+* Fri Oct 06 2017 Carlos O'Donell <carlos@systemhalted.org> - 2.26.90-18
+- Auto-sync with upstream master,
+  commit 1e26d35193efbb29239c710a4c46a64708643320.
+- malloc: Fix tcache leak after thread destruction (swbz#22111)
+- powerpc:  Fix IFUNC for memrchr.
+- aarch64: Optimized implementation of memmove for Qualcomm Falkor
+- Always do locking when iterating over list of streams (swbz#15142)
+- abort: Do not flush stdio streams (swbz#15436)
+
+* Wed Oct 04 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-17
+- Move nss_compat to the main glibc package (#1400538)
+- Auto-sync with upstream master,
+  commit 11c4f5010c58029e73e656d5df4f8f42c9b8e877:
+- crypt: Use NSPR header files in addition to NSS header files (#1489339)
+- math: Fix yn(n,0) without SVID wrapper (swbz#22244)
+- math: Fix log2(0) and log(10) in downward rounding (swbz#22243)
+- math: Add C++ versions of iscanonical for ldbl-96, ldbl-128ibm (swbz#22235)
+- powerpc: Optimize memrchr for power8
+- Hide various internal functions (swbz#18822)
+
+* Sat Sep 30 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-16
+- Auto-sync with upstream master,
+  commit 1e2bffd05c36a9be30d7092d6593a9e9aa009ada:
+- Add IBM858 charset (#1416405)
+- Update kernel version in syscall-names.list to 4.13
+- Add Linux 4.13 constants to bits/fcntl-linux.h
+- Add fcntl sealing interfaces from Linux 3.17 to bits/fcntl-linux.h
+- math: New generic powf, log2f, logf
+- Fix nearbyint arithmetic moved before feholdexcept (swbz#22225)
+- Mark __dso_handle as hidden (swbz#18822)
+- Skip PT_DYNAMIC segment with p_filesz == 0 (swbz#22101)
+- glob now matches dangling symbolic links (swbz#866, swbz#22183)
+- nscd: Release read lock after resetting timeout (swbz#22161)
+- Avoid __MATH_TG in C++ mode with -Os for fpclassify (swbz#22146)
+- Fix dlclose/exit race (swbz#22180)
+- x86: Add SSE4.1 trunc, truncf (swbz#20142)
+- Fix atexit/exit race (swbz#14333)
+- Use execveat syscall in fexecve (swbz#22134)
+- Enable unwind info in libc-start.c and backtrace.c
+- powerpc: Avoid misaligned stores in memset
+- powerpc: build some IFUNC math functions for libc and libm (swbz#21745)
+- Removed redundant data (LC_TIME and LC_MESSAGES) for niu_NZ (swbz#22023)
+- Fix LC_TELEPHONE for az_AZ (swbz#22112)
+- x86: Add MathVec_Prefer_No_AVX512 to cpu-features (swbz#21967)
+- x86: Add x86_64 to x86-64 HWCAP (swbz#22093)
+- Finish change from “Bengali” to “Bangla” (swbz#14925)
+- posix: fix glob bugs with long login names (swbz#1062)
+- posix: Fix getpwnam_r usage (swbz#1062)
+- posix: accept inode 0 is a valid inode number (swbz#19971)
+- Remove redundant LC_TIME data in om_KE (swbz#22100)
+- Remove remaining _HAVE_STRING_ARCH_* definitions (swbz#18858)
+- resolv: Fix memory leak with OOM during resolv.conf parsing (swbz#22095)
+- Add miq_NI locale for Miskito (swbz#20498)
+- Fix bits/math-finite.h exp10 condition (swbz#22082)
+
+* Mon Sep 04 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-15
+- Auto-sync with upstream master,
+  commit b38042f51430974642616a60afbbf96fd0b98659:
+- Implement tmpfile with O_TMPFILE (swbz#21530)
+- Obsolete pow10 functions
+- math.h: Warn about an already-defined log macro
+
+* Fri Sep 01 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-14
+- Build glibc with -O2 (following the upstream default).
+- Auto-sync with upstream master,
+  commit f4a6be2582b8dfe8adfa68da3dd8decf566b3983:
+- malloc: Abort on heap corruption, without a backtrace (swbz#21754)
+- getaddrinfo: Return EAI_NODATA for gethostbyname2_r with NO_DATA (swbz#21922)
+- getaddrinfo: Fix error handling in gethosts (swbz#21915) (swbz#21922)
+- Place $(elf-objpfx)sofini.os last (swbz#22051)
+- Various locale fixes (swbz#15332, swbz#22044)
+
+* Wed Aug 30 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-13
+- Drop glibc-rh952799.patch, applied upstream (#952799, swbz#22025)
+- Auto-sync with upstream master,
+  commit 5f9409b787c5758fc277f8d1baf7478b752b775d:
+- Various locale fixes (swbz#22022, swbz#22038, swbz#21951, swbz#13805,
+  swbz#21971, swbz#21959)
+- MIPS/o32: Fix internal_syscall5/6/7 (swbz#21956)
+- AArch64: Fix procfs.h not to expose stdint.h types
+- iconv_open: Fix heap corruption on gconv_init failure (swbz#22026)
+- iconv: Mangle __btowc_fct even without __init_fct (swbz#22025)
+- Fix bits/math-finite.h _MSUF_ expansion namespace (swbz#22028)
+- Provide a C++ version of iszero that does not use __MATH_TG (swbz#21930)
+
+* Mon Aug 28 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-12
+- Auto-sync with upstream master,
+  commit 2dba5ce7b8115d6a2789bf279892263621088e74.
+
+* Fri Aug 25 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-11
+- Auto-sync with upstream master,
+  commit 3d7b66f66cb223e899a7ebc0f4c20f13e711c9e0:
+- string/stratcliff.c: Replace int with size_t (swbz#21982)
+- Fix tgmath.h handling of complex integers (swbz#21684)
+
+* Thu Aug 24 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-10
+- Use an architecture-independent system call list (#1484729)
+- Drop glibc-fedora-include-bits-ldbl.patch (#1482105)
+
+* Tue Aug 22 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-9
+- Auto-sync with upstream master,
+  commit 80f91666fed71fa3dd5eb5618739147cc731bc89.
+
+* Mon Aug 21 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-8
+- Auto-sync with upstream master,
+  commit a8410a5fc9305c316633a5a3033f3927b759be35:
+- Obsolete matherr, _LIB_VERSION, libieee.a.
+
+* Mon Aug 21 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-7
+- Auto-sync with upstream master,
+  commit 4504783c0f65b7074204c6126c6255ed89d6594e.
+
+* Mon Aug 21 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-6
+- Auto-sync with upstream master,
+  commit b5889d25e9bf944a89fdd7bcabf3b6c6f6bb6f7c:
+- assert: Support types without operator== (int) (#1483005)
+
+* Mon Aug 21 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-5
+- Auto-sync with upstream master,
+  commit 2585d7b839559e665d5723734862fbe62264b25d:
+- Do not use generic selection in C++ mode
+- Do not use __builtin_types_compatible_p in C++ mode (#1481205)
+- x86-64: Check FMA_Usable in ifunc-mathvec-avx2.h (swbz#21966)
+- Various locale fixes (swbz#21750, swbz#21960, swbz#21959, swbz#19852)
+- Fix sigval namespace (swbz#21944)
+- x86-64: Optimize e_expf with FMA (swbz#21912)
+- Adjust glibc-rh827510.patch.
+
+* Wed Aug 16 2017 Tomasz Kłoczko <kloczek@fedoraproject.org> - 2.26-4
+- Remove 'Buildroot' tag, 'Group' tag, and '%%clean' section, and don't
+  remove the buildroot in '%%install', all per Fedora Packaging Guidelines
+  (#1476839)
+
+* Wed Aug 16 2017 Florian Weimer <fweimer@redhat.com> - 2.26.90-3
+- Auto-sync with upstream master,
+  commit 403143e1df85dadd374f304bd891be0cd7573e3b:
+- x86-64: Align L(SP_RANGE)/L(SP_INF_0) to 8 bytes (swbz#21955)
+- powerpc: Add values from Linux 4.8 to <elf.h>
+- S390: Add new s390 platform z14.
+- Various locale fixes (swbz#14925, swbz#20008, swbz#20482, swbz#12349
+  swbz#19982, swbz#20756, swbz#20756, swbz#21836, swbz#17563, swbz#16905,
+  swbz#21920, swbz#21854)
+- NSS: Replace exported NSS lookup functions with stubs (swbz#21962)
+- i386: Do not set internal_function
+- assert: Suppress pedantic warning caused by statement expression (swbz#21242)
+- powerpc: Restrict xssqrtqp operands to Vector Registers (swbz#21941)
+- sys/ptrace.h: remove obsolete PTRACE_SEIZE_DEVEL constant (swbz#21928)
+- Remove __qaddr_t, __long_double_t
+- Fix uc_* namespace (swbz#21457)
+- nss: Call __resolv_context_put before early return in get*_r (swbz#21932)
+- aarch64: Optimized memcpy for Qualcomm Falkor processor
+- manual: Document getcontext uc_stack value on Linux (swbz#759)
+- i386: Add <startup.h> (swbz#21913)
+- Don't use IFUNC resolver for longjmp or system in libpthread (swbz#21041)
+- Fix XPG4.2 bits/sigaction.h namespace (swbz#21899)
+- x86-64: Add FMA multiarch functions to libm
+- i386: Support static PIE in start.S
+- Compile tst-prelink.c without PIE (swbz#21815)
+- x86-64: Use _dl_runtime_resolve_opt only with AVX512F (swbz#21871)
+- x86: Remove __memset_zero_constant_len_parameter (swbz#21790)
+
+* Wed Aug 16 2017 Florian Weimer <fweimer@redhat.com> - 2.26-2
+- Disable multi-arch (IFUNC string functions) on i686 (#1471427)
+- Remove nosegneg 32-bit Xen PV support libraries (#1482027)
+- Adjust spec file to RPM changes
+
+* Thu Aug 03 2017 Carlos O'Donell <carlos@systemhalted.org> - 2.26-1
+- Update to released glibc 2.26.
+- Auto-sync with upstream master,
+  commit 2aad4b04ad7b17a2e6b0e66d2cb4bc559376617b.
+- getaddrinfo: Release resolver context on error in gethosts (swbz#21885)