diff --git a/SOURCES/SUPPORTED b/SOURCES/SUPPORTED
index a4bf79c..fdf15fd 100644
--- a/SOURCES/SUPPORTED
+++ b/SOURCES/SUPPORTED
@@ -159,7 +159,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_US@ampm.UTF-8/UTF-8 \
+en_US@ampm/UTF-8 \
+en_US.UTF-8@ampm/UTF-8 \
 en_ZA.UTF-8/UTF-8 \
 en_ZA/ISO-8859-1 \
 en_ZM/UTF-8 \
diff --git a/SOURCES/glibc-rh2104907.patch b/SOURCES/glibc-rh2104907.patch
new file mode 100644
index 0000000..3a65f18
--- /dev/null
+++ b/SOURCES/glibc-rh2104907.patch
@@ -0,0 +1,14 @@
+diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED
+index a4bf79c6a6e6401b..fdf15fddf5178319 100644
+--- a/localedata/SUPPORTED
++++ b/localedata/SUPPORTED
+@@ -159,7 +159,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_US@ampm.UTF-8/UTF-8 \
++en_US@ampm/UTF-8 \
++en_US.UTF-8@ampm/UTF-8 \
+ en_ZA.UTF-8/UTF-8 \
+ en_ZA/ISO-8859-1 \
+ en_ZM/UTF-8 \
diff --git a/SOURCES/glibc-rh2119304-1.patch b/SOURCES/glibc-rh2119304-1.patch
new file mode 100644
index 0000000..a76e1bf
--- /dev/null
+++ b/SOURCES/glibc-rh2119304-1.patch
@@ -0,0 +1,49 @@
+Downstream-only patch to move the recently added members (from
+glibc-rh2047981-5.patch and glibc-rh2047981-6.patch) to the end
+of _rtld_global_ro.  This avoids changing the offset of
+GLRO (dl_naudit).
+
+Without this change, the audit invocation loop in the old
+__libc_start_main function in a not-yet-updated version of libc.so.6
+reads a non-zero garbage value for GLRO (dl_naudit), assumes that
+auditing is active, and reads further garbage pointers, leading to
+to a crash.  Preserving the old offset of GLRO (dl_naudit) avoids
+that.  This works because RPM updates /lib64/ld-* before
+/lib64/libc.so.6 because it sorts earlier (except on POWER9 due
+to the glibc-hwcaps/power9 multilib).
+
+diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
+index 9dec9e3d3b6d6aa2..5e56550a4d556fa7 100644
+--- a/sysdeps/generic/ldsodefs.h
++++ b/sysdeps/generic/ldsodefs.h
+@@ -648,6 +648,15 @@ struct rtld_global_ro
+   void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
+ 		     Lmid_t nsid, int argc, char *argv[], char *env[]);
+   void (*_dl_close) (void *map);
++  void *(*_dl_tls_get_addr_soft) (struct link_map *);
++#ifdef HAVE_DL_DISCOVER_OSVERSION
++  int (*_dl_discover_osversion) (void);
++#endif
++
++  /* List of auditing interfaces.  */
++  struct audit_ifaces *_dl_audit;
++  unsigned int _dl_naudit;
++
+   /* libdl in a secondary namespace (after dlopen) must use
+      _dl_catch_error from the main namespace, so it has to be
+      exported in some way.  */
+@@ -657,14 +666,6 @@ struct rtld_global_ro
+   /* libdl in a secondary namespace must use free from the base
+      namespace.  */
+   void (*_dl_error_free) (void *);
+-  void *(*_dl_tls_get_addr_soft) (struct link_map *);
+-#ifdef HAVE_DL_DISCOVER_OSVERSION
+-  int (*_dl_discover_osversion) (void);
+-#endif
+-
+-  /* List of auditing interfaces.  */
+-  struct audit_ifaces *_dl_audit;
+-  unsigned int _dl_naudit;
+ };
+ # define __rtld_global_attribute__
+ # if IS_IN (rtld)
diff --git a/SOURCES/glibc-rh2119304-2.patch b/SOURCES/glibc-rh2119304-2.patch
new file mode 100644
index 0000000..a1e121b
--- /dev/null
+++ b/SOURCES/glibc-rh2119304-2.patch
@@ -0,0 +1,202 @@
+commit 5ecc98241229d494aaad23a4a3fe106fe11e1f40
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Aug 25 16:34:20 2022 +0200
+
+    s390: Move hwcaps/platform names out of _rtld_global_ro
+    
+    Changes to these arrays are often backported to stable releases,
+    but additions to these arrays shift the offsets of the following
+    _rltd_global_ro members, thus breaking the GLIBC_PRIVATE ABI.
+    
+    Obviously, this change is itself an internal ABI break, but at least
+    it will avoid further ABI breaks going forward.
+    
+    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+
+Conflicts:
+	sysdeps/s390/Makefile
+	  (missing lazy binding test downstream)
+
+diff --git a/sysdeps/s390/Makefile b/sysdeps/s390/Makefile
+index 5c8e1170b4d799ba..ea453ba87646c95a 100644
+--- a/sysdeps/s390/Makefile
++++ b/sysdeps/s390/Makefile
+@@ -42,6 +42,10 @@ $(modpfx)gconv-modules-s390.conf: ../sysdeps/s390/gconv-modules-s390.conf \
+ 	cp $< $@
+ endif
+ 
++ifeq ($(subdir),elf)
++sysdep-dl-routines += dl-procinfo-s390
++endif
++
+ ifeq ($(subdir),string)
+ sysdep_routines += bzero memset memset-z900 \
+ 		   memcmp memcmp-z900 \
+diff --git a/sysdeps/s390/dl-procinfo-s390.c b/sysdeps/s390/dl-procinfo-s390.c
+new file mode 100644
+index 0000000000000000..559f3827936cd017
+--- /dev/null
++++ b/sysdeps/s390/dl-procinfo-s390.c
+@@ -0,0 +1,32 @@
++/* Data for s390 version of processor capability information.
++   Copyright (C) 2006-2022 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
++   <https://www.gnu.org/licenses/>.  */
++
++#include <dl-procinfo.h>
++
++const char _dl_s390_cap_flags[_DL_HWCAP_COUNT][9] =
++  {
++    "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", "edat", "etf3eh",
++    "highgprs", "te", "vx", "vxd", "vxe", "gs", "vxe2", "vxp", "sort", "dflt",
++    "vxp2", "nnpa", "pcimio", "sie"
++  };
++
++const char _dl_s390_platforms[_DL_PLATFORMS_COUNT][7] =
++  {
++    "g5", "z900", "z990", "z9-109", "z10", "z196", "zEC12", "z13", "z14", "z15",
++    "z16"
++  };
+diff --git a/sysdeps/s390/dl-procinfo.c b/sysdeps/s390/dl-procinfo.c
+index 85108943d0e79f29..f928b485609a3b8a 100644
+--- a/sysdeps/s390/dl-procinfo.c
++++ b/sysdeps/s390/dl-procinfo.c
+@@ -17,66 +17,10 @@
+    License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+-/* This information must be kept in sync with the _DL_HWCAP_COUNT and
+-   _DL_PLATFORM_COUNT definitions in procinfo.h.
+-
+-   If anything should be added here check whether the size of each string
+-   is still ok with the given array size.
+-
+-   All the #ifdefs in the definitions are quite irritating but
+-   necessary if we want to avoid duplicating the information.  There
+-   are three different modes:
+-
+-   - PROCINFO_DECL is defined.  This means we are only interested in
+-     declarations.
+-
+-   - PROCINFO_DECL is not defined:
+-
+-     + if SHARED is defined the file is included in an array
+-       initializer.  The .element = { ... } syntax is needed.
+-
+-     + if SHARED is not defined a normal array initialization is
+-       needed.
+-  */
+-
+-#ifndef PROCINFO_CLASS
+-# define PROCINFO_CLASS
+-#endif
+-
+-#if !defined PROCINFO_DECL && defined SHARED
+-  ._dl_s390_cap_flags
+-#else
+-PROCINFO_CLASS const char _dl_s390_cap_flags[23][9]
+-#endif
+-#ifndef PROCINFO_DECL
+-= {
+-     "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", "edat", "etf3eh",
+-     "highgprs", "te", "vx", "vxd", "vxe", "gs", "vxe2", "vxp", "sort", "dflt",
+-     "vxp2", "nnpa", "pcimio", "sie"
+-  }
+-#endif
+-#if !defined SHARED || defined PROCINFO_DECL
+-;
+-#else
+-,
+-#endif
+-
+-#if !defined PROCINFO_DECL && defined SHARED
+-  ._dl_s390_platforms
+-#else
+-PROCINFO_CLASS const char _dl_s390_platforms[11][7]
+-#endif
+-#ifndef PROCINFO_DECL
+-= {
+-    "g5", "z900", "z990", "z9-109", "z10", "z196", "zEC12", "z13", "z14", "z15",
+-    "z16"
+-  }
+-#endif
+-#if !defined SHARED || defined PROCINFO_DECL
+-;
+-#else
+-,
+-#endif
++/* The hwcap and platform strings are now in
++   sysdeps/s390/dl-procinfo-s390.c.  */
+ 
++/* Needed by sysdeps/unix/sysv/linux/dl-vdso-setup.c (as included from
++   sysdeps/generic/ldsodefs.h).  */
+ #undef PROCINFO_DECL
+ #undef PROCINFO_CLASS
+diff --git a/sysdeps/s390/dl-procinfo.h b/sysdeps/s390/dl-procinfo.h
+index f2b2c9ac1bb7239b..5eb2c0a39fcff520 100644
+--- a/sysdeps/s390/dl-procinfo.h
++++ b/sysdeps/s390/dl-procinfo.h
+@@ -22,8 +22,10 @@
+ #include <ldsodefs.h>
+ 
+ #define _DL_HWCAP_COUNT 23
++extern const char _dl_s390_cap_flags[_DL_HWCAP_COUNT][9] attribute_hidden;
+ 
+ #define _DL_PLATFORMS_COUNT	11
++extern const char _dl_s390_platforms[_DL_PLATFORMS_COUNT][7] attribute_hidden;
+ 
+ /* The kernel provides up to 32 capability bits with elf_hwcap.  */
+ #define _DL_FIRST_PLATFORM	32
+@@ -79,7 +81,7 @@ static inline const char *
+ __attribute__ ((unused))
+ _dl_hwcap_string (int idx)
+ {
+-  return GLRO(dl_s390_cap_flags)[idx];
++  return _dl_s390_cap_flags[idx];
+ };
+ 
+ static inline int
+@@ -90,7 +92,7 @@ _dl_string_hwcap (const char *str)
+ 
+   for (i = 0; i < _DL_HWCAP_COUNT; i++)
+     {
+-      if (strcmp (str, GLRO(dl_s390_cap_flags)[i]) == 0)
++      if (strcmp (str, _dl_s390_cap_flags[i]) == 0)
+ 	return i;
+     }
+   return -1;
+@@ -105,7 +107,7 @@ _dl_string_platform (const char *str)
+   if (str != NULL)
+     for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
+       {
+-	if (strcmp (str, GLRO(dl_s390_platforms)[i]) == 0)
++	if (strcmp (str, _dl_s390_platforms[i]) == 0)
+ 	  return _DL_FIRST_PLATFORM + i;
+       }
+   return -1;
+diff --git a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
+index d1516a05e3042163..4aefd7eef14eaf52 100644
+--- a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
++++ b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
+@@ -40,7 +40,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
+ 
+   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
+     if (word & (1UL << i))
+-      _dl_printf (" %s", GLRO(dl_s390_cap_flags)[i]);
++      _dl_printf (" %s", _dl_s390_cap_flags[i]);
+ 
+   _dl_printf ("\n");
+ 
diff --git a/SOURCES/glibc-rh2119304-3.patch b/SOURCES/glibc-rh2119304-3.patch
new file mode 100644
index 0000000..faaea99
--- /dev/null
+++ b/SOURCES/glibc-rh2119304-3.patch
@@ -0,0 +1,19 @@
+Downstream-only patch to preserve the 8.6.0 _rtld_global_ro ABI on s390x.
+
+diff --git a/sysdeps/s390/dl-procinfo.c b/sysdeps/s390/dl-procinfo.c
+index f928b485609a3b8a..3f46b2785fafe51e 100644
+--- a/sysdeps/s390/dl-procinfo.c
++++ b/sysdeps/s390/dl-procinfo.c
+@@ -20,6 +20,12 @@
+ /* The hwcap and platform strings are now in
+    sysdeps/s390/dl-procinfo-s390.c.  */
+ 
++/* Dummy entries to preserve ABI. */
++#if defined SHARED && defined PROCINFO_DECL
++const char _dl_s390_cap_flags_unused[23][9];
++const char _dl_s390_platforms_unused[10][7];
++#endif
++
+ /* Needed by sysdeps/unix/sysv/linux/dl-vdso-setup.c (as included from
+    sysdeps/generic/ldsodefs.h).  */
+ #undef PROCINFO_DECL
diff --git a/SPECS/glibc.spec b/SPECS/glibc.spec
index 97cb4ed..1c2397e 100644
--- a/SPECS/glibc.spec
+++ b/SPECS/glibc.spec
@@ -1,6 +1,6 @@
 %define glibcsrcdir glibc-2.28
 %define glibcversion 2.28
