[glibc] s390: Move files out of s390-64 folders

Stefan Liebler via Glibc-cvs <[email protected]>
Newsgroups gmane.comp.lib.glibc.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=2388cad009b773587e2dd9523d4db32085b18288

commit 2388cad009b773587e2dd9523d4db32085b18288
Author: Stefan Liebler <[email protected]>
Date:   Thu Apr 9 10:47:09 2026 +0200

    s390: Move files out of s390-64 folders
    
    All the files in subfolders s390/s390-64 in sysdeps directory are moved
    up to the s390/ ones.  If necessary the files were merged with the existing
    ones.
    
    sysdeps/s390/preconfigure.ac was updated to reflect the removal of s390-64
    subdirectory.
    Reviewed-by: Adhemerval Zanella  <[email protected]>

Diff:
---
 sysdeps/s390/Implies                               |   1 +
 sysdeps/s390/Makefile                              |  89 +++++++++
 sysdeps/s390/Versions                              |   3 +
 sysdeps/s390/{s390-64 => }/__longjmp.c             |   2 +-
 sysdeps/s390/{s390-64 => }/add_n.S                 |   0
 sysdeps/s390/{s390-64 => }/bsd-_setjmp.S           |   0
 sysdeps/s390/{s390-64 => }/bsd-setjmp.S            |   0
 sysdeps/s390/configure                             |  93 ++++++++-
 sysdeps/s390/configure.ac                          |  56 +++++-
 sysdeps/s390/{s390-64 => }/crti.S                  |   0
 sysdeps/s390/{s390-64 => }/crtn.S                  |   0
 sysdeps/s390/{s390-64 => }/dl-hwcap-check.h        |   0
 sysdeps/s390/{s390-64 => }/dl-hwcaps-subdirs.c     |   0
 sysdeps/s390/{s390-64 => }/dl-machine.h            |   0
 sysdeps/s390/{s390-64 => }/dl-trampoline.S         |   0
 sysdeps/s390/{s390-64 => }/dl-trampoline.h         |   0
 sysdeps/s390/preconfigure                          |   2 +-
 sysdeps/s390/preconfigure.ac                       |   2 +-
 sysdeps/s390/s390-64/Implies                       |   1 -
 sysdeps/s390/s390-64/Makefile                      |  92 ---------
 sysdeps/s390/s390-64/Versions                      |   5 -
 sysdeps/s390/s390-64/configure                     |  95 ---------
 sysdeps/s390/s390-64/configure.ac                  |  57 ------
 sysdeps/s390/{s390-64 => }/s390x-mcount.S          |   0
 sysdeps/s390/{s390-64 => }/s390x-mcount.h          |   0
 sysdeps/s390/{s390-64 => }/setjmp.S                |   0
 sysdeps/s390/{s390-64 => }/stackguard-macros.h     |   0
 sysdeps/s390/{s390-64 => }/start.S                 |   0
 sysdeps/s390/{s390-64 => }/strncpy-z900.S          |   0
 sysdeps/s390/{s390-64 => }/sub_n.S                 |   0
 sysdeps/s390/{s390-64 => }/sysdep.h                |   0
 sysdeps/s390/{s390-64 => }/tst-audit.h             |   0
 sysdeps/s390/{s390-64 => }/tst-glibc-hwcaps.c      |   0
 sysdeps/unix/sysv/linux/s390/Implies               |   1 +
 sysdeps/unix/sysv/linux/s390/Makefile              |  10 +
 sysdeps/unix/sysv/linux/s390/Versions              |   5 +
 .../linux/s390/{s390-64 => }/____longjmp_chk.c     |   0
 .../linux/s390/{s390-64 => }/__makecontext_ret.S   |   0
 .../sysv/linux/s390/{s390-64 => }/arch-syscall.h   |   0
 .../sysv/linux/s390/{s390-64 => }/c++-types.data   |   0
 sysdeps/unix/sysv/linux/s390/{s390-64 => }/clone.S |   0
 .../unix/sysv/linux/s390/{s390-64 => }/clone3.S    |   0
 sysdeps/unix/sysv/linux/s390/configure             |  13 ++
 sysdeps/unix/sysv/linux/s390/configure.ac          |   2 +
 sysdeps/unix/sysv/linux/s390/dl-cache.h            |  23 +++
 .../sysv/linux/s390/{s390-64 => }/getcontext.S     |   0
 .../unix/sysv/linux/s390/{s390-64 => }/ld.abilist  |   0
 .../s390/{s390-64 => }/libBrokenLocale.abilist     |   0
 .../sysv/linux/s390/{s390-64 => }/libanl.abilist   |   0
 .../sysv/linux/s390/{s390-64 => }/libc.abilist     |   0
 .../s390/{s390-64 => }/libc_malloc_debug.abilist   |   0
 .../sysv/linux/s390/{s390-64 => }/libdl.abilist    |   0
 .../sysv/linux/s390/{s390-64 => }/libm.abilist     |   0
 .../sysv/linux/s390/{s390-64 => }/libnsl.abilist   |   0
 .../linux/s390/{s390-64 => }/libpthread.abilist    |   0
 .../linux/s390/{s390-64 => }/libresolv.abilist     |   0
 .../sysv/linux/s390/{s390-64 => }/librt.abilist    |   0
 .../linux/s390/{s390-64 => }/libthread_db.abilist  |   0
 .../sysv/linux/s390/{s390-64 => }/libutil.abilist  |   0
 .../sysv/linux/s390/{s390-64 => }/makecontext.c    |   0
 .../sysv/linux/s390/{s390-64 => }/pointer_guard.h  |   0
 sysdeps/unix/sysv/linux/s390/s390-64/Implies       |   1 -
 sysdeps/unix/sysv/linux/s390/s390-64/Makefile      |  15 --
 sysdeps/unix/sysv/linux/s390/s390-64/Versions      |   7 -
 sysdeps/unix/sysv/linux/s390/s390-64/configure     |  16 --
 sysdeps/unix/sysv/linux/s390/s390-64/configure.ac  |   4 -
 sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h    |  24 ---
 sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h      | 178 -----------------
 .../sysv/linux/s390/{s390-64 => }/setcontext.S     |   0
 .../sysv/linux/s390/{s390-64 => }/shlib-versions   |   0
 .../sysv/linux/s390/{s390-64 => }/single-thread.h  |   0
 .../sysv/linux/s390/{s390-64 => }/swapcontext.S    |   0
 .../unix/sysv/linux/s390/{s390-64 => }/syscall.S   |   0
 .../sysv/linux/s390/{s390-64 => }/syscall_cancel.S |   0
 .../unix/sysv/linux/s390/{s390-64 => }/sysdep.S    |   0
 sysdeps/unix/sysv/linux/s390/sysdep.h              | 218 ++++++++++++++++++---
 .../s390/{s390-64 => }/timer_t_was_int_compat.h    |   0
 sysdeps/unix/sysv/linux/s390/{s390-64 => }/vfork.S |   0
 78 files changed, 481 insertions(+), 534 deletions(-)

diff --git a/sysdeps/s390/Implies b/sysdeps/s390/Implies
index 1945b1f4bb..30800d54c3 100644
--- a/sysdeps/s390/Implies
+++ b/sysdeps/s390/Implies
@@ -1,3 +1,4 @@
+wordsize-64
 ieee754/ldbl-128
 ieee754/dbl-64
 ieee754/flt-32
diff --git a/sysdeps/s390/Makefile b/sysdeps/s390/Makefile
index 985b4f25ee..29d11dfdab 100644
--- a/sysdeps/s390/Makefile
+++ b/sysdeps/s390/Makefile
@@ -1,3 +1,7 @@
+ifeq ($(subdir),gmon)
+sysdep_routines += s390x-mcount
+endif
+
 ifeq ($(subdir),iconvdata)
 ISO-8859-1_CP037_Z900-routines := iso-8859-1_cp037_z900
 ISO-8859-1_CP037_Z900-map := gconv.map
