about summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/Dist (renamed from sysdeps/unix/sysv/linux/s390/Dist)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/Makefile (renamed from sysdeps/unix/sysv/linux/s390/Makefile)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/Versions (renamed from sysdeps/unix/sysv/linux/s390/Versions)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c (renamed from sysdeps/unix/sysv/linux/s390/alphasort64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h (renamed from sysdeps/unix/sysv/linux/s390/bits/fcntl.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h (renamed from sysdeps/unix/sysv/linux/s390/bits/mman.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h (renamed from sysdeps/unix/sysv/linux/s390/bits/resource.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h (renamed from sysdeps/unix/sysv/linux/s390/bits/stat.h)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/chown.c (renamed from sysdeps/unix/sysv/linux/s390/chown.c)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/clone.S (renamed from sysdeps/unix/sysv/linux/s390/clone.S)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/fchown.c (renamed from sysdeps/unix/sysv/linux/s390/fchown.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c (renamed from sysdeps/unix/sysv/linux/s390/fcntl.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c (renamed from sysdeps/unix/sysv/linux/s390/fxstat.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c (renamed from sysdeps/unix/sysv/linux/s390/getdents64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getegid.c (renamed from sysdeps/unix/sysv/linux/s390/getegid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c (renamed from sysdeps/unix/sysv/linux/s390/geteuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getgid.c (renamed from sysdeps/unix/sysv/linux/s390/getgid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c (renamed from sysdeps/unix/sysv/linux/s390/getgroups.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c (renamed from sysdeps/unix/sysv/linux/s390/getresgid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c (renamed from sysdeps/unix/sysv/linux/s390/getresuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c (renamed from sysdeps/unix/sysv/linux/s390/getrlimit.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c (renamed from sysdeps/unix/sysv/linux/s390/getrlimit64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getuid.c (renamed from sysdeps/unix/sysv/linux/s390/getuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/lchown.c (renamed from sysdeps/unix/sysv/linux/s390/lchown.c)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c (renamed from sysdeps/unix/sysv/linux/s390/lockf64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c (renamed from sysdeps/unix/sysv/linux/s390/lxstat.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap.S (renamed from sysdeps/unix/sysv/linux/s390/mmap.S)4
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S (renamed from sysdeps/unix/sysv/linux/s390/mmap64.S)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c (renamed from sysdeps/unix/sysv/linux/s390/msgctl.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c (renamed from sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c (renamed from sysdeps/unix/sysv/linux/s390/readdir64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c (renamed from sysdeps/unix/sysv/linux/s390/readdir64_r.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h (renamed from sysdeps/unix/sysv/linux/s390/register-dump.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c (renamed from sysdeps/unix/sysv/linux/s390/scandir64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/semctl.c (renamed from sysdeps/unix/sysv/linux/s390/semctl.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setegid.c (renamed from sysdeps/unix/sysv/linux/s390/setegid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c (renamed from sysdeps/unix/sysv/linux/s390/seteuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c (renamed from sysdeps/unix/sysv/linux/s390/setfsgid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c (renamed from sysdeps/unix/sysv/linux/s390/setfsuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setgid.c (renamed from sysdeps/unix/sysv/linux/s390/setgid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c (renamed from sysdeps/unix/sysv/linux/s390/setgroups.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setregid.c (renamed from sysdeps/unix/sysv/linux/s390/setregid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c (renamed from sysdeps/unix/sysv/linux/s390/setresgid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c (renamed from sysdeps/unix/sysv/linux/s390/setresuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c (renamed from sysdeps/unix/sysv/linux/s390/setreuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c (renamed from sysdeps/unix/sysv/linux/s390/setrlimit.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/setuid.c (renamed from sysdeps/unix/sysv/linux/s390/setuid.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c (renamed from sysdeps/unix/sysv/linux/s390/shmctl.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/socket.S (renamed from sysdeps/unix/sysv/linux/s390/socket.S)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h (renamed from sysdeps/unix/sysv/linux/s390/sys/procfs.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h (renamed from sysdeps/unix/sysv/linux/s390/sys/ucontext.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/syscall.S (renamed from sysdeps/unix/sysv/linux/s390/syscall.S)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list (renamed from sysdeps/unix/sysv/linux/s390/syscalls.list)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S (renamed from sysdeps/unix/sysv/linux/s390/sysdep.S)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (renamed from sysdeps/unix/sysv/linux/s390/sysdep.h)2
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c (renamed from sysdeps/unix/sysv/linux/s390/versionsort64.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/xstat.c (renamed from sysdeps/unix/sysv/linux/s390/xstat.c)0
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/Dist4
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/Makefile8
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h34
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h174
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h78
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h94
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h68
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h196
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h85
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h87
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h72
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h297
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h59
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h107
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h115
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/clone.S55
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c42
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/getdents.c4
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/glob.c7
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/glob64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h46
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c42
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/mmap.S67
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/pread64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/readdir.c7
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c4
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h133
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c50
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c41
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c44
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c39
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/socket.S99
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h118
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h77
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/syscall.S52
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list55
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S90
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h164
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/xstat.c42
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c1
110 files changed, 2788 insertions, 16 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/Dist b/sysdeps/unix/sysv/linux/s390/s390-32/Dist
index d0740c12f9..d0740c12f9 100644
--- a/sysdeps/unix/sysv/linux/s390/Dist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Dist
diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
index 2115e40a2a..2115e40a2a 100644
--- a/sysdeps/unix/sysv/linux/s390/Makefile
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
diff --git a/sysdeps/unix/sysv/linux/s390/Versions b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
index 5a56361b60..5a56361b60 100644
--- a/sysdeps/unix/sysv/linux/s390/Versions
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
diff --git a/sysdeps/unix/sysv/linux/s390/alphasort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c
index 0b5ae47d2f..0b5ae47d2f 100644
--- a/sysdeps/unix/sysv/linux/s390/alphasort64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c
diff --git a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h
index a6a2e131da..0ae79d7adc 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h
@@ -1,5 +1,5 @@
 /* O_*, F_*, FD_* bit values for Linux.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h
index 70069e9f06..d7fc58a915 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h
@@ -1,5 +1,5 @@
 /* Definitions for POSIX memory map interface.  Linux/s390 version.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/bits/resource.h b/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h
index 8dd3972a4b..b04764e6bf 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/resource.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h
@@ -1,5 +1,5 @@
 /* Bit values & structures for resource limits.  Linux version.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/bits/stat.h b/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h
index a40159b023..a40159b023 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h
diff --git a/sysdeps/unix/sysv/linux/s390/chown.c b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
index 0e22192858..682f2dd01e 100644
--- a/sysdeps/unix/sysv/linux/s390/chown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/clone.S b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
index bde800d3b2..433246fc2e 100644
--- a/sysdeps/unix/sysv/linux/s390/clone.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
 
    The GNU C Library is free software; you can redistribute it and/or
diff --git a/sysdeps/unix/sysv/linux/s390/fchown.c b/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c
index 3a69ecc9e7..3a69ecc9e7 100644
--- a/sysdeps/unix/sysv/linux/s390/fchown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c
diff --git a/sysdeps/unix/sysv/linux/s390/fcntl.c b/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
index ea951bc4f9..ea951bc4f9 100644
--- a/sysdeps/unix/sysv/linux/s390/fcntl.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
diff --git a/sysdeps/unix/sysv/linux/s390/fxstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c
index 4f219f0b9d..4f219f0b9d 100644
--- a/sysdeps/unix/sysv/linux/s390/fxstat.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c
diff --git a/sysdeps/unix/sysv/linux/s390/getdents64.c b/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c
index 0c75fb5a06..0c75fb5a06 100644
--- a/sysdeps/unix/sysv/linux/s390/getdents64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c
diff --git a/sysdeps/unix/sysv/linux/s390/getegid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c
index 37b4b4a530..37b4b4a530 100644
--- a/sysdeps/unix/sysv/linux/s390/getegid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getegid.c
diff --git a/sysdeps/unix/sysv/linux/s390/geteuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c
index ebcb555b5e..ebcb555b5e 100644
--- a/sysdeps/unix/sysv/linux/s390/geteuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/getgid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c
index 0a4d6061f0..0a4d6061f0 100644
--- a/sysdeps/unix/sysv/linux/s390/getgid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getgid.c
diff --git a/sysdeps/unix/sysv/linux/s390/getgroups.c b/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c
index 20a7166103..20a7166103 100644
--- a/sysdeps/unix/sysv/linux/s390/getgroups.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c
diff --git a/sysdeps/unix/sysv/linux/s390/getresgid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c
index b703a414cc..b703a414cc 100644
--- a/sysdeps/unix/sysv/linux/s390/getresgid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c
diff --git a/sysdeps/unix/sysv/linux/s390/getresuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c
index 0b14cefe34..0b14cefe34 100644
--- a/sysdeps/unix/sysv/linux/s390/getresuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/getrlimit.c b/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c
index fc06dbd641..fc06dbd641 100644
--- a/sysdeps/unix/sysv/linux/s390/getrlimit.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c
diff --git a/sysdeps/unix/sysv/linux/s390/getrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c
index fef018f471..fef018f471 100644
--- a/sysdeps/unix/sysv/linux/s390/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c
diff --git a/sysdeps/unix/sysv/linux/s390/getuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c
index d682c79a49..d682c79a49 100644
--- a/sysdeps/unix/sysv/linux/s390/getuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/lchown.c b/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
index 8ca77fc037..acee703b9f 100644
--- a/sysdeps/unix/sysv/linux/s390/lchown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/lockf64.c b/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c
index a88f5a784a..a88f5a784a 100644
--- a/sysdeps/unix/sysv/linux/s390/lockf64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c
diff --git a/sysdeps/unix/sysv/linux/s390/lxstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c
index 0efa0aea49..0efa0aea49 100644
--- a/sysdeps/unix/sysv/linux/s390/lxstat.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c
diff --git a/sysdeps/unix/sysv/linux/s390/mmap.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
index f9650e9f03..f101408bf5 100644
--- a/sysdeps/unix/sysv/linux/s390/mmap.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -19,7 +19,7 @@
 
 #include <sysdep.h>
 
-#define EINVAL  22
+#define EINVAL	22
 
 	.text
 ENTRY(__mmap)
diff --git a/sysdeps/unix/sysv/linux/s390/mmap64.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
index b42ff6f22c..f53fe4cc5d 100644
--- a/sysdeps/unix/sysv/linux/s390/mmap64.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/msgctl.c b/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c
index 9f9b8431a3..9f9b8431a3 100644
--- a/sysdeps/unix/sysv/linux/s390/msgctl.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c
diff --git a/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c
index 4c27e957bf..4c27e957bf 100644
--- a/sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c
diff --git a/sysdeps/unix/sysv/linux/s390/readdir64.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c
index 2ea26dd409..2ea26dd409 100644
--- a/sysdeps/unix/sysv/linux/s390/readdir64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c
diff --git a/sysdeps/unix/sysv/linux/s390/readdir64_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c
index 9f54f897e3..9f54f897e3 100644
--- a/sysdeps/unix/sysv/linux/s390/readdir64_r.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c
diff --git a/sysdeps/unix/sysv/linux/s390/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h
index 3c859aae88..0bd95991a4 100644
--- a/sysdeps/unix/sysv/linux/s390/register-dump.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h
@@ -1,5 +1,5 @@
 /* Dump registers.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/scandir64.c b/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c
index 506fd8877c..506fd8877c 100644
--- a/sysdeps/unix/sysv/linux/s390/scandir64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c
diff --git a/sysdeps/unix/sysv/linux/s390/semctl.c b/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c
index e9b1a483c9..e9b1a483c9 100644
--- a/sysdeps/unix/sysv/linux/s390/semctl.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/semctl.c
diff --git a/sysdeps/unix/sysv/linux/s390/setegid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c
index 2e3a54c893..2e3a54c893 100644
--- a/sysdeps/unix/sysv/linux/s390/setegid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setegid.c
diff --git a/sysdeps/unix/sysv/linux/s390/seteuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c
index 18e41d08c1..18e41d08c1 100644
--- a/sysdeps/unix/sysv/linux/s390/seteuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setfsgid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c
index 0886712569..0886712569 100644
--- a/sysdeps/unix/sysv/linux/s390/setfsgid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setfsuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c
index a9f22eb8ab..a9f22eb8ab 100644
--- a/sysdeps/unix/sysv/linux/s390/setfsuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setgid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c
index 377021d9ec..377021d9ec 100644
--- a/sysdeps/unix/sysv/linux/s390/setgid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setgid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setgroups.c b/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c
index 0e7086278f..0e7086278f 100644
--- a/sysdeps/unix/sysv/linux/s390/setgroups.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c
diff --git a/sysdeps/unix/sysv/linux/s390/setregid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c
index 99c57ad20f..99c57ad20f 100644
--- a/sysdeps/unix/sysv/linux/s390/setregid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setregid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setresgid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c
index daca1a4833..daca1a4833 100644
--- a/sysdeps/unix/sysv/linux/s390/setresgid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setresuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c
index 3aeabe9ad7..3aeabe9ad7 100644
--- a/sysdeps/unix/sysv/linux/s390/setresuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setreuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c
index 8ad61226e9..8ad61226e9 100644
--- a/sysdeps/unix/sysv/linux/s390/setreuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/setrlimit.c b/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c
index bfaef74c38..bfaef74c38 100644
--- a/sysdeps/unix/sysv/linux/s390/setrlimit.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c
diff --git a/sysdeps/unix/sysv/linux/s390/setuid.c b/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c
index c8fa23e354..c8fa23e354 100644
--- a/sysdeps/unix/sysv/linux/s390/setuid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/setuid.c
diff --git a/sysdeps/unix/sysv/linux/s390/shmctl.c b/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c
index 7eac6380dd..7eac6380dd 100644
--- a/sysdeps/unix/sysv/linux/s390/shmctl.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c
diff --git a/sysdeps/unix/sysv/linux/s390/socket.S b/sysdeps/unix/sysv/linux/s390/s390-32/socket.S
index 562b98f933..9bed2f7db5 100644
--- a/sysdeps/unix/sysv/linux/s390/socket.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/socket.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/sys/procfs.h b/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h
index 8b60338cdb..968d0855da 100644
--- a/sysdeps/unix/sysv/linux/s390/sys/procfs.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 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
diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
index b9ec8069b0..cb1869c8f6 100644
--- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
index dbd8d6887c..5a0674ad15 100644
--- a/sysdeps/unix/sysv/linux/s390/syscall.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
index 913f051ff4..913f051ff4 100644
--- a/sysdeps/unix/sysv/linux/s390/syscalls.list
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S
index 5515c0f9ce..15b822a4eb 100644
--- a/sysdeps/unix/sysv/linux/s390/sysdep.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
diff --git a/sysdeps/unix/sysv/linux/s390/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
index 099ce3d176..507867b727 100644
--- a/sysdeps/unix/sysv/linux/s390/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
@@ -20,7 +20,7 @@
 #ifndef _LINUX_S390_SYSDEP_H
 #define _LINUX_S390_SYSDEP_H
 
-#include <sysdeps/s390/sysdep.h>
+#include <sysdeps/s390/s390-32/sysdep.h>
 #include <sysdeps/unix/sysdep.h>
 
 /* For Linux we can use the system call table in the header file
diff --git a/sysdeps/unix/sysv/linux/s390/versionsort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c
index 144b691e56..144b691e56 100644
--- a/sysdeps/unix/sysv/linux/s390/versionsort64.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c
diff --git a/sysdeps/unix/sysv/linux/s390/xstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c
index e9869f5508..e9869f5508 100644
--- a/sysdeps/unix/sysv/linux/s390/xstat.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Dist b/sysdeps/unix/sysv/linux/s390/s390-64/Dist
new file mode 100644
index 0000000000..fe5ca68f09
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/Dist
@@ -0,0 +1,4 @@
+clone.S
+sys/elf.h
+sys/procfs.h
+sys/user.h
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
new file mode 100644
index 0000000000..0217d83a6c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile
@@ -0,0 +1,8 @@
+ifeq ($(subdir),csu)
+CFLAGS-initfini.s += -DWEAK_GMON_START
+endif
+
+ifeq ($(subdir),misc)
+sysdep_routines += setfsgid setfsuid setresgid setresuid
+sysdep_headers += sys/elf.h
+endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h
new file mode 100644
index 0000000000..73034d5926
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This file specifies the native word size of the machine, which indicates
+   the ELF file class used for executables and shared objects on this
+   machine.  */
+
+#ifndef _LINK_H
+# error "Never use <bits/elfclass.h> directly; include <link.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __ELF_NATIVE_CLASS __WORDSIZE
+
+/* 64 bit Linux for S/390 is exceptional as it has .hash section with
+   64 bit entries.  */
+typedef uint64_t Elf_Symndx;
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h
new file mode 100644
index 0000000000..d92df75f37
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h
@@ -0,0 +1,174 @@
+/* O_*, F_*, FD_* bit values for Linux for 64 bit S/390.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+
+#include <sys/types.h>
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+   located on an ext2 file system */
+#define O_ACCMODE	  0003
+#define O_RDONLY	    00
+#define O_WRONLY	    01
+#define O_RDWR		    02
+#define O_CREAT		  0100	/* not fcntl */
+#define O_EXCL		  0200	/* not fcntl */
+#define O_NOCTTY	  0400	/* not fcntl */
+#define O_TRUNC		 01000	/* not fcntl */
+#define O_APPEND	 02000
+#define O_NONBLOCK	 04000
+#define O_NDELAY	O_NONBLOCK
+#define O_SYNC		010000
+#define O_FSYNC		O_SYNC
+#define O_ASYNC		020000
+#define O_DIRECT	040000
+
+#ifdef __USE_GNU
+# define O_DIRECTORY	0200000	/* must be a directory */
+# define O_NOFOLLOW	0400000 /* don't follow links */
+#endif
+
+#ifdef __USE_LARGEFILE64
+/* Not necessary, files are always with 64bit off_t.  */
+# define O_LARGEFILE	0
+#endif
+
+/* For now Linux has synchronisity options for data and read operations.
+   We define the symbols here but let them do the same as O_SYNC since
+   this is a superset.	*/
+#if defined __USE_POSIX199309 || defined __USE_UNIX98
+# define O_DSYNC	O_SYNC	/* Synchronize data.  */
+# define O_RSYNC	O_SYNC	/* Synchronize read operations.	 */
+#endif
+
+/* Values for the second argument to `fcntl'.  */
+#define F_DUPFD		0	/* Duplicate file descriptor.  */
+#define F_GETFD		1	/* Get file descriptor flags.  */
+#define F_SETFD		2	/* Set file descriptor flags.  */
+#define F_GETFL		3	/* Get file status flags.  */
+#define F_SETFL		4	/* Set file status flags.  */
+#define F_GETLK		5	/* Get record locking info.  */
+#define F_SETLK		6	/* Set record locking info (non-blocking).  */
+#define F_SETLKW	7	/* Set record locking info (blocking).	*/
+
+/* Not necessary, we always have 64-bit offsets.  */
+#define F_GETLK64	5	/* Get record locking info.  */
+#define F_SETLK64	6	/* Set record locking info (non-blocking).  */
+#define F_SETLKW64	7	/* Set record locking info (blocking).	*/
+
+#if defined __USE_BSD || defined __USE_XOPEN2K
+# define F_SETOWN	8	/* Get owner of socket (receiver of SIGIO).  */
+# define F_GETOWN	9	/* Set owner of socket (receiver of SIGIO).  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETSIG	10	/* Set number of signal to be sent.  */
+# define F_GETSIG	11	/* Get number of signal to be sent.  */
+#endif
+
+#ifdef __USE_GNU
+# define F_SETLEASE	1024	/* Set a lease.	 */
+# define F_GETLEASE	1025	/* Enquire what lease is active.  */
+# define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+#endif
+
+/* For F_[GET|SET]FL.  */
+#define FD_CLOEXEC	1	/* actually anything with low bit set goes */
+
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK		0	/* Read lock.  */
+#define F_WRLCK		1	/* Write lock.	*/
+#define F_UNLCK		2	/* Remove lock.	 */
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK		4	/* or 3 */
+#define F_SHLCK		8	/* or 4 */
+
+#ifdef __USE_BSD
+/* Operations for bsd flock(), also used by the kernel implementation */
+# define LOCK_SH	1	/* shared lock */
+# define LOCK_EX	2	/* exclusive lock */
+# define LOCK_NB	4	/* or'd with one of the above to prevent
+				   blocking */
+# define LOCK_UN	8	/* remove lock */
+#endif
+
+#ifdef __USE_GNU
+# define LOCK_MAND	32	/* This is a mandatory flock:	*/
+# define LOCK_READ	64	/* ... which allows concurrent read operations.	 */
+# define LOCK_WRITE	128	/* ... which allows concurrent write operations.  */
+# define LOCK_RW	192	/* ... Which allows concurrent read & write operations.	 */
+#endif
+
+
+#ifdef __USE_GNU
+/* Types of directory notifications that may be requested with F_NOTIFY.  */
+# define DN_ACCESS	0x00000001	/* File accessed.  */
+# define DN_MODIFY	0x00000002	/* File modified.  */
+# define DN_CREATE	0x00000004	/* File created.  */
+# define DN_DELETE	0x00000008	/* File removed.  */
+# define DN_RENAME	0x00000010	/* File renamed.  */
+# define DN_ATTRIB	0x00000020	/* File changed attibutes.  */
+# define DN_MULTISHOT	0x80000000	/* Don't remove notifier.  */
+#endif
+
+/* We don't need to support __USE_FILE_OFFSET64.  */
+struct flock
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.	*/
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.	*/
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start;	/* Offset where the lock begins.  */
+    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+#endif
+
+
+/* Define some more compatibility macros to be backward compatible with
+   BSD systems which did not managed to hide these kernel macros.  */
+#ifdef	__USE_BSD
+# define FAPPEND	O_APPEND
+# define FFSYNC		O_FSYNC
+# define FASYNC		O_ASYNC
+# define FNONBLOCK	O_NONBLOCK
+# define FNDELAY	O_NDELAY
+#endif /* Use BSD.  */
+
+/* Advise to `posix_fadvise'.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_FADV_NORMAL	0 /* No further special treatment.  */
+# define POSIX_FADV_RANDOM	1 /* Expect random page references.  */
+# define POSIX_FADV_SEQUENTIAL	2 /* Expect sequential page references.	 */
+# define POSIX_FADV_WILLNEED	3 /* Will need these pages.  */
+# define POSIX_FADV_DONTNEED	6 /* Don't need these pages.  */
+# define POSIX_FADV_NOREUSE	7 /* Data will be accessed once.  */
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h
new file mode 100644
index 0000000000..4354cb6598
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h
@@ -0,0 +1,78 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_IPC_H
+# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT	01000		/* Create key if key does not exist. */
+#define IPC_EXCL	02000		/* Fail if key exists.	*/
+#define IPC_NOWAIT	04000		/* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID	0		/* Remove identifier.  */
+#define IPC_SET		1		/* Set `ipc_perm' options.  */
+#define IPC_STAT	2		/* Get `ipc_perm' options.  */
+#ifdef __USE_GNU
+#define IPC_INFO	3		/* See ipcs.  */
+#endif
+
+/* Special key values.	*/
+#define IPC_PRIVATE	((__key_t) 0)	/* Private key.	 */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;			/* Key.	 */
+    __uid_t uid;			/* Owner's user ID.  */
+    __gid_t gid;			/* Owner's group ID.  */
+    __uid_t cuid;			/* Creator's user ID.  */
+    __gid_t cgid;			/* Creator's group ID.	*/
+    __mode_t mode;			/* Read/write permission.  */
+    unsigned short int __seq;		/* Sequence number.  */
+    unsigned short int __pad1;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+  };
+
+
+
+__BEGIN_DECLS
+
+/* The actual system call: all functions are multiplexed by this.  */
+extern int __ipc __P ((int __call, int __first, int __second, int __third,
+		       void *__ptr));
+
+__END_DECLS
+
+/* The codes for the functions to use the multiplexer `__ipc'.	*/
+#define IPCOP_semop	 1
+#define IPCOP_semget	 2
+#define IPCOP_semctl	 3
+#define IPCOP_msgsnd	11
+#define IPCOP_msgrcv	12
+#define IPCOP_msgget	13
+#define IPCOP_msgctl	14
+#define IPCOP_shmat	21
+#define IPCOP_shmdt	22
+#define IPCOP_shmget	23
+#define IPCOP_shmctl	24
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h
new file mode 100644
index 0000000000..83797750bb
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h
@@ -0,0 +1,94 @@
+/* Definitions for POSIX memory map interface.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ	  0x1		/* Page can be read.  */
+#define PROT_WRITE	  0x2		/* Page can be written.	 */
+#define PROT_EXEC	  0x4		/* Page can be executed.  */
+#define PROT_NONE	  0x0		/* Page can not be accessed.  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED	  0x01		/* Share changes.  */
+#define MAP_PRIVATE	  0x02		/* Changes are private.	 */
+#ifdef __USE_MISC
+# define MAP_TYPE	  0x0f		/* Mask for type of mapping.  */
+#endif
+
+/* Other flags.	 */
+#define MAP_FIXED	  0x10		/* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE	  0
+# define MAP_ANONYMOUS	  0x20		/* Don't use a file.  */
+# define MAP_ANON	  MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN	  0x0100	/* Stack-like segment.	*/
+# define MAP_GROWSUP	  0x0200	/* Register stack-like segment */
+# define MAP_DENYWRITE	  0x0800	/* ETXTBSY */
+# define MAP_EXECUTABLE	  0x1000	/* Mark it as an executable.  */
+# define MAP_LOCKED	  0x2000	/* Lock the mapping.  */
+# define MAP_NORESERVE	  0x4000	/* Don't check for reservations.  */
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC	  0x1		/* Sync memory asynchronously.	*/
+#define MS_SYNC		  0x4		/* Synchronous memory sync.  */
+#define MS_INVALIDATE	  0x2		/* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT	  0x1		/* Lock all currently mapped pages.  */
+#define MCL_FUTURE	  0x2		/* Lock all additions to address
+					   space.  */
+
+/* Flags for `mremap'.	*/
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE	1
+#endif
+
+/* Advice to `madvise'.	 */
+#ifdef __USE_BSD
+# define MADV_NORMAL	 0	/* No further special treatment.  */
+# define MADV_RANDOM	 1	/* Expect random page references.  */
+# define MADV_SEQUENTIAL 2	/* Expect sequential page references.  */
+# define MADV_WILLNEED	 3	/* Will need these pages.  */
+# define MADV_DONTNEED	 4	/* Don't need these pages.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.	 */
+# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
+#endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h
new file mode 100644
index 0000000000..0d43633805
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h
@@ -0,0 +1,68 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MSG_H
+#error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Define options for message queue functions.	*/
+#define MSG_NOERROR	010000	/* no error if message is too big */
+#define MSG_EXCEPT	020000	/* recv any msg except of specified type */
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct __msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  __time_t msg_stime;		/* time of last msgsnd command */
+  __time_t msg_rtime;		/* time of last msgrcv command */
+  __time_t msg_ctime;		/* time of last change */
+  unsigned long int __msg_cbytes;	/* current number of bytes on queue */
+  unsigned long int msg_qnum;	/* number of messages currently on queue */
+  unsigned long int msg_qbytes;	/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long int __unused1;
+  unsigned long int __unused2;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes	__msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h
new file mode 100644
index 0000000000..791c7b8f87
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h
@@ -0,0 +1,196 @@
+/* Bit values & structures for resource limits.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_RESOURCE_H
+# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Transmute defines to enumerations.  The macro re-definitions are
+   necessary because some programs want to test for operating system
+   features with #ifdef RUSAGE_SELF.  In ISO C the reflexive
+   definition is a no-op.  */
+
+/* Kinds of resource limit.  */
+enum __rlimit_resource
+{
+  /* Per-process CPU limit, in seconds.	 */
+  RLIMIT_CPU = 0,
+#define RLIMIT_CPU RLIMIT_CPU
+
+  /* Largest file that can be created, in bytes.  */
+  RLIMIT_FSIZE = 1,
+#define	RLIMIT_FSIZE RLIMIT_FSIZE
+
+  /* Maximum size of data segment, in bytes.  */
+  RLIMIT_DATA = 2,
+#define	RLIMIT_DATA RLIMIT_DATA
+
+  /* Maximum size of stack segment, in bytes.  */
+  RLIMIT_STACK = 3,
+#define	RLIMIT_STACK RLIMIT_STACK
+
+  /* Largest core file that can be created, in bytes.  */
+  RLIMIT_CORE = 4,
+#define	RLIMIT_CORE RLIMIT_CORE
+
+  /* Largest resident set size, in bytes.
+     This affects swapping; processes that are exceeding their
+     resident set size will be more likely to have physical memory
+     taken from them.  */
+  RLIMIT_RSS = 5,
+#define	RLIMIT_RSS RLIMIT_RSS
+
+  /* Number of processes.  */
+  RLIMIT_NPROC = 6,
+#define RLIMIT_NPROC RLIMIT_NPROC
+
+  /* Number of open files.  */
+  RLIMIT_NOFILE = 7,
+  RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same.  */
+#define RLIMIT_NOFILE RLIMIT_NOFILE
+#define RLIMIT_OFILE RLIMIT_OFILE
+
+  /* Locked-in-memory address space.  */
+  RLIMIT_MEMLOCK = 8,
+#define RLIMIT_MEMLOCK RLIMIT_MEMLOCK
+
+  /* Address space limit (?) */
+  RLIMIT_AS = 9,
+#define RLIMIT_AS RLIMIT_AS
+
+  RLIM_NLIMITS = 10
+#define RLIMIT_NLIMITS RLIMIT_NLIMITS
+#define RLIM_NLIMITS RLIM_NLIMITS
+};
+
+/* Value to indicate that there is no limit.  */
+# define RLIM_INFINITY ~0UL
+
+#ifdef __USE_LARGEFILE64
+# define RLIM64_INFINITY ~0UL
+#endif
+
+/* We can represent all limits.	 */
+#define RLIM_SAVED_MAX	RLIM_INFINITY
+#define RLIM_SAVED_CUR	RLIM_INFINITY
+
+
+/* Type for resource quantity measurement.  */
+typedef __rlim64_t rlim_t;
+#ifdef __USE_LARGEFILE64
+typedef __rlim64_t rlim64_t;
+#endif
+
+struct rlimit
+  {
+    /* The current (soft) limit.  */
+    rlim_t rlim_cur;
+    /* The hard limit.	*/
+    rlim_t rlim_max;
+  };
+
+#ifdef __USE_LARGEFILE64
+struct rlimit64
+  {
+    /* The current (soft) limit.  */
+    rlim64_t rlim_cur;
+    /* The hard limit.	*/
+    rlim64_t rlim_max;
+ };
+#endif
+
+/* Whose usage statistics do you want?	*/
+enum __rusage_who
+{
+  /* The calling process.  */
+  RUSAGE_SELF = 0,
+#define RUSAGE_SELF RUSAGE_SELF
+
+  /* All of its terminated child processes.  */
+  RUSAGE_CHILDREN = -1,
+#define RUSAGE_CHILDREN RUSAGE_CHILDREN
+
+  /* Both.  */
+  RUSAGE_BOTH = -2
+#define RUSAGE_BOTH RUSAGE_BOTH
+};
+
+#define __need_timeval
+#include <bits/time.h>		/* For `struct timeval'.  */
+
+/* Structure which says how much of each resource has been used.  */
+struct rusage
+  {
+    /* Total amount of user time used.	*/
+    struct timeval ru_utime;
+    /* Total amount of system time used.  */
+    struct timeval ru_stime;
+    /* Maximum resident set size (in kilobytes).  */
+    long int ru_maxrss;
+    /* Amount of sharing of text segment memory
+       with other processes (kilobyte-seconds).	 */
+    long int ru_ixrss;
+    /* Amount of data segment memory used (kilobyte-seconds).  */
+    long int ru_idrss;
+    /* Amount of stack memory used (kilobyte-seconds).	*/
+    long int ru_isrss;
+    /* Number of soft page faults (i.e. those serviced by reclaiming
+       a page from the list of pages awaiting reallocation.  */
+    long int ru_minflt;
+    /* Number of hard page faults (i.e. those that required I/O).  */
+    long int ru_majflt;
+    /* Number of times a process was swapped out of physical memory.  */
+    long int ru_nswap;
+    /* Number of input operations via the file system.	Note: This
+       and `ru_oublock' do not include operations with the cache.  */
+    long int ru_inblock;
+    /* Number of output operations via the file system.	 */
+    long int ru_oublock;
+    /* Number of IPC messages sent.  */
+    long int ru_msgsnd;
+    /* Number of IPC messages received.	 */
+    long int ru_msgrcv;
+    /* Number of signals delivered.  */
+    long int ru_nsignals;
+    /* Number of voluntary context switches, i.e. because the process
+       gave up the process before it had to (usually to wait for some
+       resource to be available).  */
+    long int ru_nvcsw;
+    /* Number of involuntary context switches, i.e. a higher priority process
+       became runnable or the current process used up its time slice.  */
+    long int ru_nivcsw;
+  };
+
+/* Priority limits.  */
+#define PRIO_MIN	-20	/* Minimum priority a process can have.	 */
+#define PRIO_MAX	20	/* Maximum priority a process can have.	 */
+
+/* The type of the WHICH argument to `getpriority' and `setpriority',
+   indicating what flavor of entity the WHO argument specifies.	 */
+enum __priority_which
+{
+  PRIO_PROCESS = 0,		/* WHO is a process ID.	 */
+#define PRIO_PROCESS PRIO_PROCESS
+  PRIO_PGRP = 1,		/* WHO is a process group ID.  */
+#define PRIO_PGRP PRIO_PGRP
+  PRIO_USER = 2			/* WHO is a user ID.  */
+#define PRIO_USER PRIO_USER
+};
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h
new file mode 100644
index 0000000000..091925638a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h
@@ -0,0 +1,85 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO	0x1000		/* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID		11		/* get sempid */
+#define GETVAL		12		/* get semval */
+#define GETALL		13		/* get all semval's */
+#define GETNCNT		14		/* get semncnt */
+#define GETZCNT		15		/* get semzcnt */
+#define SETVAL		16		/* set semval */
+#define SETALL		17		/* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;			/* last semop() time */
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+  unsigned long int __unused1;
+  unsigned long int __unused2;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;				<= value for SETVAL
+     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;		<= array for GETALL & SETALL
+     struct seminfo *__buf;		<= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED	1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct	seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h
new file mode 100644
index 0000000000..3b39b64171
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h
@@ -0,0 +1,87 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Permission flag for shmget.	*/
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;		/* operation permission struct */
+    size_t shm_segsz;			/* size of segment in bytes */
+    __time_t shm_atime;			/* time of last shmat() */
+    __time_t shm_dtime;			/* time of last shmdt() */
+    __time_t shm_ctime;			/* time of last change by shmctl() */
+    __pid_t shm_cpid;			/* pid of creator */
+    __pid_t shm_lpid;			/* pid of last shmop */
+    unsigned long int shm_nattch;	/* number of current attaches */
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT	13
+# define SHM_INFO	14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST	01000	/* segment will be destroyed on last detach */
+# define SHM_LOCKED	02000	/* segment will not be swapped */
+
+struct	shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot;	/* total allocated shm */
+    unsigned long int shm_rss;	/* total resident shm */
+    unsigned long int shm_swp;	/* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h
new file mode 100644
index 0000000000..5b96272c9f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h
@@ -0,0 +1,72 @@
+/* Definitions for 64 bit S/390 sigaction.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SIGNAL_H
+# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
+#endif
+
+/* Structure describing the action to be taken when a signal arrives.  */
+struct sigaction
+  {
+    /* Signal handler.	*/
+#ifdef __USE_POSIX199309
+    union
+      {
+	/* Used if SA_SIGINFO is not set.  */
+	__sighandler_t sa_handler;
+	/* Used if SA_SIGINFO is set.  */
+	void (*sa_sigaction) (int, siginfo_t *, void *);
+      }
+    __sigaction_handler;
+# define sa_handler	__sigaction_handler.sa_handler
+# define sa_sigaction	__sigaction_handler.sa_sigaction
+#else
+    __sighandler_t sa_handler;
+#endif
+
+    /* Special flags.  */
+    unsigned long int sa_flags;
+
+    /* Additional set of signals to be blocked.	 */
+    __sigset_t sa_mask;
+  };
+
+/* Bits in `sa_flags'.	*/
+#define SA_NOCLDSTOP  0x00000001 /* Don't send SIGCHLD when children stop.  */
+#define SA_SIGINFO    0x00000004
+#ifdef __USE_MISC
+# define SA_ONSTACK   0x08000000 /* Use signal stack by using `sa_restorer'. */
+# define SA_RESTART   0x10000000 /* Restart syscall on signal return.  */
+# define SA_NODEFER   0x40000000 /* Don't automatically block the signal
+				    when its handler is being executed.	 */
+# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler.  */
+#endif
+#ifdef __USE_MISC
+# define SA_INTERRUPT 0x20000000 /* Historic no-op.  */
+
+/* Some aliases for the SA_ constants.	*/
+# define SA_NOMASK    SA_NODEFER
+# define SA_ONESHOT   SA_RESETHAND
+# define SA_STACK     SA_ONSTACK
+#endif
+
+/* Values for the HOW argument to `sigprocmask'.  */
+#define SIG_BLOCK	   0	/* for blocking signals */
+#define SIG_UNBLOCK	   1	/* for unblocking signals */
+#define SIG_SETMASK	   2	/* for setting the signal mask */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h
new file mode 100644
index 0000000000..90e860c269
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h
@@ -0,0 +1,297 @@
+/* siginfo_t, sigevent and constants.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#if !defined _SIGNAL_H && !defined __need_siginfo_t \
+    && !defined __need_sigevent_t
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#if (!defined __have_sigval_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t \
+         || defined __need_sigevent_t))
+# define __have_sigval_t	1
+
+/* Type for data associated with a signal.  */
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+#endif
+
+#if (!defined __have_siginfo_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t))
+# define __have_siginfo_t	1
+
+# define __SI_MAX_SIZE	   128
+# define __SI_PAD_SIZE	   ((__SI_MAX_SIZE / sizeof (int)) - 4)
+
+typedef struct siginfo
+  {
+    int si_signo;		/* Signal number.  */
+    int si_errno;		/* If non-zero, an errno value associated with
+				   this signal, as defined in <errno.h>.  */
+    int si_code;		/* Signal code.	 */
+
+    union
+      {
+	int _pad[__SI_PAD_SIZE];
+
+	 /* kill().  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Sending process ID.	*/
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	  } _kill;
+
+	/* POSIX.1b timers.  */
+	struct
+	  {
+	    unsigned int _timer1;
+	    unsigned int _timer2;
+	  } _timer;
+
+	/* POSIX.1b signals.  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Sending process ID.	*/
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	    sigval_t si_sigval;	/* Signal value.  */
+	  } _rt;
+
+	/* SIGCHLD.  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Which child.	 */
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	    int si_status;	/* Exit value or signal.  */
+	    __clock_t si_utime;
+	    __clock_t si_stime;
+	  } _sigchld;
+
+	/* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+	struct
+	  {
+	    void *si_addr;	/* Faulting insn/memory ref.  */
+            int si_trapno;
+	  } _sigfault;
+
+	/* SIGPOLL.  */
+	struct
+	  {
+	    long int si_band;	/* Band event for SIGPOLL.  */
+	    int si_fd;
+	  } _sigpoll;
+      } _sifields;
+  } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names.  */
+# define si_pid		_sifields._kill.si_pid
+# define si_uid		_sifields._kill.si_uid
+# define si_timer1	_sifields._timer._timer1
+# define si_timer2	_sifields._timer._timer2
+# define si_status	_sifields._sigchld.si_status
+# define si_utime	_sifields._sigchld.si_utime
+# define si_stime	_sifields._sigchld.si_stime
+# define si_value	_sifields._rt.si_sigval
+# define si_int		_sifields._rt.si_sigval.sival_int
+# define si_ptr		_sifields._rt.si_sigval.sival_ptr
+# define si_addr	_sifields._sigfault.si_addr
+# define si_trapno	_sifields._sigfault.si_trapno
+# define si_band	_sifields._sigpoll.si_band
+# define si_fd		_sifields._sigpoll.si_fd
+
+/* Values for `si_code'.  Positive values are reserved for kernel-generated
+   signals.  */
+enum
+{
+  SI_ASYNCNL = -6,		/* Sent by asynch name lookup completion.  */
+# define SI_ASYNCNL	SI_ASYNCNL
+  SI_SIGIO,			/* Sent by queued SIGIO. */
+# define SI_SIGIO	SI_SIGIO
+  SI_ASYNCIO,			/* Sent by AIO completion.  */
+# define SI_ASYNCIO	SI_ASYNCIO
+  SI_MESGQ,			/* Sent by real time mesq state change.	 */
+# define SI_MESGQ	SI_MESGQ
+  SI_TIMER,			/* Sent by timer expiration.  */
+# define SI_TIMER	SI_TIMER
+  SI_QUEUE,			/* Sent by sigqueue.  */
+# define SI_QUEUE	SI_QUEUE
+  SI_USER,			/* Sent by kill, sigsend, raise.  */
+# define SI_USER	SI_USER
+  SI_KERNEL = 0x80		/* Send by kernel.  */
+#define SI_KERNEL	SI_KERNEL
+};
+
+
+/* `si_code' values for SIGILL signal.	*/
+enum
+{
+  ILL_ILLOPC = 1,		/* Illegal opcode.  */
+# define ILL_ILLOPC	ILL_ILLOPC
+  ILL_ILLOPN,			/* Illegal operand.  */
+# define ILL_ILLOPN	ILL_ILLOPN
+  ILL_ILLADR,			/* Illegal addressing mode.  */
+# define ILL_ILLADR	ILL_ILLADR
+  ILL_ILLTRP,			/* Illegal trap. */
+# define ILL_ILLTRP	ILL_ILLTRP
+  ILL_PRVOPC,			/* Privileged opcode.  */
+# define ILL_PRVOPC	ILL_PRVOPC
+  ILL_PRVREG,			/* Privileged register.	 */
+# define ILL_PRVREG	ILL_PRVREG
+  ILL_COPROC,			/* Coprocessor error.  */
+# define ILL_COPROC	ILL_COPROC
+  ILL_BADSTK			/* Internal stack error.  */
+# define ILL_BADSTK	ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal.	*/
+enum
+{
+  FPE_INTDIV = 1,		/* Integer divide by zero.  */
+# define FPE_INTDIV	FPE_INTDIV
+  FPE_INTOVF,			/* Integer overflow.  */
+# define FPE_INTOVF	FPE_INTOVF
+  FPE_FLTDIV,			/* Floating point divide by zero.  */
+# define FPE_FLTDIV	FPE_FLTDIV
+  FPE_FLTOVF,			/* Floating point overflow.  */
+# define FPE_FLTOVF	FPE_FLTOVF
+  FPE_FLTUND,			/* Floating point underflow.  */
+# define FPE_FLTUND	FPE_FLTUND
+  FPE_FLTRES,			/* Floating point inexact result.  */
+# define FPE_FLTRES	FPE_FLTRES
+  FPE_FLTINV,			/* Floating point invalid operation.  */
+# define FPE_FLTINV	FPE_FLTINV
+  FPE_FLTSUB			/* Subscript out of range.  */
+# define FPE_FLTSUB	FPE_FLTSUB
+};
+
+/* `si_code' values for SIGSEGV signal.	 */
+enum
+{
+  SEGV_MAPERR = 1,		/* Address not mapped to object.  */
+# define SEGV_MAPERR	SEGV_MAPERR
+  SEGV_ACCERR			/* Invalid permissions for mapped object.  */
+# define SEGV_ACCERR	SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal.	*/
+enum
+{
+  BUS_ADRALN = 1,		/* Invalid address alignment.  */
+# define BUS_ADRALN	BUS_ADRALN
+  BUS_ADRERR,			/* Non-existant physical address.  */
+# define BUS_ADRERR	BUS_ADRERR
+  BUS_OBJERR			/* Object specific hardware error.  */
+# define BUS_OBJERR	BUS_OBJERR
+};
+
+/* `si_code' values for SIGTRAP signal.	 */
+enum
+{
+  TRAP_BRKPT = 1,		/* Process breakpoint.	*/
+# define TRAP_BRKPT	TRAP_BRKPT
+  TRAP_TRACE			/* Process trace trap.	*/
+# define TRAP_TRACE	TRAP_TRACE
+};
+
+/* `si_code' values for SIGCHLD signal.	 */
+enum
+{
+  CLD_EXITED = 1,		/* Child has exited.  */
+# define CLD_EXITED	CLD_EXITED
+  CLD_KILLED,			/* Child was killed.  */
+# define CLD_KILLED	CLD_KILLED
+  CLD_DUMPED,			/* Child terminated abnormally.	 */
+# define CLD_DUMPED	CLD_DUMPED
+  CLD_TRAPPED,			/* Traced child has trapped.  */
+# define CLD_TRAPPED	CLD_TRAPPED
+  CLD_STOPPED,			/* Child has stopped.  */
+# define CLD_STOPPED	CLD_STOPPED
+  CLD_CONTINUED			/* Stopped child has continued.	 */
+# define CLD_CONTINUED	CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal.	 */
+enum
+{
+  POLL_IN = 1,			/* Data input available.  */
+# define POLL_IN	POLL_IN
+  POLL_OUT,			/* Output buffers available.  */
+# define POLL_OUT	POLL_OUT
+  POLL_MSG,			/* Input message available.   */
+# define POLL_MSG	POLL_MSG
+  POLL_ERR,			/* I/O error.  */
+# define POLL_ERR	POLL_ERR
+  POLL_PRI,			/* High priority input available.  */
+# define POLL_PRI	POLL_PRI
+  POLL_HUP			/* Device disconnected.	 */
+# define POLL_HUP	POLL_HUP
+};
+
+# undef __need_siginfo_t
+#endif	/* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
+
+
+#if (defined _SIGNAL_H || defined __need_sigevent_t) \
+    && !defined __have_sigevent_t
+# define __have_sigevent_t	1
+
+/* Structure to transport application-defined values with signals.  */
+# define __SIGEV_MAX_SIZE	64
+# define __SIGEV_PAD_SIZE	((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
+
+/* Forward declaration of the `pthread_attr_t' type.  */
+struct __pthread_attr_s;
+
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+
+    union
+      {
+	int _pad[__SIGEV_PAD_SIZE];
+
+	struct
+	  {
+	    void (*_function) (sigval_t);	  /* Function to start.	 */
+	    struct __pthread_attr_s *_attribute;  /* Really pthread_attr_t.  */
+	  } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+
+/* POSIX names to access some of the members.  */
+# define sigev_notify_function	 _sigev_un._sigev_thread._function
+# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+
+/* `sigev_notify' values.  */
+enum
+{
+  SIGEV_SIGNAL = 0,		/* Notify via signal.  */
+# define SIGEV_SIGNAL	SIGEV_SIGNAL
+  SIGEV_NONE,			/* Other notification: meaningless.  */
+# define SIGEV_NONE	SIGEV_NONE
+  SIGEV_THREAD			/* Deliver via thread creation.	 */
+# define SIGEV_THREAD	SIGEV_THREAD
+};
+
+#endif	/* have _SIGNAL_H.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h
new file mode 100644
index 0000000000..d4e108a26e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h
@@ -0,0 +1,59 @@
+/* sigstack, sigaltstack definitions.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SIGNAL_H
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#ifndef _SIGSTACK_H
+#define _SIGSTACK_H	1
+
+/* Structure describing a signal stack (obsolete).  */
+struct sigstack
+  {
+    __ptr_t ss_sp;		/* Signal stack pointer.  */
+    int ss_onstack;		/* Nonzero if executing on this stack.	*/
+  };
+
+
+/* Possible values for `ss_flags.'.  */
+enum
+{
+  SS_ONSTACK = 1,
+#define SS_ONSTACK	SS_ONSTACK
+  SS_DISABLE
+#define SS_DISABLE	SS_DISABLE
+};
+
+/* Minimum stack size for a signal handler.  */
+#define MINSIGSTKSZ	2048
+
+/* System default stack size.  */
+#define SIGSTKSZ	8192
+
+
+/* Alternate, preferred interface.  */
+typedef struct sigaltstack
+  {
+    __ptr_t ss_sp;
+    int ss_flags;
+    size_t ss_size;
+  } stack_t;
+
+#endif	/* bits/sigstack.h */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h
new file mode 100644
index 0000000000..2bdae97383
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h
@@ -0,0 +1,107 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_STAT_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_KERNEL	0
+#define _STAT_VER_LINUX		1
+#define _STAT_VER		_STAT_VER_LINUX
+
+/* Versions of the `xmknod' interface.	*/
+#define _MKNOD_VER_LINUX	0
+
+struct stat
+  {
+    __dev_t st_dev;		/* Device.  */
+    __ino_t st_ino;		/* File serial number.	*/
+    __nlink_t st_nlink;		/* Link count.	*/
+    __mode_t st_mode;		/* File mode.  */
+    __uid_t st_uid;		/* User ID of the file's owner.	*/
+    __gid_t st_gid;		/* Group ID of the file's group.*/
+    int pad0;
+    __dev_t st_rdev;		/* Device number, if device.  */
+    __off_t st_size;		/* Size of file, in bytes.  */
+    __time_t st_atime;		/* Time of last access.	 */
+    long int __reserved0;	/* Reserved for atime.nanoseconds.  */
+    __time_t st_mtime;		/* Time of last modification.  */
+    long int __reserved1;	/* Reserved for mtime.nanoseconds.  */
+    __time_t st_ctime;		/* Time of last status change.	*/
+    long int __reserved2;	/* Reserved for ctime.nanoseconds.  */
+    __blksize_t st_blksize;	/* Optimal block size for I/O.	*/
+    __blkcnt_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
+    long int __unused[3];
+  };
+
+#ifdef __USE_LARGEFILE64
+/* Note stat64 is the same shape as stat.  */
+struct stat64
+  {
+    __dev_t st_dev;		/* Device.  */
+    __ino64_t st_ino;		/* File serial number.	*/
+    __nlink_t st_nlink;		/* Link count.	*/
+    __mode_t st_mode;		/* File mode.  */
+    __uid_t st_uid;		/* User ID of the file's owner.	*/
+    __gid_t st_gid;		/* Group ID of the file's group.*/
+    int pad0;
+    __dev_t st_rdev;		/* Device number, if device.  */
+    __off_t st_size;		/* Size of file, in bytes.  */
+    __time_t st_atime;		/* Time of last access.	 */
+    long int __reserved0;	/* Reserved for atime.nanoseconds.  */
+    __time_t st_mtime;		/* Time of last modification.  */
+    long int __reserved1;	/* Reserved for mtime.nanoseconds.  */
+    __time_t st_ctime;		/* Time of last status change.	*/
+    long int __reserved2;	/* Reserved for ctime.nanoseconds.  */
+    __blksize_t st_blksize;	/* Optimal block size for I/O.	*/
+    __blkcnt64_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
+    long int __unused[3];
+  };
+#endif
+
+/* Tell code we have these members.  */
+#define	_STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+
+/* Encoding of the file mode.  */
+
+#define	__S_IFMT	0170000	/* These bits determine file type.  */
+
+/* File types.	*/
+#define	__S_IFDIR	0040000	/* Directory.  */
+#define	__S_IFCHR	0020000	/* Character device.  */
+#define	__S_IFBLK	0060000	/* Block device.  */
+#define	__S_IFREG	0100000	/* Regular file.  */
+#define	__S_IFIFO	0010000	/* FIFO.  */
+#define	__S_IFLNK	0120000	/* Symbolic link.  */
+#define	__S_IFSOCK	0140000	/* Socket.  */
+
+/* POSIX.1b objects.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define	__S_ISUID	04000	/* Set user ID on execution.  */
+#define	__S_ISGID	02000	/* Set group ID on execution.  */
+#define	__S_ISVTX	01000	/* Save swapped text after use (sticky).  */
+#define	__S_IREAD	0400	/* Read by owner.  */
+#define	__S_IWRITE	0200	/* Write by owner.  */
+#define	__S_IEXEC	0100	/* Execute by owner.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h b/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h
new file mode 100644
index 0000000000..45c4dc8d41
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h
@@ -0,0 +1,115 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+
+#ifndef	_BITS_TYPES_H
+#define	_BITS_TYPES_H	1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Convenience types.  */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+typedef unsigned long int __u_quad_t;
+typedef long int __quad_t;
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+typedef __quad_t *__qaddr_t;
+
+typedef __uint64_t __dev_t;		/* Type of device numbers.  */
+typedef __uint32_t __uid_t;		/* Type of user identifications.  */
+typedef __uint32_t __gid_t;		/* Type of group identifications.  */
+typedef __uint64_t __ino_t;		/* Type of file serial numbers.	 */
+typedef __uint64_t __ino64_t;		/*  "" (LFS) */
+typedef __uint32_t __mode_t;		/* Type of file attribute bitmasks.  */
+typedef __uint64_t __nlink_t;		/* Type of file link counts.  */
+typedef __int64_t  __off_t;		/* Type of file sizes and offsets.  */
+typedef __int64_t  __off64_t;		/*  "" (LFS) */
+typedef __int64_t  __loff_t;		/* Type of file sizes and offsets.  */
+typedef __int32_t  __pid_t;		/* Type of process identifications.  */
+typedef __int64_t  __ssize_t;		/* Type of a byte count, or error.  */
+typedef __uint64_t  __rlim_t;		/* Type of resource counts.  */
+typedef __uint64_t  __rlim64_t;		/*  "" (LFS) */
+typedef __int64_t  __blkcnt_t;		/* Type to count nr disk blocks.  */
+typedef __int64_t  __blkcnt64_t;	/*  "" (LFS) */
+typedef __uint64_t __fsblkcnt_t;	/* Type to count file system blocks.  */
+typedef __uint64_t __fsblkcnt64_t;	/*  "" (LFS) */
+typedef __uint64_t __fsfilcnt_t;	/* Type to count file system inodes.  */
+typedef __uint64_t __fsfilcnt64_t;	/*  "" (LFS) */
+typedef __uint32_t __id_t;		/* General type for IDs.  */
+
+typedef struct
+  {
+    int __val[2];
+  } __fsid_t;				/* Type of file system IDs.  */
+
+/* Everythin' else.  */
+typedef int __daddr_t;			/* Type of a disk address.  */
+typedef char *__caddr_t;		/* Type of a core address.  */
+typedef long int __time_t;
+typedef unsigned int __useconds_t;
+typedef long int __suseconds_t;
+typedef long int __swblk_t;		/* Type of a swap block maybe?	*/
+typedef long int __clock_t;
+typedef int __key_t;			/* Type of a SYSV IPC key. */
+
+/* Clock ID used in clock and timer functions.	*/
+typedef int __clockid_t;
+
+/* Timer ID returned by `timer_create'.	 */
+typedef int __timer_t;
+
+/* Used in `struct shmid_ds'.  */
+typedef int __ipc_pid_t;
+
+/* type to represent block size. */
+typedef long int __blksize_t;
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define __FD_SETSIZE	1024
+
+/* Used in XTI.	 */
+typedef int __t_scalar_t;
+typedef unsigned int __t_uscalar_t;
+
+/* Duplicates info from stdint.h but this is used in unistd.h.	*/
+typedef long int __intptr_t;
+
+/* Duplicate info from sys/socket.h.  */
+typedef unsigned int __socklen_t;
+
+/* Now add the thread types.  */
+#if defined __USE_POSIX199506 || defined __USE_UNIX98
+# include <bits/pthreadtypes.h>
+#endif
+
+#endif /* bits/types.h */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
new file mode 100644
index 0000000000..c6b160ac39
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
@@ -0,0 +1,55 @@
+/* Wrapper around clone system call.  64 bit S/390 version.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* clone is even more special than fork as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+	.text
+ENTRY(__clone)
+	/* Sanity check arguments & move registers */
+	ltgr	%r1,%r2			/* no NULL function pointers */
+	lghi	%r2,-EINVAL
+	jz	SYSCALL_ERROR_LABEL
+	ltgr	%r3,%r3			/* no NULL stack pointers */
+	jz	SYSCALL_ERROR_LABEL
+	/* move child_stack and flags, then call SVC */
+	lgr	%r2,%r3
+	lgr	%r3,%r4
+	svc	SYS_ify(clone)
+	ltgr	%r2,%r2			/* check return code */
+	jm	SYSCALL_ERROR_LABEL
+	jz	thread_start
+	br	%r14
+
+thread_start:
+	/* fn is in gpr 1, arg in gpr 5 */
+	lgr	%r2,%r5		/* set first parameter to void *arg */
+	sgr	%r11,%r11	/* terminate the stack frame */
+	aghi	%r15,-96	/* make room on the stack for the save area */
+	basr	%r14,%r1	/* jump to fn */
+#ifdef PIC
+	larl	%r12,_GLOBAL_OFFSET_TABLE_
+#endif
+	jg	_exit@PLT	/* branch to _exit -> thread termination */
+PSEUDO_END (__clone)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c b/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c
new file mode 100644
index 0000000000..2be4e59ba4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c
@@ -0,0 +1 @@
+/* fstatfs64 is the same as fstatfs. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c b/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c
new file mode 100644
index 0000000000..673a8b525a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c
@@ -0,0 +1 @@
+/* ftruncate64 is the same as ftruncate. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c b/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c
new file mode 100644
index 0000000000..96b71167cd
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c
@@ -0,0 +1,42 @@
+/* fxstat using old-style Unix fstat system call.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc
+   will complain since they don't strictly match.  */
+#define __fxstat64 __fxstat64_disable
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_fstat (int, struct stat *);
+
+/* Get information about the file FD in BUF.  */
+int
+__fxstat (int vers, int fd, struct stat *buf)
+{
+  return INLINE_SYSCALL (fstat, 2, fd, buf);
+}
+
+weak_alias (__fxstat, _fxstat);
+#undef __fxstat64
+strong_alias (__fxstat, __fxstat64);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c b/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c
new file mode 100644
index 0000000000..9eff9ebeb7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c
@@ -0,0 +1 @@
+/* fxstat64 is in fxstat.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c b/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c
new file mode 100644
index 0000000000..491fa9dfb2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getdents.c
@@ -0,0 +1,4 @@
+#define __getdents64 __no___getdents64_decl
+#include <sysdeps/unix/sysv/linux/getdents.c>
+#undef __getdents64
+weak_alias(__getdents, __getdents64);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c b/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c
new file mode 100644
index 0000000000..0df2c8f4c6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c
@@ -0,0 +1 @@
+/* getdents64 is in getdents.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c
new file mode 100644
index 0000000000..9feab0e6b8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c
@@ -0,0 +1 @@
+/* getrlimit64 is the same as getrlimit. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/glob.c b/sysdeps/unix/sysv/linux/s390/s390-64/glob.c
new file mode 100644
index 0000000000..b6da989e57
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/glob.c
@@ -0,0 +1,7 @@
+#define glob64 __no_glob64_decl
+#define globfree64 __no_globfree64_decl
+#include <sysdeps/generic/glob.c>
+#undef glob64
+#undef globfree64
+weak_alias (glob, glob64)
+weak_alias (globfree, globfree64)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c b/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c
new file mode 100644
index 0000000000..33918ea6a5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/glob64.c
@@ -0,0 +1 @@
+/* glob64 is in glob.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h b/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h
new file mode 100644
index 0000000000..10f17b28ee
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h
@@ -0,0 +1,46 @@
+/* Definition of `struct stat' used in the kernel.  64 bit S/390 version.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+struct kernel_stat
+  {
+    unsigned int st_dev;
+    unsigned int st_ino;
+    unsigned int st_mode;
+    unsigned int st_nlink;
+    unsigned int st_uid;
+    unsigned int st_gid;
+    unsigned int st_rdev;
+    unsigned int __pad1;
+    unsigned long int st_size;
+    unsigned long int st_atime;
+    unsigned long int st_mtime;
+    unsigned long int st_ctime;
+    unsigned int  st_blksize;
+    int st_blocks;
+    unsigned long __unused1;
+    unsigned long __unused2;
+  };
+
+extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf);
+
+#define XSTAT_IS_XSTAT64 1
+#define _HAVE___UNUSED1
+#define _HAVE___UNUSED2
+
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c b/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c
new file mode 100644
index 0000000000..1b80b11163
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c
@@ -0,0 +1,42 @@
+/* lxstat using old-style Unix fstat system call.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc
+   will complain since they don't strictly match.  */
+#define __lxstat64 __lxstat64_disable
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_lstat (const char *, struct stat *);
+
+/* Get information about the file FD in BUF.  */
+int
+__lxstat (int vers, const char *name, struct stat *buf)
+{
+  return INLINE_SYSCALL (lstat, 2, name, buf);
+}
+
+weak_alias (__lxstat, _lxstat);
+#undef __lxstat64
+strong_alias (__lxstat, __lxstat64);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c b/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c
new file mode 100644
index 0000000000..bb5dbd0fff
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c
@@ -0,0 +1 @@
+/* lxstat64 is in lxstat.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S b/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S
new file mode 100644
index 0000000000..72d73d4416
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/mmap.S
@@ -0,0 +1,67 @@
+/* Wrapper around mmap system call.  64 bit S/390 version.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+#define EINVAL	22
+
+        .text
+
+ENTRY(__mmap)
+	/* Save registers and setup stack frame.  */
+        stmg    %r6,%r15,48(%r15)
+        lgr     %r1,%r15
+        lg      %r0,8(%r15)             /* Load eos.  */
+        aghi    %r15,-208               /* Buy stack space.  */
+        stg     %r1,0(%r15)             /* Store back chain.  */
+        stg     %r0,8(%r15)             /* Store eos.  */
+
+        /* Store parameters on stack, because old_mmap 
+           takes only one parameter: a pointer to the parameter area.  */
+        mvc     200(8,%r15),368(%r15)   /* Move 'offset'.  */
+        lgfr    %r6,%r6
+        stg     %r6,192(%r15)           /* Store 'fd'.  */
+        lgfr    %r5,%r5
+        stg     %r5,184(%r15)           /* Store 'flags'.  */
+        lgfr    %r4,%r4
+        stg     %r4,176(%r15)           /* Store 'prot'.  */
+        stg     %r3,168(%r15)           /* Store 'length'.  */
+        stg     %r2,160(%r15)           /* Store 'start'.  */
+
+        la      %r2,160(%r15)           /* Load address of parameter list.  */
+        /* Do the system call trap.  */
+        svc     SYS_ify(mmap)
+
+        lg      %r15,0(%r15)            /* Load back chain.  */
+        lmg     %r6,%r15,48(%r15)       /* Load registers.  */
+
+        /* Check gpr 2 for error.  */ 
+        lghi    %r0,-4096
+        clgr    %r2,%r0
+        jnl     SYSCALL_ERROR_LABEL
+
+        /* Successful; return the syscall's value.  */
+        br      %r14
+
+PSEUDO_END (__mmap)
+
+weak_alias (__mmap, mmap)
+weak_alias (__mmap, mmap64)
+
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c b/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c
new file mode 100644
index 0000000000..0dbd384a6a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c
@@ -0,0 +1 @@
+/* mmap64 is the same as mmap. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c b/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c
new file mode 100644
index 0000000000..b7f298dea8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/pread64.c
@@ -0,0 +1 @@
+/* Empty since the pread syscall is equivalent.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c b/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c
new file mode 100644
index 0000000000..b1b25f65a3
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c
@@ -0,0 +1 @@
+/* Empty since the pwrite syscall is equivalent.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c b/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c
new file mode 100644
index 0000000000..300ebb2629
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/readdir.c
@@ -0,0 +1,7 @@
+#define readdir64 __no_readdir64_decl
+#define __readdir64 __no___readdir64_decl
+#include <sysdeps/unix/readdir.c>
+#undef __readdir64
+strong_alias (__readdir, __readdir64)
+#undef readdir64
+weak_alias (__readdir, readdir64)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c b/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c
new file mode 100644
index 0000000000..9796431dc4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c
@@ -0,0 +1 @@
+/* readdir64 is in readdir.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c b/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c
new file mode 100644
index 0000000000..b8fe9a31b4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c
@@ -0,0 +1 @@
+/* readdir64_r is in readdir_r.c */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c b/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c
new file mode 100644
index 0000000000..adb92db6af
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c
@@ -0,0 +1,4 @@
+#define readdir64_r __no_readdir64_r_decl
+#include <sysdeps/unix/readdir_r.c>
+#undef readdir64_r
+weak_alias (__readdir_r, readdir64_r)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h
new file mode 100644
index 0000000000..a9da7d84d7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h
@@ -0,0 +1,133 @@
+/* Dump registers.  64 bit S/390 version.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sys/uio.h>
+#include <stdio-common/_itoa.h>
+
+/* We will print the register dump in this format:
+
+ GPR0: XXXXXXXXXXXXXXXX  GPR1: XXXXXXXXXXXXXXXX
+ GPR2: XXXXXXXXXXXXXXXX  GPR3: XXXXXXXXXXXXXXXX
+ GPR4: XXXXXXXXXXXXXXXX  GPR5: XXXXXXXXXXXXXXXX
+ GPR6: XXXXXXXXXXXXXXXX  GPR7: XXXXXXXXXXXXXXXX
+ GPR8: XXXXXXXXXXXXXXXX  GPR9: XXXXXXXXXXXXXXXX
+ GPRA: XXXXXXXXXXXXXXXX  GPRB: XXXXXXXXXXXXXXXX
+ GPRC: XXXXXXXXXXXXXXXX  GPRD: XXXXXXXXXXXXXXXX
+ GPRE: XXXXXXXXXXXXXXXX  GPRF: XXXXXXXXXXXXXXXX
+
+ PSW.MASK: XXXXXXXXXXXXXXXX   PSW.ADDR: XXXXXXXXXXXXXXXX
+
+ ST(0) XXXX XXXXXXXXXXXXXXXX   ST(1) XXXX XXXXXXXXXXXXXXXX
+ ST(2) XXXX XXXXXXXXXXXXXXXX   ST(3) XXXX XXXXXXXXXXXXXXXX
+ ST(4) XXXX XXXXXXXXXXXXXXXX   ST(5) XXXX XXXXXXXXXXXXXXXX
+ ST(6) XXXX XXXXXXXXXXXXXXXX   ST(7) XXXX XXXXXXXXXXXXXXXX
+ */
+
+static void
+hexvalue (unsigned long int value, char *buf, size_t len)
+{
+  char *cp = _itoa_word (value, buf + len, 16, 0);
+  while (cp > buf)
+    *--cp = '0';
+}
+
+static void
+register_dump (int fd, struct sigcontext *ctx)
+{
+  char regs[19][16];
+  struct iovec iov[40];
+  size_t nr = 0;
+
+#define ADD_STRING(str) \
+  iov[nr].iov_base = (char *) str;					      \
+  iov[nr].iov_len = strlen (str);					      \
+  ++nr
+#define ADD_MEM(str, len) \
+  iov[nr].iov_base = str;						      \
+  iov[nr].iov_len = len;						      \
+  ++nr
+
+  /* Generate strings of register contents.  */
+  hexvalue (ctx->sregs->regs.gprs[0], regs[0], 16);
+  hexvalue (ctx->sregs->regs.gprs[1], regs[1], 16);
+  hexvalue (ctx->sregs->regs.gprs[2], regs[2], 16);
+  hexvalue (ctx->sregs->regs.gprs[3], regs[3], 16);
+  hexvalue (ctx->sregs->regs.gprs[4], regs[4], 16);
+  hexvalue (ctx->sregs->regs.gprs[5], regs[5], 16);
+  hexvalue (ctx->sregs->regs.gprs[6], regs[6], 16);
+  hexvalue (ctx->sregs->regs.gprs[7], regs[7], 16);
+  hexvalue (ctx->sregs->regs.gprs[8], regs[8], 16);
+  hexvalue (ctx->sregs->regs.gprs[9], regs[9], 16);
+  hexvalue (ctx->sregs->regs.gprs[10], regs[10], 16);
+  hexvalue (ctx->sregs->regs.gprs[11], regs[11], 16);
+  hexvalue (ctx->sregs->regs.gprs[12], regs[12], 16);
+  hexvalue (ctx->sregs->regs.gprs[13], regs[13], 16);
+  hexvalue (ctx->sregs->regs.gprs[14], regs[14], 16);
+  hexvalue (ctx->sregs->regs.gprs[15], regs[15], 16);
+  hexvalue (ctx->sregs->regs.psw.mask, regs[16], 16);
+  hexvalue (ctx->sregs->regs.psw.addr, regs[17], 16);
+   
+  /* Generate the output.  */
+  ADD_STRING ("Register dump:\n\n GPR0: ");
+  ADD_MEM (regs[0], 16);
+  ADD_STRING ("  GPR1: ");
+  ADD_MEM (regs[1], 16);
+  ADD_STRING ("  GPR2: ");
+  ADD_MEM (regs[2], 16);
+  ADD_STRING ("  GPR3: ");
+  ADD_MEM (regs[3], 16);
+  ADD_STRING ("\n GPR4: ");
+  ADD_MEM (regs[4], 16);
+  ADD_STRING ("  GPR5: ");
+  ADD_MEM (regs[5], 16);
+  ADD_STRING ("  GPR6: ");
+  ADD_MEM (regs[6], 16);
+  ADD_STRING ("  GPR7: ");
+  ADD_MEM (regs[7], 16);
+  ADD_STRING ("\n GPR8: ");
+  ADD_MEM (regs[8], 16);
+  ADD_STRING ("  GPR9: ");
+  ADD_MEM (regs[9], 16);
+  ADD_STRING ("  GPRA: ");
+  ADD_MEM (regs[10], 16);
+  ADD_STRING ("  GPRB: ");
+  ADD_MEM (regs[11], 16);
+  ADD_STRING ("\n GPRC: ");
+  ADD_MEM (regs[12], 16);
+  ADD_STRING ("  GPRD: ");
+  ADD_MEM (regs[13], 16);
+  ADD_STRING ("  GPRE: ");
+  ADD_MEM (regs[14], 16);
+  ADD_STRING ("  GPRF: ");
+  ADD_MEM (regs[15], 16);
+  ADD_STRING ("\n\n PSW.MASK: ");
+  ADD_MEM (regs[16], 16);
+  ADD_STRING ("  PSW.ADDR: ");
+  ADD_MEM (regs[17], 16);
+  ADD_STRING ("  TRAP: ");
+  ADD_MEM (regs[18], 4);
+  ADD_STRING ("\n");
+
+  /* Write the stuff out.  */
+  writev (fd, iov, nr);
+}
+
+
+#define REGISTER_DUMP register_dump (fd, &ctx)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c
new file mode 100644
index 0000000000..8edcff0086
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c
@@ -0,0 +1 @@
+/* setrlimit64 is the same as setrlimit. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c
new file mode 100644
index 0000000000..9e2ffa8e76
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c
@@ -0,0 +1,50 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try 
+   falling back to the old style signals as the default Linux handler does. */
+
+#include <errno.h>
+#include <signal.h>
+#include <string.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_rt_sigaction (int, const struct sigaction *,
+				   struct sigaction *, size_t);
+
+/* The variable is shared between all wrappers around signal handling
+   functions which have RT equivalents.  This is the definition.  */
+
+
+/* If ACT is not NULL, change the action for SIG to *ACT.
+   If OACT is not NULL, put the old action for SIG in *OACT.  */
+int
+__libc_sigaction (sig, act, oact)
+     int sig;
+     const struct sigaction *act;
+     struct sigaction *oact;
+{
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+  return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8);
+}
+
+weak_alias (__libc_sigaction, __sigaction)
+weak_alias (__libc_sigaction, sigaction)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c
new file mode 100644
index 0000000000..cdaacd769c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try
+   falling back to the old style signals as the default Linux handler does. */
+
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_rt_sigpending (sigset_t *, size_t);
+
+
+/* Change the set of blocked signals to SET,
+   wait until a signal arrives, and restore the set of blocked signals.  */
+int
+sigpending (set)
+     sigset_t *set;
+{
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+  return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8);
+}
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c
new file mode 100644
index 0000000000..1a580b0554
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try
+   falling back to the old style signals as the default Linux handler does. */
+
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_rt_sigprocmask (int, const sigset_t *,
+				     sigset_t *, size_t);
+
+/* Get and/or change the set of blocked signals.  */
+int
+__sigprocmask (how, set, oset)
+     int how;
+     const sigset_t *set;
+     sigset_t *oset;
+{
+
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+  return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8);
+}
+weak_alias (__sigprocmask, sigprocmask)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c
new file mode 100644
index 0000000000..af7797eeb8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_rt_sigsuspend (const sigset_t *, size_t);
+
+
+/* Change the set of blocked signals to SET,
+   wait until a signal arrives, and restore the set of blocked signals.  */
+int
+__sigsuspend (set)
+     const sigset_t *set;
+{
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+  return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
+}
+weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/socket.S b/sysdeps/unix/sysv/linux/s390/s390-64/socket.S
new file mode 100644
index 0000000000..471c0b5ef2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/socket.S
@@ -0,0 +1,99 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+#include <socketcall.h>
+
+/* &%/$&!! preprocessor */
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+        .text
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.  */
+
+#ifndef __socket
+#ifndef NO_WEAK_ALIAS
+#define __socket P(__,socket)
+#else
+#define __socket socket
+#endif
+#endif
+
+#ifndef NARGS      /* The socket.o object is compiled directly ... */
+#define NARGS 3
+#endif
+
+.globl __socket
+ENTRY(__socket)
+
+	/* Save registers and setup stack.  */
+        stmg    %r6,%r15,48(%r15)       /* Save registers.  */
+        lgr     %r1,%r15
+        lg      %r0,8(%r15)             /* Load eos.  */
+        ahi     %r15,-208               /* Buy stack space.  */
+        stg     %r1,0(%r15)             /* Store back chain.  */
+        stg     %r0,8(%r15)             /* Store eos.  */
+
+        /* Reorder arguments.  */
+#if (NARGS >= 6)
+        mvc     200(8,%r15),368(%r15)   /* Move between parameter lists.  */
+#endif
+#if (NARGS >= 5)
+        stg     %r6,192(%r15)           /* Store into parameter list.  */
+#endif
+#if (NARGS >= 4)
+	stg     %r5,184(%r15)            /* Store into parameter list.  */
+#endif
+#if (NARGS >= 3)
+	stg     %r4,176(%r15)            /* Store into parameter list.  */
+#endif
+#if (NARGS >= 2)
+        stg     %r3,168(%r15)           /* Store into parameter list.  */
+	stg     %r2,160(%r15)
+#endif
+        /* Load subcode for socket syscall.  */
+        lghi    %r2,P(SOCKOP_,socket)
+	la      %r3,160(%r15)           /* Load address of parameter list.  */
+
+        /* Do the system call trap.  */
+        svc     SYS_ify(socketcall)
+
+        lg      %r15,0(%r15)            /* Load back chain.  */
+        lmg     %r6,15,48(%r15)         /* Load registers.  */
+
+	/* gpr2 is < 0 if there was an error.  */
+        lghi    %r0,-125 
+        clgr    %r2,%r0
+        jnl     SYSCALL_ERROR_LABEL
+ 
+	/* Successful; return the syscall's value.  */
+	br      %r14
+
+PSEUDO_END (__socket)
+
+#ifndef NO_WEAK_ALIAS
+weak_alias (__socket, socket)
+#endif
+
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c b/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c
new file mode 100644
index 0000000000..06bc68826f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c
@@ -0,0 +1 @@
+/* statfs64 is the same as statfs. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h b/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h
new file mode 100644
index 0000000000..3e91109bf5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h
@@ -0,0 +1,118 @@
+/* Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H	1
+
+/* This is somewhat modelled after the file of the same name on SVR4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  It doesn't have anything to do with the /proc file
+   system, even though Linux has one.
+
+   Anyway, the whole purpose of this file is for GDB and GDB only.
+   Don't read too much into it.  Don't use it for anything other than
+   GDB unless you know what you are doing.  */
+
+#include <features.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+typedef greg_t elf_greg_t;
+#define ELF_NGREG NGREG
+typedef gregset_t elf_gregset_t;
+typedef fpreg_t   elf_fpreg_t;
+typedef fpregset_t elf_fpregset_t;
+
+/* Signal info.  */
+struct elf_siginfo
+  {
+    int si_signo;			/* Signal number.  */
+    int si_code;			/* Extra code.  */
+    int si_errno;			/* Errno.  */
+  };
+
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with Linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   GDB doesn't really use excluded.  */
+
+struct elf_prstatus
+  {
+    struct elf_siginfo pr_info;		/* Info associated with signal.  */
+    short int pr_cursig;		/* Current signal.  */
+    unsigned long int pr_sigpend;	/* Set of pending signals.  */
+    unsigned long int pr_sighold;	/* Set of held signals.  */
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;		/* User time.  */
+    struct timeval pr_stime;		/* System time.  */
+    struct timeval pr_cutime;		/* Cumulative user time.  */
+    struct timeval pr_cstime;		/* Cumulative system time.  */
+    elf_gregset_t pr_reg;		/* GP registers.  */
+    int pr_fpvalid;			/* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args.  */
+
+struct elf_prpsinfo
+  {
+    char pr_state;			/* Numeric process state.  */
+    char pr_sname;			/* Char for pr_state.  */
+    char pr_zomb;			/* Zombie.  */
+    char pr_nice;			/* Nice val.  */
+    unsigned long int pr_flag;		/* Flags.  */
+    unsigned int pr_uid;
+    unsigned int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];			/* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];	/* Initial part of arg list.  */
+  };
+
+/* The rest of this file provides the types for emulation of the
+   Solaris <proc_service.h> interfaces that should be implemented by
+   users of libthread_db.  */
+
+/* Addresses.  */
+typedef void *psaddr_t;
+
+/* Register sets.  Linux has different names.  */
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+
+/* We don't have any differences between processes and threads,
+   therefore have only one PID type.  */
+typedef __pid_t lwpid_t;
+
+/* Process status and info.  In the end we do provide typedefs for them.  */
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif	/* sys/procfs.h */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
new file mode 100644
index 0000000000..773841cf01
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H	1
+/* Forward definition to avoid parse errors */
+struct ucontext;
+typedef struct ucontext ucontext_t;
+#include <features.h>
+#include <signal.h>
+
+/* We need the signal context definitions even if they are not used
+   included in <signal.h>.  */
+#include <bits/sigcontext.h>
+
+
+/* Type for a general-purpose register.  */
+typedef unsigned long greg_t;
+
+/* And the whole bunch of them.  We should have used `struct s390_regs',
+   but to avoid name space pollution and since the tradition says that
+   the register set is an array, we make gregset_t a simple array
+   that has the same size as s390_regs. */
+#define NGREG 27
+#define NUM_FPRS 16
+/* Must match kernels psw_t alignment */
+typedef greg_t gregset_t[NGREG] __attribute__ ((aligned(8)));
+
+typedef union
+{
+  double  d;
+  float   f;
+} fpreg_t;
+
+/* Register set for the floating-point registers.  */
+typedef struct {
+  unsigned int fpc;
+  fpreg_t fprs[NUM_FPRS];
+} fpregset_t;
+
+/* Context to describe whole processor state.  */
+typedef struct
+  {
+    int version;
+    gregset_t    gregs;
+    fpregset_t   fpregs;
+  } mcontext_t;
+
+/* Userlevel context.  */
+struct ucontext
+  {
+    unsigned long int uc_flags;
+    struct ucontext *uc_links;
+    __sigset_t uc_sigmask;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+    long int uc_filler[170];
+  };
+
+
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
new file mode 100644
index 0000000000..b632ced19a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
@@ -0,0 +1,52 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for
+   more information about the value -4095 used below.*/
+
+ENTRY (syscall)
+	/* Save registers and setup stack.  */
+	stmg	%r6,%r15,48(%r15)  /* Save registers.  */
+	lgr	%r1,%r15
+	lg	%r0,8(%r15)	   /* Load eos.	 */
+	aghi	%r15,-160	   /* Buy stack space.	*/
+	stg	%r1,0(%r15)	   /* Store back chain.	 */
+	stg	%r0,8(%r15)	   /* Store eos.  */
+	
+	lgr    %r1,%r2		   /* Move syscall number.  */
+	lgr    %r2,%r3		   /* First parameter.	*/
+	lgr    %r3,%r4		   /* Second parameter.	 */
+	lgr    %r4,%r5		   /* Third parameter.	*/
+	lgr    %r5,%r6		   /* Fourth parameter.	 */
+	lg     %r6,320(%r15)	   /* Fifth parameter.	*/
+	basr   %r7,0
+.L0:	ex     %r1,.L1-.L0(%r7)	   /* Lsb of R1 is subsituted as SVC number.  */
+
+	lg	%r15,0(%r15)	   /* Load back chain.	*/
+	lmg	%r6,15,48(%r15)	   /* Load registers.  */
+
+	lghi   %r0,-4095
+	clgr   %r2,%r0		   /* Check R2 for error.  */
+	jnl    SYSCALL_ERROR_LABEL
+	br     %r14		   /* Return to caller.	 */
+.L1:	.word  0x0A00		   /* Opcode for SVC 0.	 */
+PSEUDO_END (syscall)
+
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list
new file mode 100644
index 0000000000..0d72f06cf9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list
@@ -0,0 +1,55 @@
+# File name	Caller	Syscall name	# args	Strong name	Weak names
+
+llseek		EXTRA	lseek		3	__libc_lseek64	__lseek llseek __lseek64 lseek64
+pread		-	pread		4	__libc_pread	__libc_pread64 __pread pread __pread64 pread64
+pwrite		-	pwrite		4	__libc_pwrite	__libc_pwrite64 __pwrite pwrite __pwrite64 pwrite64
+fstatfs		-	fstatfs		i:ip	__fstatfs	fstatfs fstatfs64 __fstatfs64
+statfs		-	statfs		i:sp	__statfs	statfs statfs64
+getpeername	-	getpeername	i:ipp	__getpeername	getpeername
+getpriority	-	getpriority	i:ii	__getpriority	getpriority
+ftruncate	-	ftruncate	2	__ftruncate	ftruncate ftruncate64 __ftruncate64
+truncate	-	truncate	2	truncate	truncate64
+getrlimit	-	getrlimit	2	__getrlimit	getrlimit getrlimit64
+setrlimit	-	setrlimit	2	__setrlimit	setrlimit setrlimit64
+
+# semaphore and shm system calls
+msgctl		-	msgctl		i:iip	__msgctl	msgctl
+msgget		-	msgget		i:ii	__msgget	msgget
+msgrcv		-	msgrcv		i:ibnii	__msgrcv	msgrcv
+msgsnd		-	msgsnd		i:ibni	__msgsnd	msgsnd
+shmat		-	shmat		i:ipi	__shmat		shmat
+shmctl		-	shmctl		i:iip	__shmctl	shmctl
+shmdt		-	shmdt		i:s	__shmdt		shmdt
+shmget		-	shmget		i:iii	__shmget	shmget
+semop		-	semop		i:ipi	__semop		semop
+semget		-	semget		i:iii	__semget	semget
+semctl		-	semctl		i:iiii	__semctl	semctl
+
+# proper socket implementations:
+accept		-	accept		i:iBN	__libc_accept	__accept accept
+bind		-	bind		i:ipi	__bind		bind
+connect		-	connect		i:ipi	__libc_connect	__connect connect
+getpeername	-	getpeername	i:ipp	__getpeername	getpeername
+getsockname	-	getsockname	i:ipp	__getsockname	getsockname
+getsockopt	-	getsockopt	i:iiiBN	__getsockopt	getsockopt
+listen		-	listen		i:ii	__listen	listen
+recv		-	recv		i:ibni	__libc_recv	__recv recv
+recvfrom	-	recvfrom	i:ibniBN	__libc_recvfrom	__recvfrom recvfrom
+recvmsg		-	recvmsg		i:ipi	__libc_recvmsg	recvmsg
+send		-	send		i:ibni	__libc_send	__send send
+sendmsg		-	sendmsg		i:ipi	__libc_sendmsg	sendmsg
+sendto		-	sendto		i:ibnibn	__libc_sendto	__sendto sendto
+setsockopt	-	setsockopt	i:iiibn	__setsockopt	setsockopt
+shutdown	-	shutdown	i:ii	__shutdown	shutdown
+socket		-	socket		i:iii	__socket	socket
+socketpair	-	socketpair	i:iiif	__socketpair	socketpair
+
+getresuid	-	getresuid	i:ppp	getresuid
+getresgid	-	getresgid	i:ppp	getresgid
+
+rt_sigaction	EXTRA	rt_sigaction	i:ippi	__syscall_rt_sigaction		rt_sigaction
+rt_sigpending	EXTRA	rt_sigpending	i:pi	__syscall_rt_sigpending		rt_sigpending
+rt_sigprocmask	EXTRA	rt_sigprocmask	i:ippi	__syscall_rt_sigprocmask	rt_sigprocmask
+rt_sigqueueinfo	EXTRA	rt_sigqueueinfo	i:iip	__syscall_rt_sigqueueinfo	rt_sigqueueinfo
+rt_sigsuspend	EXTRA	rt_sigsuspend	i:pi	__syscall_rt_sigsuspend		rt_sigsuspend
+rt_sigtimedwait	EXTRA	rt_sigtimedwait	i:pppi	__syscall_rt_sigtimedwait	rt_sigtimedwait
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S
new file mode 100644
index 0000000000..7b216c8caf
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S
@@ -0,0 +1,90 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* Because the Linux version is in fact m68k/ELF and the start.? file
+   for this system (sysdeps/m68k/elf/start.S) is also used by The Hurd
+   and therefore this files must not contain the definition of the
+   `errno' variable (I don't know why, ask Roland), we have to define
+   it somewhere else.
+
+    ...and this place is here.  */
+	.bss
+	.globl	errno
+	.type errno,@object
+	.size errno,4
+errno:
+	.space	4
+weak_alias (errno, _errno)
+
+/* The following code is only used in the shared library when we
+   compile the reentrant version.  Otherwise each system call defines
+   each own version.  */
+
+/* The syscall stubs jump here when they detect an error.  */
+
+#undef CALL_MCOUNT
+#define CALL_MCOUNT
+
+        .text
+ENTRY(__syscall_error)
+#ifndef PIC
+#ifndef _LIBC_REENTRANT
+	lcr     %r2,%r2
+	larl    %r1,errno
+	st      %r2,0(%r1)
+	lghi    %r2,-1
+	br      %r14
+#else
+        stmg    %r13,%r15,104(%r15)
+        lgr     %r0,%r15
+        aghi    %r15,-160
+        lcr     %r13,%r2
+        stg     %r0,0(%r15)
+	brasl   %r14,__errno_location
+	st      %r13,0(%r2)
+	lmg     %r13,%r15,264(%r15)
+	lghi    %r2,-1
+	br      %r14
+#endif
+#else
+#ifndef _LIBC_REENTRANT
+	larl    %r1,_GLOBAL_OFFSET_TABLE_
+	lg      %r1,errno@GOT(%r1)
+	lcr     %r2,%r2
+	st      %r2,0(%r1)
+	lghi    %r2,-1
+	br      %r14
+#else
+        stmg    %r13,%r15,104(%r15)
+        lgr     %r0,%r15
+        aghi    %r15,-160
+        lcr     %r13,%r2
+        stg     %r0,0(%r15)
+	brasl   %r14,__errno_location@PLT
+	st      %r13,0(%r2)
+	lmg     %r13,%r15,264(%r15)
+	lghi    %r2,-1	
+	br      %r14
+#endif
+#endif
+
+END (__syscall_error)
+
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
new file mode 100644
index 0000000000..d52e623999
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
@@ -0,0 +1,164 @@
+/* Assembler macros for 64 bit S/390.
+   Copyright (C) 2001 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _LINUX_S390_SYSDEP_H
+#define _LINUX_S390_SYSEDP_H
+
+#include <sysdeps/s390/s390-64/sysdep.h>
+#include <sysdeps/unix/sysdep.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
+
+/* ELF-like local names start with `.L'.  */
+#undef L
+#define L(name)	.L##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 the no syscall returns a value
+   in -1 .. -4095 as a valid result so we can savely test with -4095.  */
+
+#define SYSCALL_ERROR_LABEL 0f
+
+#undef PSEUDO
+#define	PSEUDO(name, syscall_name, args)				      \
+  .text;								      \
+  ENTRY (name)								      \
+    DO_CALL (args, syscall_name);					      \
+    lghi %r4,-4095 ;							      \
+    clgr %r2,%r4 ;							      \
+    jnl SYSCALL_ERROR_LABEL ;						      \
+  L(pseudo_end):
+
+#undef PSEUDO_END
+#define PSEUDO_END(name)						      \
+  SYSCALL_ERROR_HANDLER;						      \
+  END (name)
+
+#ifndef _LIBC_REENTRANT
+#ifndef PIC
+#define SYSCALL_ERROR_HANDLER						      \
+0:  lcr	    %r2,%r2 ;							      \
+    larl    %r1,errno ;							      \
+    st	    %r2,0(%r1) ;						      \
+    lghi    %r2,-1 ;							      \
+    br	    %r14
+#else
+#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 /* PIC */ 
+#else 
+#define SYSCALL_ERROR_HANDLER						      \
+0:  jg	    __syscall_error@PLT
+#endif /* _LIBC_REENTRANT */
+
+/* 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
+
+   (Of course a function with say 3 arguments does not have entries for
+   arguments 4 and 5.)
+   S390 does not need to do ANY stack operations to get its parameters
+   right.
+ */
+
+#define DO_CALL(args, syscall)						      \
+    svc	    SYS_ify (syscall)
+
+#define ret								      \
+    br	    14
+
+#endif /* __ASSEMBLER__ */
+
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...)				      \
+  ({									      \
+    DECLARGS_##nr(args)							      \
+    int err;								      \
+    asm volatile (							      \
+    LOADARGS_##nr							      \
+    "svc    %b1\n\t"							      \
+    "lgr    %0,%%r2\n\t"						      \
+    : "=d" (err)							      \
+    : "I" (__NR_##name) ASMFMT_##nr					      \
+    : "memory", "cc", "2", "3", "4", "5", "6");				      \
+    if (err >= 0xfffff001)						      \
+     {									      \
+       __set_errno(-err);						      \
+       err = -1;							      \
+     }									      \
+    (int) err; })
+
+#define DECLARGS_0() 
+#define DECLARGS_1(arg1) \
+	unsigned long gpr2 = (unsigned long) (arg1);
+#define DECLARGS_2(arg1, arg2) \
+	DECLARGS_1(arg1) \
+	unsigned long gpr3 = (unsigned long) (arg2);
+#define DECLARGS_3(arg1, arg2, arg3) \
+	DECLARGS_2(arg1, arg2) \
+	unsigned long gpr4 = (unsigned long) (arg3);
+#define DECLARGS_4(arg1, arg2, arg3, arg4) \
+	DECLARGS_3(arg1, arg2, arg3) \
+	unsigned long gpr5 = (unsigned long) (arg4);
+#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \
+	DECLARGS_4(arg1, arg2, arg3, arg4) \
+	unsigned long gpr6 = (unsigned long) (arg5);
+
+#define LOADARGS_0
+#define LOADARGS_1	      "LG    2,%2\n\t"
+#define LOADARGS_2 LOADARGS_1 "LG    3,%3\n\t"
+#define LOADARGS_3 LOADARGS_2 "LG    4,%4\n\t"
+#define LOADARGS_4 LOADARGS_3 "LG    5,%5\n\t"
+#define LOADARGS_5 LOADARGS_4 "LG    6,%6\n\t"
+
+#define ASMFMT_0
+#define ASMFMT_1 , "m" (gpr2)
+#define ASMFMT_2 , "m" (gpr2), "m" (gpr3)
+#define ASMFMT_3 , "m" (gpr2), "m" (gpr3), "m" (gpr4)
+#define ASMFMT_4 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5)
+#define ASMFMT_5 , "m" (gpr2), "m" (gpr3), "m" (gpr4), "m" (gpr5), "m" (gpr6)
+
+#endif /* _LINUX_S390_SYSDEP_H */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c b/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c
new file mode 100644
index 0000000000..8999768874
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c
@@ -0,0 +1 @@
+/* truncate64 is the same as truncate. */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c b/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c
new file mode 100644
index 0000000000..788f785dcf
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/xstat.c
@@ -0,0 +1,42 @@
+/* xstat using old-style Unix stat system call.  64 bit S/390 version.
+   Copyright (C) 2001 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc
+   will complain since they don't strictly match.  */
+#define __xstat64 __xstat64_disable
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+extern int __syscall_stat (const char *, struct stat *);
+
+/* Get information about the file NAME in BUF.  */
+int
+__xstat (int vers, const char *name, struct stat *buf)
+{
+  return INLINE_SYSCALL (stat, 2, name, buf);
+}
+
+weak_alias (__xstat, _xstat);
+#undef __xstat64
+strong_alias (__xstat, __xstat64);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c b/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c
new file mode 100644
index 0000000000..e7acd3b45e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c
@@ -0,0 +1 @@
+/* xstat64 is in xstat.c */