diff --git a/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch b/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
deleted file mode 100644
index 78d7c4b..0000000
--- a/SOURCES/glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From patchwork Thu Jul  3 13:26:40 2014
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: ARM: Define ELF_MACHINE_NO_REL
-X-Patchwork-Submitter: Will Newton <will.newton@linaro.org>
-X-Patchwork-Id: 366862
-Message-Id: <1404394000-13429-1-git-send-email-will.newton@linaro.org>
-To: libc-alpha@sourceware.org
-Date: Thu,  3 Jul 2014 14:26:40 +0100
-From: Will Newton <will.newton@linaro.org>
-List-Id: <libc-alpha.sourceware.org>
-
-Fix a -Wundef warning on ARM.
-
-ChangeLog:
-
-2014-07-03  Will Newton  <will.newton@linaro.org>
-
-	* sysdeps/arm/dl-machine.h (ELF_MACHINE_NO_REL): Define.
----
- sysdeps/arm/dl-machine.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
-index c5ffc93..d6b0c52 100644
---- a/sysdeps/arm/dl-machine.h
-+++ b/sysdeps/arm/dl-machine.h
-@@ -296,6 +296,7 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
- /* ARM never uses Elf32_Rela relocations for the dynamic linker.
-    Prelinked libraries may use Elf32_Rela though.  */
- #define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
-+#define ELF_MACHINE_NO_REL 0
- 
- /* Names of the architecture-specific auditing callback functions.  */
- #define ARCH_LA_PLTENTER arm_gnu_pltenter
diff --git a/SOURCES/glibc-rh1235112.patch b/SOURCES/glibc-rh1235112.patch
new file mode 100644
index 0000000..e7049af
--- /dev/null
+++ b/SOURCES/glibc-rh1235112.patch
@@ -0,0 +1,60 @@
+commit a58ad3f801960fa0dc0bb1106eb0d99f7ebd77b1
+Author: Roland McGrath <roland@hack.frob.com>
+Date:   Thu Jun 13 15:09:29 2013 -0700
+
+    Fix raciness in waitid test.
+
+diff --git a/posix/tst-waitid.c b/posix/tst-waitid.c
+index f8a302ea3153a853..d63ad65fbefc64ad 100644
+--- a/posix/tst-waitid.c
++++ b/posix/tst-waitid.c
+@@ -145,7 +145,7 @@ do_test (int argc, char *argv[])
+   /* Give the child a chance to stop.  */
+   sleep (3);
+ 
+-  CHECK_SIGCHLD ("stopped", CLD_STOPPED, SIGSTOP);
++  CHECK_SIGCHLD ("stopped (before waitid)", CLD_STOPPED, SIGSTOP);
+ 
+   /* Now try a wait that should not succeed.  */
+   siginfo_t info;
+@@ -227,7 +227,7 @@ do_test (int argc, char *argv[])
+       expecting_sigchld = 0;
+     }
+   else
+-    CHECK_SIGCHLD ("continued", CLD_CONTINUED, SIGCONT);
++    CHECK_SIGCHLD ("continued (before waitid)", CLD_CONTINUED, SIGCONT);
+ 
+   info.si_signo = 0;		/* A successful call sets it to SIGCHLD.  */
+   info.si_pid = -1;
+@@ -336,6 +336,13 @@ do_test (int argc, char *argv[])
+       printf ("kill (%d, SIGSTOP): %m\n", pid);
+       RETURN (EXIT_FAILURE);
+     }
++
++  /* Give the child a chance to stop.  The waitpid call below will block
++     until it has stopped, but if we are real quick and enter the waitpid
++     system call before the SIGCHLD has been generated, then it will be
++     discarded and never delivered.  */
++  sleep (3);
++
+   pid_t wpid = waitpid (pid, &fail, WUNTRACED);
+   if (wpid < 0)
+     {
+@@ -354,7 +361,7 @@ do_test (int argc, char *argv[])
+       printf ("waitpid WUNTRACED on stopped: status %x\n", fail);
+       RETURN (EXIT_FAILURE);
+     }
+-  CHECK_SIGCHLD ("stopped", CLD_STOPPED, SIGSTOP);
++  CHECK_SIGCHLD ("stopped (after waitpid)", CLD_STOPPED, SIGSTOP);
+ 
+   expecting_sigchld = 1;
+   if (kill (pid, SIGCONT) != 0)
+@@ -372,7 +379,7 @@ do_test (int argc, char *argv[])
+       expecting_sigchld = 0;
+     }
+   else
+-    CHECK_SIGCHLD ("continued", CLD_CONTINUED, SIGCONT);
++    CHECK_SIGCHLD ("continued (before waitpid)", CLD_CONTINUED, SIGCONT);
+ 
+   wpid = waitpid (pid, &fail, WCONTINUED);
+   if (wpid < 0)
diff --git a/SOURCES/glibc-rh1256317-armhfp-build-issue.patch b/SOURCES/glibc-rh1256317-armhfp-build-issue.patch
deleted file mode 100644
index aa6e7fe..0000000
--- a/SOURCES/glibc-rh1256317-armhfp-build-issue.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sysdeps/unix/arm/sysdep.S	2016-11-05 11:44:45.561945344 +0100
-+++ b/sysdeps/unix/arm/sysdep.S	2016-11-05 11:44:19.542069815 +0100
-@@ -37,7 +37,7 @@
- 	moveq r0, $EAGAIN	/* Yes; translate it to EAGAIN.  */
- #endif
- 
--#ifndef IS_IN_rtld
-+#if !IS_IN (rtld)
- 	mov ip, lr
- 	cfi_register (lr, ip)
- 	mov r1, r0
diff --git a/SOURCES/glibc-rh1728915-1.patch b/SOURCES/glibc-rh1728915-1.patch
new file mode 100644
index 0000000..691af18
--- /dev/null
+++ b/SOURCES/glibc-rh1728915-1.patch
@@ -0,0 +1,147 @@
+commit 08b7e9988272113ca5640cf5e115ea51449fb392
+Author: Ian Kent <ikent@redhat.com>
+Date:   Mon Sep 2 13:26:14 2019 +0200
+
+    Use autofs "ignore" mount hint in getmntent_r/getmntent
+    
+    Historically autofs mounts were not included in mount table
+    listings. This is the case in other SysV autofs implementations
+    and was also the case with Linux autofs.
+    
+    But now that /etc/mtab is a symlink to the proc filesystem
+    mount table the autofs mount entries appear in the mount table
+    on Linux.
+    
+    Prior to the symlinking of /etc/mtab mount table it was
+    sufficient to call mount(2) and simply not update /etc/mtab
+    to exclude autofs mounts from mount listings.
+    
+    Also, with the symlinking of /etc/mtab we have seen a shift in
+    usage toward using the proc mount tables directly.
+    
+    But the autofs mount entries need to be retained when coming
+    from the proc file system for applications that need them
+    (largely autofs file system users themselves) so filtering out
+    these entries within the kernel itself can't be done. So it
+    needs be done in user space.
+    
+    There are three reasons to omit the autofs mount entries.
+    
+    One is that certain types of auto-mounts have an autofs mount
+    for every entry in their autofs mount map and these maps can
+    be quite large. This leads to mount table listings containing
+    a lot of unnecessary entries.
+    
+    Also, this change in behaviour between autofs implementations
+    can cause problems for applications that use getmntent(3) in
+    other OS implementations as well as Linux.
+    
+    Lastly, there's very little that user space can do with autofs
+    mount entries since this must be left to the autofs mount owner,
+    typically the automount daemon. But it can also lead to attempts
+    to access automount managed paths resulting mounts being triggered
+    when they aren't needed or mounts staying mounted for much longer
+    thay they need be. While the point of this change ins't to help
+    with these problems (and it can be quite a problem) it may be
+    a welcome side effect.
+    
+    So the Linux autofs file system has been modified to accept a
+    pseudo mount option of "ignore" (as is used in other OS
+    implementations) so that user space can use this as a hint to
+    skip autofs entries on reading the mount table.
+    
+    The Linux autofs automount daemon used getmntent(3) itself and
+    has been modified to use the proc file system directly so that
+    it can "ignore" mount option.
+    
+    The use of this mount option is opt-in and a configuration
+    option has been added which defaults to not use this option
+    so if there are applications that need these entries, other
+    than autofs itself, they can be retained. Also, since this
+    filtering is based on an added mount option earlier versions
+    of Linux autofs iand other autofs file system users will not
+    use the option and so won't be affected by the change.
+
+diff -rup a/misc/mntent_r.c b/misc/mntent_r.c
+--- a/misc/mntent_r.c	2012-12-24 22:02:13.000000000 -0500
++++ b/misc/mntent_r.c	2020-01-20 15:55:23.417838854 -0500
+@@ -18,6 +18,7 @@
+ 
+ #include <alloca.h>
+ #include <mntent.h>
++#include <stdbool.h>
+ #include <stdio.h>
+ #include <stdio_ext.h>
+ #include <string.h>
+@@ -112,26 +113,18 @@ decode_name (char *buf)
+   return buf;
+ }
+ 
+-
+-/* Read one mount table entry from STREAM.  Returns a pointer to storage
+-   reused on the next call, or null for EOF or error (use feof/ferror to
+-   check).  */
+-struct mntent *
+-__getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
++static bool
++get_mnt_entry (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
+ {
+   char *cp;
+   char *head;
+ 
+-  flockfile (stream);
+   do
+     {
+       char *end_ptr;
+ 
+       if (fgets_unlocked (buffer, bufsiz, stream) == NULL)
+-	{
+-	  funlockfile (stream);
+-	  return NULL;
+-	}
++	return false;
+ 
+       end_ptr = strchr (buffer, '\n');
+       if (end_ptr != NULL)	/* chop newline */
+@@ -173,9 +166,40 @@ __getmntent_r (FILE *stream, struct mnte
+     case 2:
+       break;
+     }
++
++  return true;
++}
++
++/* Read one mount table entry from STREAM.  Returns a pointer to storage
++   reused on the next call, or null for EOF or error (use feof/ferror to
++   check).  */
++struct mntent *
++__getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
++{
++  struct mntent *result;
++
++  flockfile (stream);
++  while (true)
++    if (get_mnt_entry (stream, mp, buffer, bufsiz))
++      {
++	/* If the file system is autofs look for a mount option hint
++	   ("ignore") to skip the entry.  */
++	if (strcmp (mp->mnt_type, "autofs") == 0 && __hasmntopt (mp, "ignore"))
++	  memset (mp, 0, sizeof (*mp));
++	else
++	  {
++	    result = mp;
++	    break;
++	  }
++      }
++    else
++      {
++	result = NULL;
++	break;
++      }
+   funlockfile (stream);
+ 
+-  return mp;
++  return result;
+ }
+ libc_hidden_def (__getmntent_r)
+ weak_alias (__getmntent_r, getmntent_r)
diff --git a/SOURCES/glibc-rh1728915-2.patch b/SOURCES/glibc-rh1728915-2.patch
new file mode 100644
index 0000000..679c3c0
--- /dev/null
+++ b/SOURCES/glibc-rh1728915-2.patch
@@ -0,0 +1,164 @@
+commit 9a1e7257a4292d3aea45c8317df3956f4331d8ce
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Sep 2 12:40:38 2019 +0200
+
+    Add misc/tst-mntent-autofs, testing autofs "ignore" filtering
+
+diff -rupN a/misc/Makefile b/misc/Makefile
+--- a/misc/Makefile	2020-01-20 15:48:16.472243494 -0500
++++ b/misc/Makefile	2020-01-20 16:03:01.291550472 -0500
+@@ -76,7 +76,8 @@ install-lib := libbsd-compat.a libg.a
+ gpl2lgpl := error.c error.h
+ 
+ tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
+-	 tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 bug18240
++	 tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 bug18240 \
++	 tst-mntent-autofs
+ ifeq ($(run-built-tests),yes)
+ tests: $(objpfx)tst-error1-mem
+ endif
+diff -rupN a/misc/tst-mntent-autofs.c b/misc/tst-mntent-autofs.c
+--- a/misc/tst-mntent-autofs.c	1969-12-31 19:00:00.000000000 -0500
++++ b/misc/tst-mntent-autofs.c	2020-01-20 16:01:37.233483270 -0500
+@@ -0,0 +1,141 @@
++/* Test autofs "ignore" filtering for getment_r.
++   Copyright (C) 2019 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 <array_length.h>
++#include <errno.h>
++#include <mntent.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/temp_file.h>
++#include <support/xstdio.h>
++#include <support/xunistd.h>
++
++struct test_case
++{
++  const char *line;
++  struct
++  {
++    /* Like struct mntent, but with const pointers.  */
++    const char *mnt_fsname;
++    const char *mnt_dir;
++    const char *mnt_type;
++    const char *mnt_opts;
++    int mnt_freq;
++    int mnt_passno;
++  } expected;
++};
++
++static struct test_case test_cases[] =
++  {
++    { "/etc/auto.direct /mnt/auto/1 autofs defaults 0 0",
++      { "/etc/auto.direct", "/mnt/auto/1", "autofs", "defaults", 0, 0 } },
++
++    /* These entries are filtered out.  */
++    { "/etc/auto.2 /mnt/auto/2 autofs ignore 0 0", { NULL, } },
++    { "/etc/auto.3 /mnt/auto/3 autofs ignore,other 1 2", { NULL, } },
++    { "/etc/auto.4 /mnt/auto/4 autofs other,ignore 3 4", { NULL, } },
++    { "/etc/auto.5 /mnt/auto/5 autofs opt1,ignore,opt2 5 6", { NULL, } },
++
++    /* Dummy entry to make the desynchronization more obvious.  */
++    { "/dev/sda1 / xfs defaults 0 0",
++      { "/dev/sda1", "/", "xfs", "defaults", 0, 0 } },
++
++    /* These are not filtered because the file system is not autofs.  */
++    { "/etc/auto.direct /mnt/auto/6 autofs1 ignore 0 0",
++      { "/etc/auto.direct", "/mnt/auto/6", "autofs1", "ignore", 0, 0 } },
++    { "/etc/auto.direct /mnt/auto/7 autofs1 ignore,other 0 0",
++      { "/etc/auto.direct", "/mnt/auto/7", "autofs1", "ignore,other", 0, 0 } },
++    { "/etc/auto.direct /mnt/auto/8 autofs1 other,ignore 0 0",
++      { "/etc/auto.direct", "/mnt/auto/8", "autofs1", "other,ignore", 0, 0 } },
++    { "/etc/auto.direct /mnt/auto/9 autofs1 opt1,ignore,opt2 0 0",
++      { "/etc/auto.direct", "/mnt/auto/9", "autofs1", "opt1,ignore,opt2", } },
++
++    /* These are not filtered because the string "ignore" is not an
++       option name.  */
++    { "/etc/auto.direct /mnt/auto/10 autofs noignore 1 2",
++      { "/etc/auto.direct", "/mnt/auto/10", "autofs", "noignore", 1, 2 } },
++    { "/etc/auto.direct /mnt/auto/11 autofs noignore,other 0 0",
++      { "/etc/auto.direct", "/mnt/auto/11", "autofs", "noignore,other", } },
++    { "/etc/auto.direct /mnt/auto/12 autofs other,noignore 0 0",
++      { "/etc/auto.direct", "/mnt/auto/12", "autofs", "other,noignore", } },
++    { "/etc/auto.direct /mnt/auto/13 autofs errors=ignore 0 0",
++      { "/etc/auto.direct", "/mnt/auto/13", "autofs", "errors=ignore", } },
++    { "/etc/auto.direct /mnt/auto/14 autofs errors=ignore,other 0 0",
++      { "/etc/auto.direct", "/mnt/auto/14", "autofs",
++        "errors=ignore,other", } },
++    { "/etc/auto.direct /mnt/auto/15 autofs other,errors=ignore 0 0",
++      { "/etc/auto.direct", "/mnt/auto/15", "autofs",
++        "other,errors=ignore", } },
++
++    /* These are not filtered because the string is escaped.  '\151'
++       is 'i', but it is not actually decoded by the parser.  */
++    { "/etc/auto.\\151gnore /mnt/auto/16 autofs \\151gnore 0 0",
++      { "/etc/auto.\\151gnore", "/mnt/auto/16", "autofs",
++        "\\151gnore", } },
++  };
++
++static int
++do_test (void)
++{
++  char *path;
++  xclose (create_temp_file ("tst-mntent-autofs-", &path));
++
++  /* Write the test file.  */
++  FILE *fp = xfopen (path, "w");
++  for (size_t i = 0; i < array_length (test_cases); ++i)
++    fprintf (fp, "%s\n", test_cases[i].line);
++  xfclose (fp);
++
++  /* Open the test file again, this time for parsing.  */
++  fp = setmntent (path, "r");
++  TEST_VERIFY_EXIT (fp != NULL);
++  char buffer[512];
++  struct mntent me;
++
++  for (size_t i = 0; i < array_length (test_cases); ++i)
++    {
++      if (test_cases[i].expected.mnt_type == NULL)
++        continue;
++
++      memset (buffer, 0xcc, sizeof (buffer));
++      memset (&me, 0xcc, sizeof (me));
++      struct mntent *pme = getmntent_r (fp, &me, buffer, sizeof (buffer));
++      TEST_VERIFY_EXIT (pme != NULL);
++      TEST_VERIFY (pme == &me);
++      TEST_COMPARE_STRING (test_cases[i].expected.mnt_fsname, me.mnt_fsname);
++      TEST_COMPARE_STRING (test_cases[i].expected.mnt_dir, me.mnt_dir);
++      TEST_COMPARE_STRING (test_cases[i].expected.mnt_type, me.mnt_type);
++      TEST_COMPARE_STRING (test_cases[i].expected.mnt_opts, me.mnt_opts);
++      TEST_COMPARE (test_cases[i].expected.mnt_freq, me.mnt_freq);
++      TEST_COMPARE (test_cases[i].expected.mnt_passno, me.mnt_passno);
++    }
++
++  TEST_VERIFY (getmntent_r (fp, &me, buffer, sizeof (buffer)) == NULL);
++
++  TEST_COMPARE (feof (fp), 1);
++  TEST_COMPARE (ferror (fp), 0);
++  errno = 0;
++  TEST_COMPARE (endmntent (fp), 1);
++  TEST_COMPARE (errno, 0);
++  free (path);
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1747465-1.patch b/SOURCES/glibc-rh1747465-1.patch
new file mode 100644
index 0000000..d8d5245
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-1.patch
@@ -0,0 +1,43 @@
+commit 477e739b324349df854209117047779ac3142130
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Fri Mar 15 18:18:40 2019 +0000
+
+    Update syscall-names.list for Linux 5.0.
+    
+    This patch updates sysdeps/unix/sysv/linux/syscall-names.list for
+    Linux 5.0.  Based on testing with build-many-glibcs.py, the only new
+    entry needed is for old_getpagesize (a newly added __NR_* name for an
+    old syscall on ia64).  (Because 5.0 changes how syscall tables are
+    handled in the kernel, checking diffs wasn't a useful way of looking
+    for new syscalls in 5.0 as most of the syscall tables were moved to
+    the new representation without actually adding any syscalls to them.)
+    
+    Tested with build-many-glibcs.py.
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
+            version to 5.0.
+            (old_getpagesize): New syscall.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index b650dc07cc..0227e52a5f 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.20.
+-kernel 4.20
++# The list of system calls is current as of Linux 5.0.
++kernel 5.0
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
+@@ -261,6 +261,7 @@ nfsservctl
+ ni_syscall
+ nice
+ old_adjtimex
++old_getpagesize
+ oldfstat
+ oldlstat
+ oldolduname
diff --git a/SOURCES/glibc-rh1747465-2.patch b/SOURCES/glibc-rh1747465-2.patch
new file mode 100644
index 0000000..a336060
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-2.patch
@@ -0,0 +1,181 @@
+commit 7621676f7a5130c030f7fff1cab72dbf2993b837
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Tue May 7 23:57:26 2019 +0000
+
+    Update syscall-names.list for Linux 5.1.
+    
+    This patch updates syscall-names.list for Linux 5.1 (which has many
+    new syscalls, mainly but not entirely ones for 64-bit time).
+    
+    Tested with build-many-glibcs.py (before the revert of the move to
+    Linux 5.1 there; verified there were no tst-syscall-list failures).
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
+            version to 5.1.
+            (clock_adjtime64) New syscall.
+            (clock_getres_time64) Likewise.
+            (clock_gettime64) Likewise.
+            (clock_nanosleep_time64) Likewise.
+            (clock_settime64) Likewise.
+            (futex_time64) Likewise.
+            (io_pgetevents_time64) Likewise.
+            (io_uring_enter) Likewise.
+            (io_uring_register) Likewise.
+            (io_uring_setup) Likewise.
+            (mq_timedreceive_time64) Likewise.
+            (mq_timedsend_time64) Likewise.
+            (pidfd_send_signal) Likewise.
+            (ppoll_time64) Likewise.
+            (pselect6_time64) Likewise.
+            (recvmmsg_time64) Likewise.
+            (rt_sigtimedwait_time64) Likewise.
+            (sched_rr_get_interval_time64) Likewise.
+            (semtimedop_time64) Likewise.
+            (timer_gettime64) Likewise.
+            (timer_settime64) Likewise.
+            (timerfd_gettime64) Likewise.
+            (timerfd_settime64) Likewise.
+            (utimensat_time64) Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 0227e52a5f..2d0354b8b3 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 5.0.
+-kernel 5.0
++# The list of system calls is current as of Linux 5.1.
++kernel 5.1
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
+@@ -63,10 +63,15 @@ chown
+ chown32
+ chroot
+ clock_adjtime
++clock_adjtime64
+ clock_getres
++clock_getres_time64
+ clock_gettime
++clock_gettime64
+ clock_nanosleep
++clock_nanosleep_time64
+ clock_settime
++clock_settime64
+ clone
+ clone2
+ close
+@@ -128,6 +133,7 @@ ftime
+ ftruncate
+ ftruncate64
+ futex
++futex_time64
+ futimesat
+ get_kernel_syms
+ get_mempolicy
+@@ -187,8 +193,12 @@ io_cancel
+ io_destroy
+ io_getevents
+ io_pgetevents
++io_pgetevents_time64
+ io_setup
+ io_submit
++io_uring_enter
++io_uring_register
++io_uring_setup
+ ioctl
+ ioperm
+ iopl
+@@ -242,7 +252,9 @@ mq_getsetattr
+ mq_notify
+ mq_open
+ mq_timedreceive
++mq_timedreceive_time64
+ mq_timedsend
++mq_timedsend_time64
+ mq_unlink
+ mremap
+ msgctl
+@@ -389,6 +401,7 @@ perf_event_open
+ perfctr
+ perfmonctl
+ personality
++pidfd_send_signal
+ pipe
+ pipe2
+ pivot_root
+@@ -397,6 +410,7 @@ pkey_free
+ pkey_mprotect
+ poll
+ ppoll
++ppoll_time64
+ prctl
+ pread64
+ preadv
+@@ -407,6 +421,7 @@ process_vm_writev
+ prof
+ profil
+ pselect6
++pselect6_time64
+ ptrace
+ putpmsg
+ pwrite64
+@@ -424,6 +439,7 @@ reboot
+ recv
+ recvfrom
+ recvmmsg
++recvmmsg_time64
+ recvmsg
+ remap_file_pages
+ removexattr
+@@ -442,6 +458,7 @@ rt_sigqueueinfo
+ rt_sigreturn
+ rt_sigsuspend
+ rt_sigtimedwait
++rt_sigtimedwait_time64
+ rt_tgsigqueueinfo
+ rtas
+ s390_guarded_storage
+@@ -457,6 +474,7 @@ sched_getattr
+ sched_getparam
+ sched_getscheduler
+ sched_rr_get_interval
++sched_rr_get_interval_time64
+ sched_set_affinity
+ sched_setaffinity
+ sched_setattr
+@@ -470,6 +488,7 @@ semctl
+ semget
+ semop
+ semtimedop
++semtimedop_time64
+ send
+ sendfile
+ sendfile64
+@@ -567,11 +586,15 @@ timer_create
+ timer_delete
+ timer_getoverrun
+ timer_gettime
++timer_gettime64
+ timer_settime
++timer_settime64
+ timerfd
+ timerfd_create
+ timerfd_gettime
++timerfd_gettime64
+ timerfd_settime
++timerfd_settime64
+ times
+ tkill
+ truncate
+@@ -591,6 +614,7 @@ userfaultfd
+ ustat
+ utime
+ utimensat
++utimensat_time64
+ utimes
+ utrap_install
+ vfork
diff --git a/SOURCES/glibc-rh1747465-3.patch b/SOURCES/glibc-rh1747465-3.patch
new file mode 100644
index 0000000..5488fe1
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-3.patch
@@ -0,0 +1,58 @@
+commit 0bb8f8c791862a4ff38a584af23bbb5bf3f90acd
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri May 31 13:52:16 2019 +0200
+
+    Linux: Add oddly-named arm syscalls to syscall-names.list
+    
+    <asm/unistd.h> on arm defines the following macros:
+    
+    #define __ARM_NR_breakpoint             (__ARM_NR_BASE+1)
+    #define __ARM_NR_cacheflush             (__ARM_NR_BASE+2)
+    #define __ARM_NR_usr26                  (__ARM_NR_BASE+3)
+    #define __ARM_NR_usr32                  (__ARM_NR_BASE+4)
+    #define __ARM_NR_set_tls                (__ARM_NR_BASE+5)
+    #define __ARM_NR_get_tls                (__ARM_NR_BASE+6)
+    
+    These do not follow the regular __NR_* naming convention and
+    have so far been ignored by the syscall-names.list consistency
+    checks.  This commit adds these names to the file, preparing
+    for the availability of these names in the regular __NR_*
+    namespace.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 2d0354b8b3..ae8adabb70 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -52,6 +52,7 @@ bdflush
+ bind
+ bpf
+ break
++breakpoint
+ brk
+ cachectl
+ cacheflush
+@@ -139,6 +140,7 @@ get_kernel_syms
+ get_mempolicy
+ get_robust_list
+ get_thread_area
++get_tls
+ getcpu
+ getcwd
+ getdents
+@@ -499,6 +501,7 @@ set_mempolicy
+ set_robust_list
+ set_thread_area
+ set_tid_address
++set_tls
+ setdomainname
+ setfsgid
+ setfsgid32
+@@ -611,6 +614,8 @@ unlinkat
+ unshare
+ uselib
+ userfaultfd
++usr26
++usr32
+ ustat
+ utime
+ utimensat
diff --git a/SOURCES/glibc-rh1747465-4.patch b/SOURCES/glibc-rh1747465-4.patch
new file mode 100644
index 0000000..53988c6
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-4.patch
@@ -0,0 +1,30 @@
+commit a63b96fbddbf97feaa068a9efed3b5623a1a1e78
+Author: Vincent Chen <vincentc@andestech.com>
+Date:   Wed Jun 26 17:30:11 2019 +0800
+
+    Linux: Add nds32 specific syscalls to syscall-names.list
+    
+    The nds32 creates two specific syscalls, udftrap and fp_udfiex_crtl, in
+    kernel v5.0 and v5.2, respectively. Add these two syscalls to
+    syscall-names.list.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index ae8adabb70..95aa3ec7a5 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -121,6 +121,7 @@ finit_module
+ flistxattr
+ flock
+ fork
++fp_udfiex_crtl
+ free_hugepages
+ fremovexattr
+ fsetxattr
+@@ -603,6 +604,7 @@ tkill
+ truncate
+ truncate64
+ tuxcall
++udftrap
+ ugetrlimit
+ ulimit
+ umask
diff --git a/SOURCES/glibc-rh1747465-5.patch b/SOURCES/glibc-rh1747465-5.patch
new file mode 100644
index 0000000..5f29118
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-5.patch
@@ -0,0 +1,52 @@
+commit 1f7097d09ce628878107ed30341cfc1eb3649a81
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Jul 19 08:53:04 2019 +0200
+
+    Linux: Update syscall-names.list to Linux 5.2
+    
+    This adds the system call names fsconfig, fsmount, fsopen, fspick,
+    move_mount, open_tree.
+    
+    Tested with build-many-glibcs.py.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 95aa3ec7a5..21bf37c627 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -23,7 +23,7 @@
+ # them.
+ 
+ # The list of system calls is current as of Linux 5.1.
+-kernel 5.1
++kernel 5.2
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
+@@ -124,7 +124,11 @@ fork
+ fp_udfiex_crtl
+ free_hugepages
+ fremovexattr
++fsconfig
+ fsetxattr
++fsmount
++fsopen
++fspick
+ fstat
+ fstat64
+ fstatat64
+@@ -248,6 +252,7 @@ mmap
+ mmap2
+ modify_ldt
+ mount
++move_mount
+ move_pages
+ mprotect
+ mpx
+@@ -285,6 +290,7 @@ oldumount
+ olduname
+ open
+ open_by_handle_at
++open_tree
+ openat
+ osf_adjtime
+ osf_afs_syscall
diff --git a/SOURCES/glibc-rh1747465-6.patch b/SOURCES/glibc-rh1747465-6.patch
new file mode 100644
index 0000000..9322a53
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-6.patch
@@ -0,0 +1,24 @@
+commit 9c37bde5a2067e5b4dc878bac0291d6b207b8add
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Fri Aug 2 15:08:02 2019 +0000
+
+    Update kernel version in comment in syscall-names.list.
+    
+    This patch updates the Linux kernel version in a comment in
+    syscall-names.list to agree with the following "kernel" line.
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update comment.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index 21bf37c627..9dcdd293d3 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -22,7 +22,7 @@
+ # names are only used if the installed kernel headers also provide
+ # them.
+ 
+-# The list of system calls is current as of Linux 5.1.
++# The list of system calls is current as of Linux 5.2.
+ kernel 5.2
+ 
+ FAST_atomic_update
diff --git a/SOURCES/glibc-rh1747465-7.patch b/SOURCES/glibc-rh1747465-7.patch
new file mode 100644
index 0000000..1728729
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-7.patch
@@ -0,0 +1,47 @@
+commit 0f02b6cfc44af73d4d4363c46b3cbb18b8ff9171
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Wed Sep 18 22:57:46 2019 +0000
+
+    Update syscall-names.list for Linux 5.3.
+    
+    This patch updates syscall-names.list for Linux 5.3, adding two new
+    syscalls.
+    
+    Tested with build-many-glibcs.py.
+    
+            * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
+            version to 5.3.
+            (clone3): New syscall.
+            (pidfd_open): Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+index e2382d3414..b55ffbc2a0 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 5.2.
+-kernel 5.2
++# The list of system calls is current as of Linux 5.3.
++kernel 5.3
+ 
+ FAST_atomic_update
+ FAST_cmpxchg
+@@ -75,6 +75,7 @@ clock_settime
+ clock_settime64
+ clone
+ clone2
++clone3
+ close
+ cmpxchg_badaddr
+ connect
+@@ -410,6 +411,7 @@ perf_event_open
+ perfctr
+ perfmonctl
+ personality
++pidfd_open
+ pidfd_send_signal
+ pipe
+ pipe2
diff --git a/SOURCES/glibc-rh1747465-8.patch b/SOURCES/glibc-rh1747465-8.patch
new file mode 100644
index 0000000..4d5acb7
--- /dev/null
+++ b/SOURCES/glibc-rh1747465-8.patch
@@ -0,0 +1,50 @@
+commit a331150af65477fc3fa72ab341eed5e0b2daf7f3
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Thu Nov 28 20:32:09 2019 +0000
+
+    Update syscall-names.list for Linux 5.4.
+
+    This patch updates syscall-names.list for Linux 5.4.  There are no new
+    syscalls, so this is just a matter of updating the version number
+    listed in the file.
+
+    Tested with build-many-glibcs.py.
+
+Reworked for (rhbz#1747465)
+    Also update copyright info to match upstream.
+    Correct some typos in the comments to match upstream.
+
+diff -Nrup a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
+--- a/sysdeps/unix/sysv/linux/syscall-names.list        2020-01-24 12:27:15.212564061 -0500
++++ b/sysdeps/unix/sysv/linux/syscall-names.list        2020-01-24 14:42:30.175256876 -0500
+@@ -1,5 +1,5 @@
+ # List of all known Linux system calls.
+-# Copyright (C) 2017-2018 Free Software Foundation, Inc.
++# Copyright (C) 2017-2020 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
+@@ -14,16 +14,15 @@
+ #
+ # 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/>.
++# <https://www.gnu.org/licenses/>.
+
+-# This file contains the list of system call names names.  It has to
+-# remain in alphabetica order.  Lines which start with # are treated
+-# as comments.  This file can list all potential system calls.  The
+-# names are only used if the installed kernel headers also provide
+-# them.
++# This file contains the list of system call names.  It has to remain in
++# alphabetical order.  Lines which start with # are treated as comments.
++# This file can list all potential system calls.  The names are only
++# used if the installed kernel headers also provide them.
+
+-# The list of system calls is current as of Linux 5.3.
+-kernel 5.3
++# The list of system calls is current as of Linux 5.4.
++kernel 5.4
+
+ FAST_atomic_update
+ FAST_cmpxchg
diff --git a/SOURCES/glibc-rh1763325.patch b/SOURCES/glibc-rh1763325.patch
new file mode 100644
index 0000000..1a60824
--- /dev/null
+++ b/SOURCES/glibc-rh1763325.patch
@@ -0,0 +1,123 @@
+commit 2c820533c61fed175390bc6058afbbe42d2edc37
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Aug 18 11:15:42 2016 +0200
+
+    argp: Do not override GCC keywords with macros [BZ #16907]
+    
+    glibc provides fallback definitions already.  It is not necessary to
+    suppress warnings for unknown attributes because GCC does this
+    automatically for system headers.
+    
+    This commit does not sync with gnulib because gnulib has started to use
+    _GL_* macros in the header file, which are arguably in the gnulib
+    implementation space and not suitable for an installed glibc header
+    file.
+
+diff --git a/argp/argp-fmtstream.h b/argp/argp-fmtstream.h
+index 61c45bf86b6bf8d5..b8e4e2406ff2784e 100644
+--- a/argp/argp-fmtstream.h
++++ b/argp/argp-fmtstream.h
+@@ -29,21 +29,6 @@
+ #include <string.h>
+ #include <unistd.h>
+ 
+-#ifndef __attribute__
+-/* This feature is available in gcc versions 2.5 and later.  */
+-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || \
+-  defined __STRICT_ANSI__
+-#  define __attribute__(Spec) /* empty */
+-# endif
+-/* The __-protected variants of `format' and `printf' attributes
+-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || \
+-  defined __STRICT_ANSI__
+-#  define __format__ format
+-#  define __printf__ printf
+-# endif
+-#endif
+-
+ #if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H)
+ /* line_wrap_stream is available, so use that.  */
+ #define ARGP_FMTSTREAM_USE_LINEWRAP
+@@ -111,6 +96,8 @@ struct argp_fmtstream
+ 
+ typedef struct argp_fmtstream *argp_fmtstream_t;
+ 
++__BEGIN_DECLS
++
+ /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
+    written on it with LMARGIN spaces and limits them to RMARGIN columns
+    total.  If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
+@@ -297,6 +284,8 @@ __argp_fmtstream_point (argp_fmtstream_t __fs)
+ 
+ #endif /* __OPTIMIZE__ */
+ 
++__END_DECLS
++
+ #endif /* ARGP_FMTSTREAM_USE_LINEWRAP */
+ 
+ #endif /* argp-fmtstream.h */
+diff --git a/argp/argp.h b/argp/argp.h
+index 37544fe44a102574..61b792909530aaac 100644
+--- a/argp/argp.h
++++ b/argp/argp.h
+@@ -29,48 +29,12 @@
+ #define __need_error_t
+ #include <errno.h>
+ 
+-#ifndef __THROW
+-# define __THROW
+-#endif
+-#ifndef __NTH
+-# define __NTH(fct) fct __THROW
+-#endif
+-
+-#ifndef __attribute__
+-/* This feature is available in gcc versions 2.5 and later.  */
+-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || \
+-  defined __STRICT_ANSI__
+-#  define __attribute__(Spec) /* empty */
+-# endif
+-/* The __-protected variants of `format' and `printf' attributes
+-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || \
+-  defined __STRICT_ANSI__
+-#  define __format__ format
+-#  define __printf__ printf
+-# endif
+-#endif
+-
+-/* GCC 2.95 and later have "__restrict"; C99 compilers have
+-   "restrict", and "configure" may have defined "restrict".  */
+-#ifndef __restrict
+-# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+-#  if defined restrict || 199901L <= __STDC_VERSION__
+-#   define __restrict restrict
+-#  else
+-#   define __restrict
+-#  endif
+-# endif
+-#endif
+-
+ #ifndef __error_t_defined
+ typedef int error_t;
+ # define __error_t_defined
+ #endif
+ 
+-#ifdef  __cplusplus
+-extern "C" {
+-#endif
++__BEGIN_DECLS
+ 
+ /* A description of a particular option.  A pointer to an array of
+    these is passed in the OPTIONS field of an argp structure.  Each option
+@@ -591,8 +555,6 @@ __NTH (__option_is_end (const struct argp_option *__opt))
+ # endif
+ #endif /* Use extern inlines.  */
+ 
+-#ifdef  __cplusplus
+-}
+-#endif
++__END_DECLS
+ 
+ #endif /* argp.h */
diff --git a/SOURCES/glibc-rh1772307.patch b/SOURCES/glibc-rh1772307.patch
new file mode 100644
index 0000000..1ccc6dd
--- /dev/null
+++ b/SOURCES/glibc-rh1772307.patch
@@ -0,0 +1,41 @@
+From 27d3ce1467990f89126e228559dec8f84b96c60e Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Fri, 1 Apr 2016 15:08:48 -0700
+Subject: [PATCH] Remove Fast_Copy_Backward from Intel Core processors
+
+Intel Core i3, i5 and i7 processors have fast unaligned copy and
+copy backward is ignored.  Remove Fast_Copy_Backward from Intel Core
+processors to avoid confusion.
+
+	* sysdeps/x86/cpu-features.c (init_cpu_features): Don't set
+	bit_arch_Fast_Copy_Backward for Intel Core proessors.
+---
+ ChangeLog                  | 5 +++++
+ sysdeps/x86/cpu-features.c | 6 +-----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+diff -rup a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
+--- a/sysdeps/x86/cpu-features.c	2020-01-21 16:44:28.637555853 -0500
++++ b/sysdeps/x86/cpu-features.c	2020-01-21 16:46:51.208756416 -0500
+@@ -116,11 +116,8 @@ init_cpu_features (struct cpu_features *
+ 	    case 0x2c:
+ 	    case 0x2e:
+ 	    case 0x2f:
+-	      /* Rep string instructions, copy backward, unaligned loads
++	      /* Rep string instructions, unaligned load, unaligned copy,
+ 		 and pminub are fast on Intel Core i3, i5 and i7.  */
+-#if index_Fast_Rep_String != index_Fast_Copy_Backward
+-# error index_Fast_Rep_String != index_Fast_Copy_Backward
+-#endif
+ #if index_Fast_Rep_String != index_Fast_Unaligned_Load
+ # error index_Fast_Rep_String != index_Fast_Unaligned_Load
+ #endif
+@@ -129,7 +126,6 @@ init_cpu_features (struct cpu_features *
+ #endif
+ 	      cpu_features->feature[index_Fast_Rep_String]
+ 		|= (bit_Fast_Rep_String
+-		    | bit_Fast_Copy_Backward
+ 		    | bit_Fast_Unaligned_Load
+ 		    | bit_Prefer_PMINUB_for_stringop);
+ 	      break;
+
diff --git a/SOURCES/glibc-rh1775599.patch b/SOURCES/glibc-rh1775599.patch
new file mode 100644
index 0000000..31992d5
--- /dev/null
+++ b/SOURCES/glibc-rh1775599.patch
@@ -0,0 +1,24 @@
+commit d5dfad4326fc683c813df1e37bbf5cf920591c8e
+Author: Marcin Koƛcielnicki <mwk@0x04.net>
+Date:   Thu Nov 21 00:20:15 2019 +0100
+
+    rtld: Check __libc_enable_secure before honoring LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126) [BZ #25204]
+    
+    The problem was introduced in glibc 2.23, in commit
+    b9eb92ab05204df772eb4929eccd018637c9f3e9
+    ("Add Prefer_MAP_32BIT_EXEC to map executable pages with MAP_32BIT").
+
+diff --git a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
+index 1531437359c0ec06..82495780a06d8a05 100644
+--- a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
++++ b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
+@@ -31,7 +31,8 @@
+    environment variable, LD_PREFER_MAP_32BIT_EXEC.  */
+ #define EXTRA_LD_ENVVARS \
+   case 21:							      \
+-    if (memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0)	      \
++    if (!__libc_enable_secure					      \
++	&& memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0)	      \
+       GLRO(dl_x86_cpu_features).feature[index_Prefer_MAP_32BIT_EXEC]  \
+ 	|= bit_Prefer_MAP_32BIT_EXEC;				      \
+     break;
diff --git a/SOURCES/glibc-rh1775816.patch b/SOURCES/glibc-rh1775816.patch
new file mode 100644
index 0000000..960b67b
--- /dev/null
+++ b/SOURCES/glibc-rh1775816.patch
@@ -0,0 +1,32 @@
+commit cb61630ed712d033f54295f776967532d3f4b46a
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Nov 22 22:10:42 2019 +0100
+
+    libio: Disable vtable validation for pre-2.1 interposed handles [BZ #25203]
+    
+    Commit c402355dfa7807b8e0adb27c009135a7e2b9f1b0 ("libio: Disable
+    vtable validation in case of interposition [BZ #23313]") only covered
+    the interposable glibc 2.1 handles, in libio/stdfiles.c.  The
+    parallel code in libio/oldstdfiles.c needs similar detection logic.
+    
+    Fixes (again) commit db3476aff19b75c4fdefbe65fcd5f0a90588ba51
+    ("libio: Implement vtable verification [BZ #20191]").
+    
+    Change-Id: Ief6f9f17e91d1f7263421c56a7dc018f4f595c21
+
+diff --git a/libio/oldstdfiles.c b/libio/oldstdfiles.c
+index 870cb0536c52024f..54d3e354fcbf257e 100644
+--- a/libio/oldstdfiles.c
++++ b/libio/oldstdfiles.c
+@@ -87,6 +87,11 @@ _IO_check_libio (void)
+ 	stdout->_vtable_offset = stderr->_vtable_offset =
+ 	((int) sizeof (struct _IO_FILE)
+ 	 - (int) sizeof (struct _IO_FILE_complete));
++
++      if (_IO_stdin_.vtable != &_IO_old_file_jumps
++	  || _IO_stdout_.vtable != &_IO_old_file_jumps
++	  || _IO_stderr_.vtable != &_IO_old_file_jumps)
++	IO_set_accept_foreign_vtables (&_IO_vtable_check);
+     }
+ }
+ 
diff --git a/SOURCES/glibc-rh1834816.patch b/SOURCES/glibc-rh1834816.patch
new file mode 100644
index 0000000..d69162c
--- /dev/null
+++ b/SOURCES/glibc-rh1834816.patch
@@ -0,0 +1,201 @@
+commit 790b8dda4455865cb8c3a47801f4304c1a43baf6
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue May 19 14:09:38 2020 +0200
+
+    nss_compat: internal_end*ent may clobber errno, hiding ERANGE [BZ #25976]
+    
+    During cleanup, before returning from get*_r functions, the end*ent
+    calls must not change errno.  Otherwise, an ERANGE error from the
+    underlying implementation can be hidden, causing unexpected lookup
+    failures.  This commit introduces an internal_end*ent_noerror
+    function which saves and restore errno, and marks the original
+    internal_end*ent function as warn_unused_result, so that it is used
+    only in contexts were errors from it can be handled explicitly.
+    
+    Reviewed-by: DJ Delorie <dj@redhat.com>
+
+Conflicts:
+	nss/nss_compat/compat-grp.c
+	nss/nss_compat/compat-initgroups.c
+	nss/nss_compat/compat-pwd.c
+	nss/nss_compat/compat-spwd.c
+	  (Missing backport of nss_compat move.)
+
+diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c
+index 6f6ce12ff6d9af8b..48e6dea6cdcf65d1 100644
+--- a/nis/nss_compat/compat-grp.c
++++ b/nis/nss_compat/compat-grp.c
+@@ -191,7 +191,7 @@ _nss_compat_setgrent (int stayopen)
+ }
+ 
+ 
+-static enum nss_status
++static enum nss_status __attribute_warn_unused_result__
+ internal_endgrent (ent_t *ent)
+ {
+   if (nss_endgrent)
+@@ -215,6 +215,15 @@ internal_endgrent (ent_t *ent)
+   return NSS_STATUS_SUCCESS;
+ }
+ 
++/* Like internal_endgrent, but preserve errno in all cases.  */
++static void
++internal_endgrent_noerror (ent_t *ent)
++{
++  int saved_errno = errno;
++  enum nss_status unused __attribute__ ((unused)) = internal_endgrent (ent);
++  __set_errno (saved_errno);
++}
++
+ enum nss_status
+ _nss_compat_endgrent (void)
+ {
+@@ -532,7 +541,7 @@ _nss_compat_getgrnam_r (const char *name, struct group *grp,
+   if (result == NSS_STATUS_SUCCESS)
+     result = internal_getgrnam_r (name, grp, &ent, buffer, buflen, errnop);
+ 
+-  internal_endgrent (&ent);
++  internal_endgrent_noerror (&ent);
+ 
+   return result;
+ }
+@@ -661,7 +670,7 @@ _nss_compat_getgrgid_r (gid_t gid, struct group *grp,
+   if (result == NSS_STATUS_SUCCESS)
+     result = internal_getgrgid_r (gid, grp, &ent, buffer, buflen, errnop);
+ 
+-  internal_endgrent (&ent);
++  internal_endgrent_noerror (&ent);
+ 
+   return result;
+ }
+diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c
+index 4aa23fda189f7e87..7b3cd1f74155cf72 100644
+--- a/nis/nss_compat/compat-initgroups.c
++++ b/nis/nss_compat/compat-initgroups.c
+@@ -182,7 +182,7 @@ internal_setgrent (ent_t *ent)
+ }
+ 
+ 
+-static enum nss_status
++static enum nss_status __attribute_warn_unused_result__
+ internal_endgrent (ent_t *ent)
+ {
+   if (ent->stream != NULL)
+@@ -206,6 +206,15 @@ internal_endgrent (ent_t *ent)
+   return NSS_STATUS_SUCCESS;
+ }
+ 
++/* Like internal_endgrent, but preserve errno in all cases.  */
++static void
++internal_endgrent_noerror (ent_t *ent)
++{
++  int saved_errno = errno;
++  enum nss_status unused __attribute__ ((unused)) = internal_endgrent (ent);
++  __set_errno (saved_errno);
++}
++
+ /* Add new group record.  */
+ static void
+ add_group (long int *start, long int *size, gid_t **groupsp, long int limit,
+@@ -569,7 +578,7 @@ _nss_compat_initgroups_dyn (const char *user, gid_t group, long int *start,
+   if (use_malloc)
+     free (tmpbuf);
+ 
+-  internal_endgrent (&intern);
++  internal_endgrent_noerror (&intern);
+ 
+   return status;
+ }
+diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c
+index 85b79e084e25f06a..e0cb9cfa2d490d8f 100644
+--- a/nis/nss_compat/compat-pwd.c
++++ b/nis/nss_compat/compat-pwd.c
+@@ -309,7 +309,7 @@ _nss_compat_setpwent (int stayopen)
+ }
+ 
+ 
+-static enum nss_status
++static enum nss_status __attribute_warn_unused_result__
+ internal_endpwent (ent_t *ent)
+ {
+   if (nss_endpwent)
+@@ -340,6 +340,15 @@ internal_endpwent (ent_t *ent)
+   return NSS_STATUS_SUCCESS;
+ }
+ 
++/* Like internal_endpwent, but preserve errno in all cases.  */
++static void
++internal_endpwent_noerror (ent_t *ent)
++{
++  int saved_errno = errno;
++  enum nss_status unused __attribute__ ((unused)) = internal_endpwent (ent);
++  __set_errno (saved_errno);
++}
++
+ enum nss_status
+ _nss_compat_endpwent (void)
+ {
+@@ -872,7 +881,7 @@ _nss_compat_getpwnam_r (const char *name, struct passwd *pwd,
+   if (result == NSS_STATUS_SUCCESS)
+     result = internal_getpwnam_r (name, pwd, &ent, buffer, buflen, errnop);
+ 
+-  internal_endpwent (&ent);
++  internal_endpwent_noerror (&ent);
+ 
+   return result;
+ }
+@@ -1111,7 +1120,7 @@ _nss_compat_getpwuid_r (uid_t uid, struct passwd *pwd,
+   if (result == NSS_STATUS_SUCCESS)
+     result = internal_getpwuid_r (uid, pwd, &ent, buffer, buflen, errnop);
+ 
+-  internal_endpwent (&ent);
++  internal_endpwent_noerror (&ent);
+ 
+   return result;
+ }
+diff --git a/nis/nss_compat/compat-spwd.c b/nis/nss_compat/compat-spwd.c
+index c1498c3e1f908f83..8ec5d88d30b4df57 100644
+--- a/nis/nss_compat/compat-spwd.c
++++ b/nis/nss_compat/compat-spwd.c
+@@ -265,7 +265,7 @@ _nss_compat_setspent (int stayopen)
+ }
+ 
+ 
+-static enum nss_status
++static enum nss_status __attribute_warn_unused_result__
+ internal_endspent (ent_t *ent)
+ {
+   if (nss_endspent)
+@@ -297,6 +297,15 @@ internal_endspent (ent_t *ent)
+   return NSS_STATUS_SUCCESS;
+ }
+ 
++/* Like internal_endspent, but preserve errno in all cases.  */
++static void
++internal_endspent_noerror (ent_t *ent)
++{
++  int saved_errno = errno;
++  enum nss_status unused __attribute__ ((unused)) = internal_endspent (ent);
++  __set_errno (saved_errno);
++}
++
+ enum nss_status
+ _nss_compat_endspent (void)
+ {
+@@ -311,7 +320,6 @@ _nss_compat_endspent (void)
+   return result;
+ }
+ 
+-
+ static enum nss_status
+ getspent_next_nss_netgr (const char *name, struct spwd *result, ent_t *ent,
+ 			 char *group, char *buffer, size_t buflen,
+@@ -836,7 +844,7 @@ _nss_compat_getspnam_r (const char *name, struct spwd *pwd,
+   if (result == NSS_STATUS_SUCCESS)
+     result = internal_getspnam_r (name, pwd, &ent, buffer, buflen, errnop);
+ 
+-  internal_endspent (&ent);
++  internal_endspent_noerror (&ent);
+ 
+   return result;
+ }
diff --git a/SPECS/glibc.spec b/SPECS/glibc.spec
index 88e7bee..b82f2de 100644
--- a/SPECS/glibc.spec
+++ b/SPECS/glibc.spec
@@ -1,6 +1,6 @@
 %define glibcsrcdir glibc-2.17-c758a686
 %define glibcversion 2.17
-%define glibcrelease 307%{?dist}.1
+%define glibcrelease 317%{?dist}
 ##############################################################################
 # We support the following options:
 # --with/--without,
@@ -249,10 +249,6 @@ Patch0068: glibc-rh1349982.patch
 # These changes were brought forward from RHEL 6 for compatibility
 Patch0069: glibc-rh1448107.patch
 
-# Armhfp build issue
-Patch9998: glibc-armhfp-ELF_MACHINE_NO_REL-undefined.patch
-Patch9999: glibc-rh1256317-armhfp-build-issue.patch
-
 Patch1000: glibc-rh905877.patch
 Patch1001: glibc-rh958652.patch
 Patch1002: glibc-rh977870.patch
@@ -1621,7 +1617,23 @@ Patch2833: glibc-rh1065574-7.patch
 Patch2834: glibc-rh1484832.patch
 Patch2835: glibc-rh1740039-1.patch
 Patch2836: glibc-rh1740039-2.patch
-Patch2837: glibc-rh1406732-6.patch
+Patch2837: glibc-rh1775599.patch
+Patch2838: glibc-rh1235112.patch
+Patch2839: glibc-rh1728915-1.patch
+Patch2840: glibc-rh1728915-2.patch
+Patch2841: glibc-rh1772307.patch
+Patch2842: glibc-rh1747465-1.patch
+Patch2843: glibc-rh1747465-2.patch
+Patch2844: glibc-rh1747465-3.patch
+Patch2845: glibc-rh1747465-4.patch
+Patch2846: glibc-rh1747465-5.patch
+Patch2847: glibc-rh1747465-6.patch
+Patch2848: glibc-rh1747465-7.patch
+Patch2849: glibc-rh1747465-8.patch
+Patch2850: glibc-rh1775816.patch
+Patch2851: glibc-rh1763325.patch
+Patch2852: glibc-rh1406732-6.patch
+Patch2853: glibc-rh1834816.patch
 
 ##############################################################################
 # End of glibc patches.
@@ -1830,12 +1842,6 @@ which is highly discouraged.
 Summary: Header files for development using standard C libraries.
 Group: Development/Libraries
 Provides: %{name}-headers(%{_target_cpu})
-%ifarch x86_64
-# If both -m32 and -m64 is to be supported on AMD64, x86_64 glibc-headers
-# have to be installed, not i586 ones.
-Obsoletes: %{name}-headers(i586)
-Obsoletes: %{name}-headers(i686)
-%endif
 Requires(pre): kernel-headers
 Requires: kernel-headers >= 2.2.1, %{name} = %{version}-%{release}
 BuildRequires: kernel-headers >= 2.6.22
@@ -1913,10 +1919,6 @@ Group: Development/Debug
 AutoReqProv: no
 %ifarch %{debuginfocommonarches}
 Requires: glibc-debuginfo-common = %{version}-%{release}
-%else
-%ifarch %{ix86} %{sparc}
-Obsoletes: glibc-debuginfo-common
-%endif
 %endif
 
 %description debuginfo
@@ -2980,11 +2982,22 @@ package or when debugging this package.
 %patch2835 -p1
 %patch2836 -p1
 %patch2837 -p1
-
-%ifarch %{arm}
-%patch9998 -p1
-%patch9999 -p1
-%endif
+%patch2838 -p1
+%patch2839 -p1
+%patch2840 -p1
+%patch2841 -p1
+%patch2842 -p1
+%patch2843 -p1
+%patch2844 -p1
+%patch2845 -p1
+%patch2846 -p1
+%patch2847 -p1
+%patch2848 -p1
+%patch2849 -p1
+%patch2850 -p1
+%patch2851 -p1
+%patch2852 -p1
+%patch2853 -p1
 
 ##############################################################################
 # %%prep - Additional prep required...
@@ -4172,9 +4185,37 @@ rm -f *.filelist*
 %endif
 
 %changelog
-* Tue Jan 21 2020 Carlos O'Donell <carlos@redhat.com> - 2.17-307.1
+* Tue May 12 2020 Florian Weimer <fweimer@redhat.com> - 2.17-317
+- Do not clobber errno in nss_compat (#1834816)
+
+* Thu Jan 30 2020 Carlos O'Donell <carlos@redhat.com> - 2.17-316
 - Adjust security hardening changes for 64-bit POWER BE due to
-  toolchain limitations (#1790475)
+  toolchain limitations (#1793853)
+
+* Wed Jan 29 2020 Florian Weimer <fweimer@redhat.com> - 2.17-315
+- argp: Do not override GCC keywords with macros (#1763325)
+
+* Wed Jan 29 2020 Florian Weimer <fweimer@redhat.com> - 2.17-314
+- Disable libio vtable validation for interposed pre-2.1 stdio handles (#1775816)
+
+* Tue Jan 28 2020 Florian Weimer <fweimer@redhat.com> - 2.17-313
+- Remove problematic Obsoletes: (#1795573)
+
+* Fri Jan 24 2020 Patsy Griffin <patsy@redhat.com> - 2.17-312
+- Update syscall-names.list to current version 5.4. (#1747465)
+
+* Tue Jan 21 2020 DJ Delorie <dj@redhat.com> - 2.17-311
+- Improve bcopy performance on Intel Haswell (#1772307)
+
+* Tue Jan 21 2020 DJ Delorie <dj@redhat.com> - 2.17-310
+- Filter "ignore" autofs mount entries in getmntent (#1728915)
+
+* Tue Jan 21 2020 Arjun Shankar <arjun@redhat.com> - 2.17-309
+- Fix race condition in tst-waitid (#1235112)
+
+* Tue Jan 21 2020 Arjun Shankar <arjun@redhat.com> - 2.17-308
+- CVE-2019-19126: rtld: Check __libc_enable_secure before honoring
+  LD_PREFER_MAP_32BIT_EXEC (#1775599)
 
 * Tue Oct 22 2019 Florian Weimer <fweimer@redhat.com> - 2.17-307
 - Fix assert after attempting to dlopen main programs (#1740039)