@@ -43,6 +47,91 @@ $(modpfx)gconv-modules-s390.conf: ../sysdeps/s390/gconv-modules-s390.conf \
 endif
 
 ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+CFLAGS-dl-load.c += -Wno-unused
+CFLAGS-dl-reloc.c += -Wno-unused
+
+$(objpfx)tst-glibc-hwcaps: \
+  $(objpfx)libmarkermod2-1.so \
+  $(objpfx)libmarkermod3-1.so \
+  $(objpfx)libmarkermod4-1.so \
+  $(objpfx)libmarkermod5-1.so \
+  $(objpfx)libmarkermod6-1.so
+$(objpfx)tst-glibc-hwcaps.out: \
+  $(objpfx)libmarkermod2.so \
+    $(objpfx)glibc-hwcaps/z13/libmarkermod2.so \
+  $(objpfx)libmarkermod3.so \
+    $(objpfx)glibc-hwcaps/z13/libmarkermod3.so \
+    $(objpfx)glibc-hwcaps/z14/libmarkermod3.so \
+  $(objpfx)libmarkermod4.so \
+    $(objpfx)glibc-hwcaps/z13/libmarkermod4.so \
+    $(objpfx)glibc-hwcaps/z14/libmarkermod4.so \
+    $(objpfx)glibc-hwcaps/z15/libmarkermod4.so \
+  $(objpfx)libmarkermod5.so \
+    $(objpfx)glibc-hwcaps/z13/libmarkermod5.so \
+    $(objpfx)glibc-hwcaps/z14/libmarkermod5.so \
+    $(objpfx)glibc-hwcaps/z15/libmarkermod5.so \
+    $(objpfx)glibc-hwcaps/z16/libmarkermod5.so \
+  $(objpfx)libmarkermod6.so \
+    $(objpfx)glibc-hwcaps/z13/libmarkermod6.so \
+    $(objpfx)glibc-hwcaps/z14/libmarkermod6.so \
+    $(objpfx)glibc-hwcaps/z15/libmarkermod6.so \
+    $(objpfx)glibc-hwcaps/z16/libmarkermod6.so \
+    $(objpfx)glibc-hwcaps/z17/libmarkermod6.so
+
+
+$(objpfx)glibc-hwcaps/z13/libmarkermod2.so: $(objpfx)libmarkermod2-2.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z13/libmarkermod3.so: $(objpfx)libmarkermod3-2.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z14/libmarkermod3.so: $(objpfx)libmarkermod3-3.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z13/libmarkermod4.so: $(objpfx)libmarkermod4-2.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z14/libmarkermod4.so: $(objpfx)libmarkermod4-3.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z15/libmarkermod4.so: $(objpfx)libmarkermod4-4.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z13/libmarkermod5.so: $(objpfx)libmarkermod5-2.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z14/libmarkermod5.so: $(objpfx)libmarkermod5-3.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z15/libmarkermod5.so: $(objpfx)libmarkermod5-4.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z16/libmarkermod5.so: $(objpfx)libmarkermod5-5.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z13/libmarkermod6.so: $(objpfx)libmarkermod6-2.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z14/libmarkermod6.so: $(objpfx)libmarkermod6-3.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z15/libmarkermod6.so: $(objpfx)libmarkermod6-4.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z16/libmarkermod6.so: $(objpfx)libmarkermod6-5.so
+	$(make-target-directory)
+	cp $< $@
+$(objpfx)glibc-hwcaps/z17/libmarkermod6.so: $(objpfx)libmarkermod6-6.so
+	$(make-target-directory)
+	cp $< $@
+
+
+ifeq (no,$(build-hardcoded-path-in-tests))
+# This is an ld.so.cache test, and RPATH/RUNPATH in the executable
+# interferes with its test objectives.
+tests-container += tst-glibc-hwcaps-cache
+endif
 
 ifeq ($(build-shared),yes)
 tests += tst-dl-runtime-resolve-noaudit tst-dl-runtime-resolve-audit \
diff --git a/sysdeps/s390/Versions b/sysdeps/s390/Versions
index 8417623353..d80d691817 100644
--- a/sysdeps/s390/Versions
+++ b/sysdeps/s390/Versions
@@ -3,6 +3,9 @@ libc {
     setjmp; _setjmp; __sigsetjmp;
     longjmp; _longjmp; siglongjmp;
   }