-%define glibcrelease 211%{?dist}
+%define glibcrelease 213%{?dist}
 # Pre-release tarballs are pulled in from git using a command that is
 # effectively:
 #
@@ -964,6 +964,10 @@ Patch771: glibc-rh2047981-44.patch
 Patch772: glibc-rh2047981-45.patch
 Patch773: glibc-rh2047981-46.patch
 Patch774: glibc-rh2047981-47.patch
+Patch775: glibc-rh2104907.patch
+Patch776: glibc-rh2119304-1.patch
+Patch777: glibc-rh2119304-2.patch
+Patch778: glibc-rh2119304-3.patch 
 
 # Intel Optimizations
 Patch10001: glibc-sw24097-1.patch
@@ -2909,6 +2913,13 @@ fi
 %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
 
 %changelog
+* Thu Aug 25 2022 Florian Weimer <fweimer@redhat.com> - 2.28-213
+- Preserve GLRO (dl_naudit) internal ABI (#2119304)
+- Avoid s390x ABI change due to z16 recognition on s390x (#2119304)
+
+* Tue Aug 23 2022 Arjun Shankar <arjun@redhat.com> - 2.28-212
+- Fix locale en_US@ampm (#2104907) 
+
 * Fri Jul 22 2022 Carlos O'Donell <carlos@redhat.com> - 2.28-211
 - Improve dynamic loader auditing interface (LD_AUDIT) (#2047981)
 - Add dlinfo() API support for RTLD_DI_PHDR (#2097898)