--- /dev/null
+diff -Nur emacs-20.7.orig/configure.in emacs-20.7/configure.in
+--- emacs-20.7.orig/configure.in Thu Sep 28 21:47:46 2000
++++ emacs-20.7/configure.in Thu Sep 28 21:58:50 2000
+@@ -787,6 +787,12 @@
+ machine=stride opsys=usg5-2
+ ;;
+
++ ## IBM S/390
++
++ s390-*-linux-gnu* )
++ machine=s390-linux opsys=gnu-linux
++ ;;
++
+ ## Suns
+ sparc-*-linux-gnu* | sparc64-*-linux-gnu* )
+ machine=sparc opsys=gnu-linux
+diff -Nur emacs-20.7.orig/etc/MACHINES emacs-20.7/etc/MACHINES
+--- emacs-20.7.orig/etc/MACHINES Mon Aug 2 14:56:48 1999
++++ emacs-20.7/etc/MACHINES Thu Sep 28 21:58:50 2000
+@@ -566,6 +566,13 @@
+
+ window.c must not be compiled with -O on AIX.
+
++IBM S/390 running Linux (s390-*-linux-gnu)
++
++ Builds with usual autoconf patches and a proper machine definition.
++ This architecture is very new and it's compiler has some bugs.
++ The binary is tested for basic functionality, but some hidden
++ bugs can be expected.
++
+ Integrated Solutions `Optimum V' (m68k-isi-bsd4.2 or -bsd4.3)
+
+ 18.52 said to work on some sort of ISI machine.
+diff -Nur emacs-20.7.orig/src/m/s390-linux.h emacs-20.7/src/m/s390-linux.h
+--- emacs-20.7.orig/src/m/s390-linux.h Thu Jan 1 01:00:00 1970
++++ emacs-20.7/src/m/s390-linux.h Thu Sep 28 21:58:50 2000
+@@ -0,0 +1,121 @@
++/* machine description file template.
++ Copyright (C) 1985, 1986 Free Software Foundation, Inc.
++
++This file is part of GNU Emacs.
++
++GNU Emacs is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GNU Emacs 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 General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GNU Emacs; see the file COPYING. If not, write to
++the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA. */
++
++
++/* The following line tells the configuration script what sort of
++ operating system this machine is likely to run.
++ USUAL-OPSYS="<name of system .h file here, without the s- or .h>" */
++
++/* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
++ is the most significant byte. */
++
++#define WORDS_BIG_ENDIAN
++
++/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
++ * group of arguments and treat it as an array of the arguments. */
++
++#define NO_ARG_ARRAY
++
++/* Define WORD_MACHINE if addresses and such have
++ * to be corrected before they can be used as byte counts. */
++
++#define WORD_MACHINE
++
++/* Now define a symbol for the cpu type, if your compiler
++ does not define it automatically:
++ Ones defined so far include vax, m68000, ns16000, pyramid,
++ orion, tahoe, APOLLO and many others */
++
++/* Use type int rather than a union, to represent Lisp_Object */
++/* This is desirable for most machines. */
++
++#define NO_UNION_TYPE
++
++/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
++ the 24-bit bit field into an int. In other words, if bit fields
++ are always unsigned.
++
++ If you use NO_UNION_TYPE, this flag does not matter. */
++
++#undef EXPLICIT_SIGN_EXTEND
++
++/* Data type of load average, as read out of kmem. */
++
++#define LOAD_AVE_TYPE long
++
++/* Convert that into an integer that is 100 for a load average of 1.0 */
++
++#define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
++
++/* Define CANNOT_DUMP on machines where unexec does not work.
++ Then the function dump-emacs will not be defined
++ and temacs will do (load "loadup") automatically unless told otherwise. */
++
++#undef CANNOT_DUMP
++
++/* Define VIRT_ADDR_VARIES if the virtual addresses of
++ pure and impure space as loaded can vary, and even their
++ relative order cannot be relied on.
++
++ Otherwise Emacs assumes that text space precedes data space,
++ numerically. */
++
++#define VIRT_ADDR_VARIES
++
++/* Define C_ALLOCA if this machine does not support a true alloca
++ and the one written in C should be used instead.
++ Define HAVE_ALLOCA to say that the system provides a properly
++ working alloca function and it should be used.
++ Define neither one if an assembler-language alloca
++ in the file alloca.s should be used. */
++
++#undef C_ALLOCA
++#define HAVE_ALLOCA
++
++/* Define NO_REMAP if memory segmentation makes it not work well
++ to change the boundary between the text section and data section
++ when Emacs is dumped. If you define this, the preloaded Lisp
++ code will not be sharable; but that's better than failing completely. */
++
++#undef NO_REMAP
++
++/* Some really obscure 4.2-based systems (like Sequent DYNIX)
++ * do not support asynchronous I/O (using SIGIO) on sockets,
++ * even though it works fine on tty's. If you have one of
++ * these systems, define the following, and then use it in
++ * config.h (or elsewhere) to decide when (not) to use SIGIO.
++ *
++ * You'd think this would go in an operating-system description file,
++ * but since it only occurs on some, but not all, BSD systems, the
++ * reasonable place to select for it is in the machine description
++ * file.
++ */
++
++#undef NO_SOCK_SIGIO
++
++
++/* After adding support for a new system, modify the large case
++ statement in the `configure' script to recognize reasonable
++ configuration names, and add a description of the system to
++ `etc/MACHINES'.
++
++ If you've just fixed a problem in an existing configuration file,
++ you should also check `etc/MACHINES' to make sure its descriptions
++ of known problems in that configuration should be updated. */