+  GLIBC_2.29 {
+    __fentry__;
+  }
 }
 
 ld {
diff --git a/sysdeps/s390/s390-64/__longjmp.c b/sysdeps/s390/__longjmp.c
similarity index 97%
rename from sysdeps/s390/s390-64/__longjmp.c
rename to sysdeps/s390/__longjmp.c
index fabd5e0a4e..7c207e44c6 100644
--- a/sysdeps/s390/s390-64/__longjmp.c
+++ b/sysdeps/s390/__longjmp.c
@@ -24,7 +24,7 @@
 #include <unistd.h>
 #include <stap-probe.h>
 
-/* See sysdeps/unix/sysv/linux/s390/s390-64/pointer_guard.h.  */
+/* See sysdeps/unix/sysv/linux/s390/pointer_guard.h.  */
 #if IS_IN (rtld)
 # undef PTR_DEMANGLE
 #endif
diff --git a/sysdeps/s390/s390-64/add_n.S b/sysdeps/s390/add_n.S
similarity index 100%
rename from sysdeps/s390/s390-64/add_n.S
rename to sysdeps/s390/add_n.S
diff --git a/sysdeps/s390/s390-64/bsd-_setjmp.S b/sysdeps/s390/bsd-_setjmp.S
similarity index 100%
rename from sysdeps/s390/s390-64/bsd-_setjmp.S
rename to sysdeps/s390/bsd-_setjmp.S
diff --git a/sysdeps/s390/s390-64/bsd-setjmp.S b/sysdeps/s390/bsd-setjmp.S
similarity index 100%
rename from sysdeps/s390/s390-64/bsd-setjmp.S
rename to sysdeps/s390/bsd-setjmp.S
diff --git a/sysdeps/s390/configure b/sysdeps/s390/configure
index f4ec662610..e21a5ba3a7 100644
--- a/sysdeps/s390/configure
+++ b/sysdeps/s390/configure
@@ -269,6 +269,95 @@ then
 
 fi
 
-test -n "$critic_missing" && as_fn_error $? "
-*** $critic_missing" "$LINENO" 5
+# Minimal checking for static PIE support in ld.
+# Compare to ld testcase/bugzilla:
+# <binutils-source>/ld/testsuite/ld-elf/pr22263-1.rd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for s390-specific static PIE requirements" >&5
+printf %s "checking for s390-specific static PIE requirements... " >&6; }
+if { as_var=\
+libc_cv_s390x_staticpie_req_runtime; eval test \${$as_var+y}; }
+then :
+  printf %s "(cached) " >&6
+else case e in #(
+  e)   cat > conftest1.c <<EOF
+__thread int * foo;
+
+void
+bar (void)
+{
+  *foo = 1;
+}
+
+void bar2 (void);
+void* bar2_ifunc (void) __asm__ ("bar2");
+__asm__ (".type bar2, %gnu_indirect_function");
+void* bar2_ifunc (void) { return 0; }
+EOF
+  cat > conftest2.c <<EOF
+extern __thread int *foo;
+extern void bar (void);
+extern void bar2 (void);
+static int x;
+
+int
+main ()
+{
+  foo = &x;
+  bar2 ();
+  return 0;
+}
+EOF
+  libc_cv_s390x_staticpie_req_runtime=no
+  # Check if the static linker does not generate dynamic TLS relocs in PIE
+  # (binutils PR ld/22263), if it accepts --no-dynamic-linker
+  # (by using -static-pie), and if it adds a DT_JMPREL pointing to .rela.iplt
+  # with static pie.
+  if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest1.c -o conftest1.o'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } \
+     && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest2.c -o conftest2.o'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } \
+     && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostartfiles -nostdlib -fPIE -o conftest conftest1.o conftest2.o'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } \
+     && { ac_try='! LC_ALL=C $READELF -Wr conftest | grep R_390_TLS_TPOFF >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } \
+     && { ac_try='LC_ALL=C $READELF -Wd conftest | grep JMPREL >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+  then
+    libc_cv_s390x_staticpie_req_runtime=yes
+  fi
+  rm -rf conftest.* ;;
+esac
+fi
+eval ac_res=\$\
+libc_cv_s390x_staticpie_req_runtime
+	       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+
+if test $libc_cv_s390x_staticpie_req_runtime = yes; then
+   # Some kernels might fail with /proc/sys/kernel/randomize_va_space set to 0
+   # due not enough space for a brk call.  However, there is no reliable way to
+   # test it.
+   printf "%s\n" "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
+
+fi
 
diff --git a/sysdeps/s390/configure.ac b/sysdeps/s390/configure.ac
index 82e1a4445f..3c384f9670 100644
--- a/sysdeps/s390/configure.ac
+++ b/sysdeps/s390/configure.ac
@@ -133,5 +133,57 @@ then
   AC_DEFINE(HAVE_S390_MIN_ARCH13_ZARCH_ASM_SUPPORT)
 fi
 
-test -n "$critic_missing" && AC_MSG_ERROR([
-*** $critic_missing])
+# Minimal checking for static PIE support in ld.
+# Compare to ld testcase/bugzilla:
+# <binutils-source>/ld/testsuite/ld-elf/pr22263-1.rd
+AC_CACHE_CHECK([for s390-specific static PIE requirements], \
+[libc_cv_s390x_staticpie_req_runtime], [dnl
+  cat > conftest1.c <<EOF
+__thread int * foo;
+
+void
+bar (void)
+{
+  *foo = 1;
+}
+
+void bar2 (void);
+void* bar2_ifunc (void) __asm__ ("bar2");
+__asm__ (".type bar2, %gnu_indirect_function");
+void* bar2_ifunc (void) { return 0; }
+EOF
+  cat > conftest2.c <<EOF
+extern __thread int *foo;
+extern void bar (void);
+extern void bar2 (void);
+static int x;
+
+int
+main ()
+{
+  foo = &x;
+  bar2 ();
+  return 0;
+}
+EOF
+  libc_cv_s390x_staticpie_req_runtime=no
+  # Check if the static linker does not generate dynamic TLS relocs in PIE
+  # (binutils PR ld/22263), if it accepts --no-dynamic-linker
+  # (by using -static-pie), and if it adds a DT_JMPREL pointing to .rela.iplt
+  # with static pie.
+  if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest1.c -o conftest1.o]) \
+     && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest2.c -o conftest2.o]) \
+     && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostartfiles -nostdlib -fPIE -o conftest conftest1.o conftest2.o]) \
+     && AC_TRY_COMMAND([! LC_ALL=C $READELF -Wr conftest | grep R_390_TLS_TPOFF] >&AS_MESSAGE_LOG_FD) \
+     && AC_TRY_COMMAND([LC_ALL=C $READELF -Wd conftest | grep JMPREL >&AS_MESSAGE_LOG_FD])
+  then
+    libc_cv_s390x_staticpie_req_runtime=yes
+  fi
+  rm -rf conftest.*])
+
+if test $libc_cv_s390x_staticpie_req_runtime = yes; then
+   # Some kernels might fail with /proc/sys/kernel/randomize_va_space set to 0
+   # due not enough space for a brk call.  However, there is no reliable way to
+   # test it.
+   AC_DEFINE(SUPPORT_STATIC_PIE)
+fi
diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/crti.S
similarity index 100%
rename from sysdeps/s390/s390-64/crti.S
rename to sysdeps/s390/crti.S
diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/crtn.S
similarity index 100%
rename from sysdeps/s390/s390-64/crtn.S
rename to sysdeps/s390/crtn.S
diff --git a/sysdeps/s390/s390-64/dl-hwcap-check.h b/sysdeps/s390/dl-hwcap-check.h
similarity index 100%
rename from sysdeps/s390/s390-64/dl-hwcap-check.h
rename to sysdeps/s390/dl-hwcap-check.h
diff --git a/sysdeps/s390/s390-64/dl-hwcaps-subdirs.c b/sysdeps/s390/dl-hwcaps-subdirs.c
similarity index 100%
rename from sysdeps/s390/s390-64/dl-hwcaps-subdirs.c
rename to sysdeps/s390/dl-hwcaps-subdirs.c
diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/dl-machine.h
similarity index 100%
rename from sysdeps/s390/s390-64/dl-machine.h
rename to sysdeps/s390/dl-machine.h
diff --git a/sysdeps/s390/s390-64/dl-trampoline.S b/sysdeps/s390/dl-trampoline.S
similarity index 100%
rename from sysdeps/s390/s390-64/dl-trampoline.S
rename to sysdeps/s390/dl-trampoline.S
diff --git a/sysdeps/s390/s390-64/dl-trampoline.h b/sysdeps/s390/dl-trampoline.h
similarity index 100%
rename from sysdeps/s390/s390-64/dl-trampoline.h
rename to sysdeps/s390/dl-trampoline.h
diff --git a/sysdeps/s390/preconfigure b/sysdeps/s390/preconfigure
index 0536f3eb80..39843cb365 100644
--- a/sysdeps/s390/preconfigure
+++ b/sysdeps/s390/preconfigure
@@ -4,7 +4,7 @@
 case "$machine" in
 s390x)
   base_machine=s390
-  machine=s390/s390-64
+  machine=s390
   ;;
 s390)
   as_fn_error $? "s390-32 is not supported anymore." "$LINENO" 5
diff --git a/sysdeps/s390/preconfigure.ac b/sysdeps/s390/preconfigure.ac
index aee9e4e0cc..b75ad3be00 100644
--- a/sysdeps/s390/preconfigure.ac
+++ b/sysdeps/s390/preconfigure.ac
@@ -4,7 +4,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 case "$machine" in
 s390x)
   base_machine=s390
-  machine=s390/s390-64
+  machine=s390
   ;;
 s390)
   AC_MSG_ERROR(s390-32 is not supported anymore.)
diff --git a/sysdeps/s390/s390-64/Implies b/sysdeps/s390/s390-64/Implies
deleted file mode 100644
index a8cae95f9d..0000000000
--- a/sysdeps/s390/s390-64/Implies
+++ /dev/null
@@ -1 +0,0 @@
-wordsize-64
diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile
deleted file mode 100644
index 991025cd2a..0000000000
--- a/sysdeps/s390/s390-64/Makefile
+++ /dev/null
@@ -1,92 +0,0 @@
-ifeq ($(subdir),gmon)
-sysdep_routines += s390x-mcount
-endif
-
-ifeq ($(subdir),elf)
-CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
-CFLAGS-dl-load.c += -Wno-unused
-CFLAGS-dl-reloc.c += -Wno-unused
-
-$(objpfx)tst-glibc-hwcaps: \
-  $(objpfx)libmarkermod2-1.so \
-  $(objpfx)libmarkermod3-1.so \
-  $(objpfx)libmarkermod4-1.so \
-  $(objpfx)libmarkermod5-1.so \
-  $(objpfx)libmarkermod6-1.so
-$(objpfx)tst-glibc-hwcaps.out: \
-  $(objpfx)libmarkermod2.so \
-    $(objpfx)glibc-hwcaps/z13/libmarkermod2.so \
-  $(objpfx)libmarkermod3.so \
-    $(objpfx)glibc-hwcaps/z13/libmarkermod3.so \
-    $(objpfx)glibc-hwcaps/z14/libmarkermod3.so \
-  $(objpfx)libmarkermod4.so \
-    $(objpfx)glibc-hwcaps/z13/libmarkermod4.so \
-    $(objpfx)glibc-hwcaps/z14/libmarkermod4.so \
-    $(objpfx)glibc-hwcaps/z15/libmarkermod4.so \
-  $(objpfx)libmarkermod5.so \
-    $(objpfx)glibc-hwcaps/z13/libmarkermod5.so \
-    $(objpfx)glibc-hwcaps/z14/libmarkermod5.so \
-    $(objpfx)glibc-hwcaps/z15/libmarkermod5.so \
-    $(objpfx)glibc-hwcaps/z16/libmarkermod5.so \
-  $(objpfx)libmarkermod6.so \
-    $(objpfx)glibc-hwcaps/z13/libmarkermod6.so \
-    $(objpfx)glibc-hwcaps/z14/libmarkermod6.so \
-    $(objpfx)glibc-hwcaps/z15/libmarkermod6.so \
-    $(objpfx)glibc-hwcaps/z16/libmarkermod6.so \
-    $(objpfx)glibc-hwcaps/z17/libmarkermod6.so
-
-
-$(objpfx)glibc-hwcaps/z13/libmarkermod2.so: $(objpfx)libmarkermod2-2.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z13/libmarkermod3.so: $(objpfx)libmarkermod3-2.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z14/libmarkermod3.so: $(objpfx)libmarkermod3-3.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z13/libmarkermod4.so: $(objpfx)libmarkermod4-2.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z14/libmarkermod4.so: $(objpfx)libmarkermod4-3.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z15/libmarkermod4.so: $(objpfx)libmarkermod4-4.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z13/libmarkermod5.so: $(objpfx)libmarkermod5-2.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z14/libmarkermod5.so: $(objpfx)libmarkermod5-3.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z15/libmarkermod5.so: $(objpfx)libmarkermod5-4.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z16/libmarkermod5.so: $(objpfx)libmarkermod5-5.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z13/libmarkermod6.so: $(objpfx)libmarkermod6-2.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z14/libmarkermod6.so: $(objpfx)libmarkermod6-3.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z15/libmarkermod6.so: $(objpfx)libmarkermod6-4.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z16/libmarkermod6.so: $(objpfx)libmarkermod6-5.so
-	$(make-target-directory)
-	cp $< $@
-$(objpfx)glibc-hwcaps/z17/libmarkermod6.so: $(objpfx)libmarkermod6-6.so
-	$(make-target-directory)
-	cp $< $@
-
-
-ifeq (no,$(build-hardcoded-path-in-tests))
-# This is an ld.so.cache test, and RPATH/RUNPATH in the executable
-# interferes with its test objectives.
-tests-container += tst-glibc-hwcaps-cache
-endif
-
-endif # $(subdir) == elf
diff --git a/sysdeps/s390/s390-64/Versions b/sysdeps/s390/s390-64/Versions
deleted file mode 100644
index ec1d68313d..0000000000
--- a/sysdeps/s390/s390-64/Versions
+++ /dev/null
@@ -1,5 +0,0 @@
-libc {
-  GLIBC_2.29 {
-    __fentry__;
-  }
-}
diff --git a/sysdeps/s390/s390-64/configure b/sysdeps/s390/s390-64/configure
deleted file mode 100644
index 9ea6940c85..0000000000
--- a/sysdeps/s390/s390-64/configure
+++ /dev/null
@@ -1,95 +0,0 @@
-# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
- # Local configure fragment for sysdeps/s390/s390-64.
-
-# Minimal checking for static PIE support in ld.
-# Compare to ld testcase/bugzilla:
-# <binutils-source>/ld/testsuite/ld-elf/pr22263-1.rd
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for s390-specific static PIE requirements" >&5
-printf %s "checking for s390-specific static PIE requirements... " >&6; }
-if { as_var=\
-libc_cv_s390x_staticpie_req_runtime; eval test \${$as_var+y}; }
-then :
-  printf %s "(cached) " >&6
-else case e in #(
-  e)   cat > conftest1.c <<EOF
-__thread int * foo;
-
-void
-bar (void)
-{
-  *foo = 1;
-}
-
-void bar2 (void);
-void* bar2_ifunc (void) __asm__ ("bar2");
-__asm__ (".type bar2, %gnu_indirect_function");
-void* bar2_ifunc (void) { return 0; }
-EOF
-  cat > conftest2.c <<EOF
-extern __thread int *foo;
-extern void bar (void);
-extern void bar2 (void);
-static int x;
-
-int
-main ()
-{
-  foo = &x;
-  bar2 ();
-  return 0;
-}
-EOF
-  libc_cv_s390x_staticpie_req_runtime=no
-  # Check if the static linker does not generate dynamic TLS relocs in PIE
-  # (binutils PR ld/22263), if it accepts --no-dynamic-linker
-  # (by using -static-pie), and if it adds a DT_JMPREL pointing to .rela.iplt
-  # with static pie.
-  if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest1.c -o conftest1.o'
-  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; } \
-     && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest2.c -o conftest2.o'
-  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; } \
-     && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostartfiles -nostdlib -fPIE -o conftest conftest1.o conftest2.o'
-  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; } \
-     && { ac_try='! LC_ALL=C $READELF -Wr conftest | grep R_390_TLS_TPOFF >&5'
-  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; } \
-     && { ac_try='LC_ALL=C $READELF -Wd conftest | grep JMPREL >&5'
-  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }
-  then
-    libc_cv_s390x_staticpie_req_runtime=yes
-  fi
-  rm -rf conftest.* ;;
-esac
-fi
-eval ac_res=\$\
-libc_cv_s390x_staticpie_req_runtime
-	       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
-
-if test $libc_cv_s390x_staticpie_req_runtime = yes; then
-   # Some kernels might fail with /proc/sys/kernel/randomize_va_space set to 0
-   # due not enough space for a brk call.  However, there is no reliable way to
-   # test it.
-   printf "%s\n" "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
-
-fi
-
diff --git a/sysdeps/s390/s390-64/configure.ac b/sysdeps/s390/s390-64/configure.ac
deleted file mode 100644
index aaf71eabb1..0000000000
--- a/sysdeps/s390/s390-64/configure.ac
+++ /dev/null
@@ -1,57 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/s390/s390-64.
-
-# Minimal checking for static PIE support in ld.
-# Compare to ld testcase/bugzilla:
-# <binutils-source>/ld/testsuite/ld-elf/pr22263-1.rd
-AC_CACHE_CHECK([for s390-specific static PIE requirements], \
-[libc_cv_s390x_staticpie_req_runtime], [dnl
-  cat > conftest1.c <<EOF
-__thread int * foo;
-
-void
-bar (void)
-{
-  *foo = 1;
-}
-
-void bar2 (void);
-void* bar2_ifunc (void) __asm__ ("bar2");
-__asm__ (".type bar2, %gnu_indirect_function");
-void* bar2_ifunc (void) { return 0; }
-EOF
-  cat > conftest2.c <<EOF
-extern __thread int *foo;
-extern void bar (void);
-extern void bar2 (void);
-static int x;
-
-int
-main ()
-{
-  foo = &x;
-  bar2 ();
-  return 0;
-}
-EOF
-  libc_cv_s390x_staticpie_req_runtime=no
-  # Check if the static linker does not generate dynamic TLS relocs in PIE
-  # (binutils PR ld/22263), if it accepts --no-dynamic-linker
-  # (by using -static-pie), and if it adds a DT_JMPREL pointing to .rela.iplt
-  # with static pie.
-  if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest1.c -o conftest1.o]) \
-     && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fPIE -c conftest2.c -o conftest2.o]) \
-     && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostartfiles -nostdlib -fPIE -o conftest conftest1.o conftest2.o]) \
-     && AC_TRY_COMMAND([! LC_ALL=C $READELF -Wr conftest | grep R_390_TLS_TPOFF] >&AS_MESSAGE_LOG_FD) \
-     && AC_TRY_COMMAND([LC_ALL=C $READELF -Wd conftest | grep JMPREL >&AS_MESSAGE_LOG_FD])
-  then
-    libc_cv_s390x_staticpie_req_runtime=yes
-  fi
-  rm -rf conftest.*])
-
-if test $libc_cv_s390x_staticpie_req_runtime = yes; then
-   # Some kernels might fail with /proc/sys/kernel/randomize_va_space set to 0
-   # due not enough space for a brk call.  However, there is no reliable way to
-   # test it.
-   AC_DEFINE(SUPPORT_STATIC_PIE)
-fi
diff --git a/sysdeps/s390/s390-64/s390x-mcount.S b/sysdeps/s390/s390x-mcount.S
similarity index 100%
rename from sysdeps/s390/s390-64/s390x-mcount.S
rename to sysdeps/s390/s390x-mcount.S
diff --git a/sysdeps/s390/s390-64/s390x-mcount.h b/sysdeps/s390/s390x-mcount.h
similarity index 100%
rename from sysdeps/s390/s390-64/s390x-mcount.h
rename to sysdeps/s390/s390x-mcount.h
diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/setjmp.S
similarity index 100%
rename from sysdeps/s390/s390-64/setjmp.S
rename to sysdeps/s390/setjmp.S
diff --git a/sysdeps/s390/s390-64/stackguard-macros.h b/sysdeps/s390/stackguard-macros.h
similarity index 100%
rename from sysdeps/s390/s390-64/stackguard-macros.h
rename to sysdeps/s390/stackguard-macros.h
diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/start.S
similarity index 100%
rename from sysdeps/s390/s390-64/start.S
rename to sysdeps/s390/start.S
diff --git a/sysdeps/s390/s390-64/strncpy-z900.S b/sysdeps/s390/strncpy-z900.S
similarity index 100%
rename from sysdeps/s390/s390-64/strncpy-z900.S
rename to sysdeps/s390/strncpy-z900.S
diff --git a/sysdeps/s390/s390-64/sub_n.S b/sysdeps/s390/sub_n.S
similarity index 100%
rename from sysdeps/s390/s390-64/sub_n.S
rename to sysdeps/s390/sub_n.S
diff --git a/sysdeps/s390/s390-64/sysdep.h b/sysdeps/s390/sysdep.h
similarity index 100%
rename from sysdeps/s390/s390-64/sysdep.h
rename to sysdeps/s390/sysdep.h
diff --git a/sysdeps/s390/s390-64/tst-audit.h b/sysdeps/s390/tst-audit.h
similarity index 100%
rename from sysdeps/s390/s390-64/tst-audit.h
rename to sysdeps/s390/tst-audit.h
diff --git a/sysdeps/s390/s390-64/tst-glibc-hwcaps.c b/sysdeps/s390/tst-glibc-hwcaps.c
similarity index 100%
rename from sysdeps/s390/s390-64/tst-glibc-hwcaps.c
rename to sysdeps/s390/tst-glibc-hwcaps.c
diff --git a/sysdeps/unix/sysv/linux/s390/Implies b/sysdeps/unix/sysv/linux/s390/Implies
index e6e51fa5a7..615f507831 100644
--- a/sysdeps/unix/sysv/linux/s390/Implies
+++ b/sysdeps/unix/sysv/linux/s390/Implies
@@ -1,4 +1,5 @@
 s390/nptl
+unix/sysv/linux/wordsize-64
 
 # These supply the ABI compatibility for when long double was double.
 ieee754/ldbl-64-128
diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile
index 218aff1aee..e9ef5c51ac 100644
--- a/sysdeps/unix/sysv/linux/s390/Makefile
+++ b/sysdeps/unix/sysv/linux/s390/Makefile
@@ -1,3 +1,11 @@
+ifeq ($(subdir),elf)
+ifeq (yes,$(build-shared))
+# This is needed to support g++ v2 and v3.
+sysdep_routines += framestate
+shared-only-routines += framestate
+endif
+endif
+
 ifeq ($(subdir),rt)
 librt-routines += rt-sysdep
 librt-shared-only-routines += rt-sysdep
@@ -5,8 +13,10 @@ endif
 
 ifeq ($(subdir),stdlib)
 gen-as-const-headers += ucontext_i.sym
+sysdep_routines += __makecontext_ret
 endif
 
 ifeq ($(subdir),misc)
 tests += tst-ptrace-singleblock
+sysdep_headers += sys/elf.h
 endif
diff --git a/sysdeps/unix/sysv/linux/s390/Versions b/sysdeps/unix/sysv/linux/s390/Versions
index 548397fcff..d4b6a01950 100644
--- a/sysdeps/unix/sysv/linux/s390/Versions
+++ b/sysdeps/unix/sysv/linux/s390/Versions
@@ -1,4 +1,9 @@
 libc {
+  GLIBC_2.2 {
+    # Exception handling support functions from libgcc
+    __register_frame; __register_frame_table; __deregister_frame;
+    __frame_state_for; __register_frame_info_table;
+  }
   GLIBC_2.19 {
     __longjmp_chk;
     getcontext;
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/____longjmp_chk.c
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
rename to sysdeps/unix/sysv/linux/s390/____longjmp_chk.c
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/__makecontext_ret.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
rename to sysdeps/unix/sysv/linux/s390/__makecontext_ret.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h b/sysdeps/unix/sysv/linux/s390/arch-syscall.h
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h
rename to sysdeps/unix/sysv/linux/s390/arch-syscall.h
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data b/sysdeps/unix/sysv/linux/s390/c++-types.data
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data
rename to sysdeps/unix/sysv/linux/s390/c++-types.data
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/clone.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/clone.S
rename to sysdeps/unix/sysv/linux/s390/clone.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone3.S b/sysdeps/unix/sysv/linux/s390/clone3.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/clone3.S
rename to sysdeps/unix/sysv/linux/s390/clone3.S
diff --git a/sysdeps/unix/sysv/linux/s390/configure b/sysdeps/unix/sysv/linux/s390/configure
index d8a14434c5..9b3a1c01d2 100644
--- a/sysdeps/unix/sysv/linux/s390/configure
+++ b/sysdeps/unix/sysv/linux/s390/configure
@@ -4,3 +4,16 @@
 libc_cv_gcc_unwind_find_fde=yes
 ldd_rewrite_script=sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed
 
+test -n "$libc_cv_slibdir" ||
+case "$prefix" in
+/usr | /usr/)
+  libc_cv_slibdir='/lib64'
+  libc_cv_rtlddir='/lib'
+  if test "$libdir" = '${exec_prefix}/lib'; then
+    libdir='${exec_prefix}/lib64';
+    # Locale data can be shared between 32-bit and 64-bit libraries.
+    libc_cv_complocaledir='${exec_prefix}/lib/locale'
+  fi
+  ;;
+esac
+
diff --git a/sysdeps/unix/sysv/linux/s390/configure.ac b/sysdeps/unix/sysv/linux/s390/configure.ac
index 978450c94b..28e1caff2f 100644
--- a/sysdeps/unix/sysv/linux/s390/configure.ac
+++ b/sysdeps/unix/sysv/linux/s390/configure.ac
@@ -3,3 +3,5 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 
 libc_cv_gcc_unwind_find_fde=yes
 ldd_rewrite_script=sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed
+
+LIBC_SLIBDIR_RTLDDIR([lib64], [lib])
diff --git a/sysdeps/unix/sysv/linux/s390/dl-cache.h b/sysdeps/unix/sysv/linux/s390/dl-cache.h
index 766bba4265..df1ef9155c 100644
--- a/sysdeps/unix/sysv/linux/s390/dl-cache.h
+++ b/sysdeps/unix/sysv/linux/s390/dl-cache.h
@@ -1 +1,24 @@
+/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
+   Copyright (C) 2001-2026 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/>.  */
+
+#define _DL_CACHE_DEFAULT_ID	0x403
+
+#define _dl_cache_check_flags(flags)			\
+  ((flags) == _DL_CACHE_DEFAULT_ID)
+
 #include <sysdeps/unix/sysv/linux/sparc/dl-cache.h>
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S b/sysdeps/unix/sysv/linux/s390/getcontext.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S
rename to sysdeps/unix/sysv/linux/s390/getcontext.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/ld.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
rename to sysdeps/unix/sysv/linux/s390/ld.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/s390/libBrokenLocale.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist
rename to sysdeps/unix/sysv/linux/s390/libBrokenLocale.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libanl.abilist b/sysdeps/unix/sysv/linux/s390/libanl.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libanl.abilist
rename to sysdeps/unix/sysv/linux/s390/libanl.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/libc.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
rename to sysdeps/unix/sysv/linux/s390/libc.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/s390/libc_malloc_debug.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libc_malloc_debug.abilist
rename to sysdeps/unix/sysv/linux/s390/libc_malloc_debug.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist b/sysdeps/unix/sysv/linux/s390/libdl.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist
rename to sysdeps/unix/sysv/linux/s390/libdl.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/libm.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
rename to sysdeps/unix/sysv/linux/s390/libm.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist b/sysdeps/unix/sysv/linux/s390/libnsl.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist
rename to sysdeps/unix/sysv/linux/s390/libnsl.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/libpthread.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
rename to sysdeps/unix/sysv/linux/s390/libpthread.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist b/sysdeps/unix/sysv/linux/s390/libresolv.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist
rename to sysdeps/unix/sysv/linux/s390/libresolv.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist b/sysdeps/unix/sysv/linux/s390/librt.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist
rename to sysdeps/unix/sysv/linux/s390/librt.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist b/sysdeps/unix/sysv/linux/s390/libthread_db.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist
rename to sysdeps/unix/sysv/linux/s390/libthread_db.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist b/sysdeps/unix/sysv/linux/s390/libutil.abilist
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist
rename to sysdeps/unix/sysv/linux/s390/libutil.abilist
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c b/sysdeps/unix/sysv/linux/s390/makecontext.c
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c
rename to sysdeps/unix/sysv/linux/s390/makecontext.c
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/pointer_guard.h b/sysdeps/unix/sysv/linux/s390/pointer_guard.h
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/pointer_guard.h
rename to sysdeps/unix/sysv/linux/s390/pointer_guard.h
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Implies b/sysdeps/unix/sysv/linux/s390/s390-64/Implies
deleted file mode 100644
index 8d91c80097..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/Implies
+++ /dev/null
@@ -1 +0,0 @@
-unix/sysv/linux/wordsize-64
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
deleted file mode 100644
index 0c338cba36..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-ifeq ($(subdir),misc)
-sysdep_headers += sys/elf.h
-endif
-
-ifeq ($(subdir),elf)
-ifeq (yes,$(build-shared))
-# This is needed to support g++ v2 and v3.
-sysdep_routines += framestate
-shared-only-routines += framestate
-endif
-endif
-
-ifeq ($(subdir),stdlib)
-sysdep_routines += __makecontext_ret
-endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Versions b/sysdeps/unix/sysv/linux/s390/s390-64/Versions
deleted file mode 100644
index 83092db48e..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/Versions
+++ /dev/null
@@ -1,7 +0,0 @@
-libc {
-  GLIBC_2.2 {
-    # Exception handling support functions from libgcc
-    __register_frame; __register_frame_table; __deregister_frame;
-    __frame_state_for; __register_frame_info_table;
-  }
-}
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/configure b/sysdeps/unix/sysv/linux/s390/s390-64/configure
deleted file mode 100644
index 5490bc669e..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/configure
+++ /dev/null
@@ -1,16 +0,0 @@
-# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
- # Local configure fragment for sysdeps/unix/sysv/linux/s390/s390-64.
-
-test -n "$libc_cv_slibdir" ||
-case "$prefix" in
-/usr | /usr/)
-  libc_cv_slibdir='/lib64'
-  libc_cv_rtlddir='/lib'
-  if test "$libdir" = '${exec_prefix}/lib'; then
-    libdir='${exec_prefix}/lib64';
-    # Locale data can be shared between 32-bit and 64-bit libraries.
-    libc_cv_complocaledir='${exec_prefix}/lib/locale'
-  fi
-  ;;
-esac
-
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac b/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac
deleted file mode 100644
index 8c75888b62..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac
+++ /dev/null
@@ -1,4 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/unix/sysv/linux/s390/s390-64.
-
-LIBC_SLIBDIR_RTLDDIR([lib64], [lib])
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h b/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h
deleted file mode 100644
index 0a334a9d9a..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
-   Copyright (C) 2001-2026 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/>.  */
-
-#define _DL_CACHE_DEFAULT_ID	0x403
-
-#define _dl_cache_check_flags(flags)			\
-  ((flags) == _DL_CACHE_DEFAULT_ID)
-
-#include_next <dl-cache.h>
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
deleted file mode 100644
index 9c9e2a271f..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Assembler macros for 64 bit S/390.
-   Copyright (C) 2001-2026 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/>.  */
-
-#ifndef _LINUX_S390_SYSDEP_H
-#define _LINUX_S390_SYSDEP_H
-
-#include <sysdeps/s390/s390-64/sysdep.h>
-#include <sysdeps/unix/sysdep.h>
-#include <sysdeps/unix/sysv/linux/s390/sysdep.h>
-#include <sysdeps/unix/sysv/linux/sysdep.h>
-#include <dl-sysdep.h>	/* For RTLD_PRIVATE_ERRNO.  */
-#include <tls.h>
-
-/* For Linux we can use the system call table in the header file
-	/usr/include/asm/unistd.h
-   of the kernel.  But these symbols do not follow the SYS_* syntax
-   so we have to redefine the `SYS_ify' macro here.  */
-/* In newer 2.1 kernels __NR_syscall is missing so we define it here.  */
-#define __NR_syscall 0
-
-#undef SYS_ify
-#define SYS_ify(syscall_name)	__NR_##syscall_name
-
-#ifdef __ASSEMBLER__
-
-/* Linux uses a negative return value to indicate syscall errors, unlike
-   most Unices, which use the condition codes' carry flag.
-
-   Since version 2.1 the return value of a system call might be negative
-   even if the call succeeded.	E.g., the `lseek' system call might return
-   a large offset.  Therefore we must not anymore test for < 0, but test
-   for a real error by making sure the value in gpr2 is a real error
-   number.  Linus said he will make sure that no syscall returns a value
-   in -1 .. -4095 as a valid result so we can safely test with -4095.  */
-
-#undef PSEUDO
-#define	PSEUDO(name, syscall_name, args)				      \
-  .text;								      \
-  ENTRY (name)								      \
-    DO_CALL (syscall_name, args);					      \
-    lghi %r4,-4095 ;							      \
-    clgr %r2,%r4 ;							      \
-    jgnl SYSCALL_ERROR_LABEL
-
-#undef PSEUDO_END
-#define PSEUDO_END(name)						      \
-  SYSCALL_ERROR_HANDLER;						      \
-  END (name)
-
-#undef PSEUDO_NOERRNO
-#define	PSEUDO_NOERRNO(name, syscall_name, args)			      \
-  .text;								      \
-  ENTRY (name)								      \
-    DO_CALL (syscall_name, args)
-
-#undef PSEUDO_END_NOERRNO
-#define PSEUDO_END_NOERRNO(name)					      \
-  SYSCALL_ERROR_HANDLER;						      \
-  END (name)
-
-#undef PSEUDO_ERRVAL
-#define	PSEUDO_ERRVAL(name, syscall_name, args)				      \
-  .text;								      \
-  ENTRY (name)								      \
-    DO_CALL (syscall_name, args);					      \
-    lcgr %r2,%r2
-
-#undef PSEUDO_END_ERRVAL
-#define PSEUDO_END_ERRVAL(name)						      \
-  SYSCALL_ERROR_HANDLER;						      \
-  END (name)
-
-#undef SYSCALL_ERROR_LABEL
-#ifndef PIC
-# undef SYSCALL_ERROR_LABEL
-# define SYSCALL_ERROR_LABEL syscall_error
-# define SYSCALL_ERROR_HANDLER
-#else
-# if RTLD_PRIVATE_ERRNO
-#  undef SYSCALL_ERROR_LABEL
-#  define SYSCALL_ERROR_LABEL 0f
-#  define SYSCALL_ERROR_HANDLER \
-0:  larl  %r1,rtld_errno;						      \
-    lcr   %r2,%r2;							      \
-    st    %r2,0(%r1);							      \
-    lghi  %r2,-1;							      \
-    br    %r14
-# elif defined _LIBC_REENTRANT
-#  if IS_IN (libc)
-#   define SYSCALL_ERROR_ERRNO __libc_errno
-#  else
-#   define SYSCALL_ERROR_ERRNO errno
-#  endif
-#  undef SYSCALL_ERROR_LABEL
-#  define SYSCALL_ERROR_LABEL 0f
-#  define SYSCALL_ERROR_HANDLER \
-0:  lcr   %r0,%r2;							      \
-    larl  %r1,SYSCALL_ERROR_ERRNO@indntpoff;				      \
-    lg    %r1,0(%r1);							      \
-    ear   %r2,%a0;							      \
-    sllg  %r2,%r2,32;							      \
-    ear   %r2,%a1;							      \
-    st    %r0,0(%r1,%r2);						      \
-    lghi   %r2,-1;							      \
-    br    %r14
-# else
-#  undef SYSCALL_ERROR_LABEL
-#  define SYSCALL_ERROR_LABEL 0f
-#  define SYSCALL_ERROR_HANDLER \
-0:  larl  %r1,_GLOBAL_OFFSET_TABLE_;					      \
-    lg    %r1,errno@GOT(%r1);						      \
-    lcr   %r2,%r2;							      \
-    st    %r2,0(%r1);							      \
-    lghi  %r2,-1;							      \
-    br    %r14
-# endif /* _LIBC_REENTRANT */
-#endif /* PIC */
-
-/* Linux takes system call arguments in registers:
-
-	syscall number	1	     call-clobbered
-	arg 1		2	     call-clobbered
-	arg 2		3	     call-clobbered
-	arg 3		4	     call-clobbered
-	arg 4		5	     call-clobbered
-	arg 5		6	     call-saved
-	arg 6		7	     call-saved
-
-   (Of course a function with say 3 arguments does not have entries for
-   arguments 4 and 5.)
-   For system calls with 6 parameters a stack operation is required
-   to load the 6th parameter to register 7. Call saved register 7 is
-   moved to register 0 and back to avoid an additional stack frame.
- */
-
-#define DO_CALL(syscall, args)						      \
-  .if args > 5;								      \
-    lgr %r0,%r7;							      \
-    lg %r7,160(%r15);							      \
-  .endif;								      \
-    lghi %r1,SYS_ify (syscall);						      \
-    svc 0;								      \
-  .if args > 5;								      \
-    lgr %r7,%r0;							      \
-  .endif
-
-#define ret								      \
-    br	    14
-
-#define ret_NOERRNO							      \
-    br	    14
-
-#define ret_ERRVAL							      \
-    br	    14
-
-#else
-
-# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL
-# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1
-
-#endif /* __ASSEMBLER__ */
-
-#endif /* _LINUX_S390_SYSDEP_H */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S b/sysdeps/unix/sysv/linux/s390/setcontext.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S
rename to sysdeps/unix/sysv/linux/s390/setcontext.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions b/sysdeps/unix/sysv/linux/s390/shlib-versions
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions
rename to sysdeps/unix/sysv/linux/s390/shlib-versions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/single-thread.h b/sysdeps/unix/sysv/linux/s390/single-thread.h
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/single-thread.h
rename to sysdeps/unix/sysv/linux/s390/single-thread.h
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S b/sysdeps/unix/sysv/linux/s390/swapcontext.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
rename to sysdeps/unix/sysv/linux/s390/swapcontext.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/syscall.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
rename to sysdeps/unix/sysv/linux/s390/syscall.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall_cancel.S b/sysdeps/unix/sysv/linux/s390/syscall_cancel.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/syscall_cancel.S
rename to sysdeps/unix/sysv/linux/s390/syscall_cancel.S
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S b/sysdeps/unix/sysv/linux/s390/sysdep.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S
rename to sysdeps/unix/sysv/linux/s390/sysdep.S
diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.h b/sysdeps/unix/sysv/linux/s390/sysdep.h
index 593e70dc1e..42fb8aa469 100644
--- a/sysdeps/unix/sysv/linux/s390/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/sysdep.h
@@ -1,5 +1,5 @@
-/* Syscall definitions, Linux s390 version.
-   Copyright (C) 2019-2026 Free Software Foundation, Inc.
+/* Assembler macros for 64 bit S/390.
+   Copyright (C) 2001-2026 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,15 +14,163 @@
 
    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/>.  */
 
-#ifndef __ASSEMBLY__
+#ifndef _LINUX_S390_SYSDEP_H
+#define _LINUX_S390_SYSDEP_H
+
+#include <sysdeps/s390/sysdep.h>
+#include <sysdeps/unix/sysdep.h>
+#include <sysdeps/unix/sysv/linux/sysdep.h>
+#include <dl-sysdep.h>	/* For RTLD_PRIVATE_ERRNO.  */
+#include <tls.h>
+
+/* For Linux we can use the system call table in the header file
+	/usr/include/asm/unistd.h
+   of the kernel.  But these symbols do not follow the SYS_* syntax
+   so we have to redefine the `SYS_ify' macro here.  */
+/* In newer 2.1 kernels __NR_syscall is missing so we define it here.  */
+#define __NR_syscall 0
 
 #undef SYS_ify
 #define SYS_ify(syscall_name)	__NR_##syscall_name
 
-#undef INTERNAL_SYSCALL_NCS
-#define INTERNAL_SYSCALL_NCS(no, nr, args...)				      \
+#ifdef __ASSEMBLER__
+
+/* Linux uses a negative return value to indicate syscall errors, unlike
+   most Unices, which use the condition codes' carry flag.
+
+   Since version 2.1 the return value of a system call might be negative
+   even if the call succeeded.	E.g., the `lseek' system call might return
+   a large offset.  Therefore we must not anymore test for < 0, but test
+   for a real error by making sure the value in gpr2 is a real error
+   number.  Linus said he will make sure that no syscall returns a value
+   in -1 .. -4095 as a valid result so we can safely test with -4095.  */
+
+# undef PSEUDO
+# define PSEUDO(name, syscall_name, args)				      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args);					      \
+    lghi %r4,-4095 ;							      \
+    clgr %r2,%r4 ;							      \
+    jgnl SYSCALL_ERROR_LABEL
+
+# undef PSEUDO_END
+# define PSEUDO_END(name)						      \
+  SYSCALL_ERROR_HANDLER;						      \
+  END (name)
+
+# undef PSEUDO_NOERRNO
+# define PSEUDO_NOERRNO(name, syscall_name, args)			      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args)
+
+# undef PSEUDO_END_NOERRNO
+# define PSEUDO_END_NOERRNO(name)					      \
+  SYSCALL_ERROR_HANDLER;						      \
+  END (name)
+
+# undef PSEUDO_ERRVAL
+# define PSEUDO_ERRVAL(name, syscall_name, args)				      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args);					      \
+    lcgr %r2,%r2
+
+# undef PSEUDO_END_ERRVAL
+# define PSEUDO_END_ERRVAL(name)						      \
+  SYSCALL_ERROR_HANDLER;						      \
+  END (name)
+
+# undef SYSCALL_ERROR_LABEL
+# ifndef PIC
+#  undef SYSCALL_ERROR_LABEL
+#  define SYSCALL_ERROR_LABEL syscall_error
+#  define SYSCALL_ERROR_HANDLER
+# else
+#  if RTLD_PRIVATE_ERRNO
+#   undef SYSCALL_ERROR_LABEL
+#   define SYSCALL_ERROR_LABEL 0f
+#   define SYSCALL_ERROR_HANDLER \
+0:  larl  %r1,rtld_errno;						      \
+    lcr   %r2,%r2;							      \
+    st    %r2,0(%r1);							      \
+    lghi  %r2,-1;							      \
+    br    %r14
+#  elif defined _LIBC_REENTRANT
+#   if IS_IN (libc)
+#    define SYSCALL_ERROR_ERRNO __libc_errno
+#   else
+#    define SYSCALL_ERROR_ERRNO errno
+#   endif
+#   undef SYSCALL_ERROR_LABEL
+#   define SYSCALL_ERROR_LABEL 0f
+#   define SYSCALL_ERROR_HANDLER \
+0:  lcr   %r0,%r2;							      \
+    larl  %r1,SYSCALL_ERROR_ERRNO@indntpoff;				      \
+    lg    %r1,0(%r1);							      \
+    ear   %r2,%a0;							      \
+    sllg  %r2,%r2,32;							      \
+    ear   %r2,%a1;							      \
+    st    %r0,0(%r1,%r2);						      \
+    lghi   %r2,-1;							      \
+    br    %r14
+#  else
+#   undef SYSCALL_ERROR_LABEL
+#   define SYSCALL_ERROR_LABEL 0f
+#   define SYSCALL_ERROR_HANDLER \
+0:  larl  %r1,_GLOBAL_OFFSET_TABLE_;					      \
+    lg    %r1,errno@GOT(%r1);						      \
+    lcr   %r2,%r2;							      \
+    st    %r2,0(%r1);							      \
+    lghi  %r2,-1;							      \
+    br    %r14
+#  endif /* _LIBC_REENTRANT */
+# endif /* PIC */
+
+/* Linux takes system call arguments in registers:
+
+	syscall number	1	     call-clobbered
+	arg 1		2	     call-clobbered
+	arg 2		3	     call-clobbered
+	arg 3		4	     call-clobbered
+	arg 4		5	     call-clobbered
+	arg 5		6	     call-saved
+	arg 6		7	     call-saved
+
+   (Of course a function with say 3 arguments does not have entries for
+   arguments 4 and 5.)
+   For system calls with 6 parameters a stack operation is required
+   to load the 6th parameter to register 7. Call saved register 7 is
+   moved to register 0 and back to avoid an additional stack frame.
+ */
+
+# define DO_CALL(syscall, args)						      \
+  .if args > 5;								      \
+    lgr %r0,%r7;							      \
+    lg %r7,160(%r15);							      \
+  .endif;								      \
+    lghi %r1,SYS_ify (syscall);						      \
+    svc 0;								      \
+  .if args > 5;								      \
+    lgr %r7,%r0;							      \
+  .endif
+
+# define ret								      \
+    br	    14
+
+# define ret_NOERRNO							      \
+    br	    14
+
+# define ret_ERRVAL							      \
+    br	    14
+
+#else /* not __ASSEMBLER__ */
+
+# undef INTERNAL_SYSCALL_NCS
+# define INTERNAL_SYSCALL_NCS(no, nr, args...)				      \
   ({									      \
     DECLARGS_##nr(args)							      \
     register unsigned long int _nr __asm__("1") = (unsigned long int)(no);    \
@@ -34,46 +182,52 @@
 			  : "memory" );					      \
     _ret; })
 
-#undef INTERNAL_SYSCALL
-#define INTERNAL_SYSCALL(name, nr, args...)				\
+# undef INTERNAL_SYSCALL
+# define INTERNAL_SYSCALL(name, nr, args...)				\
   INTERNAL_SYSCALL_NCS(__NR_##name, nr, args)
 
-#define DECLARGS_0()
-#define DECLARGS_1(arg1) \
+# define DECLARGS_0()
+# define DECLARGS_1(arg1) \
   register unsigned long int gpr2 __asm__ ("2") = (unsigned long int)(arg1);
-#define DECLARGS_2(arg1, arg2) \
+# define DECLARGS_2(arg1, arg2) \
   DECLARGS_1(arg1) \
   register unsigned long int gpr3 __asm__ ("3") = (unsigned long int)(arg2);
-#define DECLARGS_3(arg1, arg2, arg3) \
+# define DECLARGS_3(arg1, arg2, arg3) \
   DECLARGS_2(arg1, arg2) \
   register unsigned long int gpr4 __asm__ ("4") = (unsigned long int)(arg3);
-#define DECLARGS_4(arg1, arg2, arg3, arg4) \
+# define DECLARGS_4(arg1, arg2, arg3, arg4) \
   DECLARGS_3(arg1, arg2, arg3) \
   register unsigned long int gpr5 __asm__ ("5") = (unsigned long int)(arg4);
-#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \
+# define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \
   DECLARGS_4(arg1, arg2, arg3, arg4) \
   register unsigned long int gpr6 __asm__ ("6") = (unsigned long int)(arg5);
-#define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
+# define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
   DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \
   register unsigned long int gpr7 __asm__ ("7") = (unsigned long int)(arg6);
 
-#define ASMFMT_0
-#define ASMFMT_1 , "0" (gpr2)
-#define ASMFMT_2 , "0" (gpr2), "d" (gpr3)
-#define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4)
-#define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5)
-#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
-#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
+# define ASMFMT_0
+# define ASMFMT_1 , "0" (gpr2)
+# define ASMFMT_2 , "0" (gpr2), "d" (gpr3)
+# define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4)
+# define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5)
+# define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
+# define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
 
-#define VDSO_NAME  "LINUX_2.6.29"
-#define VDSO_HASH  123718585
+# define VDSO_NAME  "LINUX_2.6.29"
+# define VDSO_HASH  123718585
 
 /* List of system calls which are supported as vsyscalls.  */
-#define HAVE_CLOCK_GETRES64_VSYSCALL	"__kernel_clock_getres"
-#define HAVE_CLOCK_GETTIME64_VSYSCALL	"__kernel_clock_gettime"
-#define HAVE_GETRANDOM_VSYSCALL		"__kernel_getrandom"
-#define HAVE_GETTIMEOFDAY_VSYSCALL	"__kernel_gettimeofday"
-#define HAVE_GETCPU_VSYSCALL		"__kernel_getcpu"
-
-#define HAVE_CLONE3_WRAPPER		1
-#endif
+# define HAVE_CLOCK_GETRES64_VSYSCALL	"__kernel_clock_getres"
+# define HAVE_CLOCK_GETTIME64_VSYSCALL	"__kernel_clock_gettime"
+# define HAVE_GETRANDOM_VSYSCALL		"__kernel_getrandom"
+# define HAVE_GETTIMEOFDAY_VSYSCALL	"__kernel_gettimeofday"
+# define HAVE_GETCPU_VSYSCALL		"__kernel_getcpu"
+
+# define HAVE_CLONE3_WRAPPER		1
+
+# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL
+# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* _LINUX_S390_SYSDEP_H */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_t_was_int_compat.h b/sysdeps/unix/sysv/linux/s390/timer_t_was_int_compat.h
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/timer_t_was_int_compat.h
rename to sysdeps/unix/sysv/linux/s390/timer_t_was_int_compat.h
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S b/sysdeps/unix/sysv/linux/s390/vfork.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
rename to sysdeps/unix/sysv/linux/s390/vfork.S
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.