diff -urPX exclude-gcc gcc-2.6.3-orig/Makefile.in gcc-2.6.3/Makefile.in
--- gcc-2.6.3-orig/Makefile.in	Mon Dec  5 20:00:18 1994
+++ gcc-2.6.3/Makefile.in	Wed Mar 22 21:11:57 1995
@@ -330,6 +330,9 @@
 # Extra symbols for fixproto to define when parsing headers.
 FIXPROTO_DEFINES = 
 
+# Extra flags to use when compiling crt{begin,end}.o.
+CRTSTUFF_T_CFLAGS = 
+
 # End of variables for you to override.
 
 # Definition of `all' is here so that new rules inserted by sed
@@ -930,13 +933,13 @@
 # Compile two additional files that are linked with every program
 # linked using GCC on system V, for the sake of C++ constructors.
 crtbegin.o:	crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_BEGIN \
-	  -finhibit-size-directive -fno-inline-functions \
+	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+	  -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
 	  -g0 -c $(srcdir)/crtstuff.c -o crtbegin.o
 
 crtend.o:	crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_END \
-	  -finhibit-size-directive -fno-inline-functions \
+	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+	  -DCRT_END -finhibit-size-directive -fno-inline-functions \
 	  -g0 -c $(srcdir)/crtstuff.c -o crtend.o
 
 # Compiling object files from source files.
diff -urPX exclude-gcc gcc-2.6.3-orig/c-common.c gcc-2.6.3/c-common.c
--- gcc-2.6.3-orig/c-common.c	Mon Dec  5 20:00:22 1994
+++ gcc-2.6.3/c-common.c	Sun May  7 02:36:53 1995
@@ -301,23 +301,32 @@
 	  = IDENTIFIER_POINTER (TREE_VALUE (args));
 
 	/* Give this decl a type with the specified mode.  */
-	for (i = 0; i < NUM_MACHINE_MODES; i++)
-	  if (!strcmp (specified_name, GET_MODE_NAME (i)))
-	    {
-	      tree typefm
-		= type_for_mode (i, TREE_UNSIGNED (type));
-	      if (typefm != 0)
-		{
-		  TREE_TYPE (decl) = type = typefm;
-		  DECL_SIZE (decl) = 0;
-		  layout_decl (decl, 0);
-		}
-	      else
-		error ("no data type for mode `%s'", specified_name);
+	if (!strcmp (specified_name, "__word__")
+	    || !strcmp (specified_name, "word"))
+	  i = word_mode;
+	else if (!strcmp (specified_name, "__byte__")
+		 || !strcmp (specified_name, "byte"))
+	  i = byte_mode;
+	else
+	  for (i = 0; i < NUM_MACHINE_MODES; i++)
+	    if (!strcmp (specified_name, GET_MODE_NAME (i)))
 	      break;
-	    }
+
 	if (i == NUM_MACHINE_MODES)
 	  error_with_decl (decl, "unknown machine mode `%s'", specified_name);
+	else
+	  {
+	    tree typefm
+	      = type_for_mode (i, TREE_UNSIGNED (type));
+	    if (typefm != 0)
+	      {
+		TREE_TYPE (decl) = type = typefm;
+		DECL_SIZE (decl) = 0;
+		layout_decl (decl, 0);
+	      }
+	    else
+	      error ("no data type for mode `%s'", specified_name);
+	  }
       }
     else if ((!strcmp (IDENTIFIER_POINTER (name), "section")
 	      || !strcmp (IDENTIFIER_POINTER (name), "__section__"))
diff -urPX exclude-gcc gcc-2.6.3-orig/c-lex.c gcc-2.6.3/c-lex.c
--- gcc-2.6.3-orig/c-lex.c	Mon Jul 18 19:21:34 1994
+++ gcc-2.6.3/c-lex.c	Mon Jul 18 22:08:40 1994
@@ -47,9 +47,6 @@
    It is indexed by a RID_... value.  */
 tree ridpointers[(int) RID_MAX];
 
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
 /* the declaration found for the last IDENTIFIER token read in.
    yylex must look this up to detect typedefs, which get token type TYPENAME,
    so it is left around in case the identifier is not a typedef but is
diff -urPX exclude-gcc gcc-2.6.3-orig/c-parse.in gcc-2.6.3/c-parse.in
--- gcc-2.6.3-orig/c-parse.in	Fri Nov  4 21:56:43 1994
+++ gcc-2.6.3/c-parse.in	Sun Feb 12 00:50:39 1995
@@ -85,9 +85,6 @@
 
 /* Like YYERROR but do call yyerror.  */
 #define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
 %}
 
 %start program
@@ -1879,6 +1876,7 @@
 	    if ($<itype>5)
 	      iterator_for_loop_end ($3);
 	  }
+	;
 
 /*  This really should allow any kind of declaration,
     for generality.  Fix it before turning it back on.
@@ -1903,6 +1901,7 @@
 	    else
 	      pop_momentary ();	    
 	  }
+	;
 */
 
 /* Any kind of label, including jump labels and case labels.
@@ -2172,12 +2171,14 @@
 		{
 		  objc_declare_class ($2);
 		}
+	;
 
 aliasdecl:
 	  ALIAS identifier identifier ';'
 		{
 		  objc_declare_alias ($2, $3);
 		}
+	;
 
 classdef:
 	  INTERFACE identifier protocolrefs '{'
diff -urPX exclude-gcc gcc-2.6.3-orig/combine.c gcc-2.6.3/combine.c
--- gcc-2.6.3-orig/combine.c	Mon Dec  5 20:00:38 1994
+++ gcc-2.6.3/combine.c	Fri Jan 27 20:05:32 1995
@@ -1241,6 +1241,7 @@
 
   added_links_insn = 0;
 
+#if 0
   /* First check for one important special-case that the code below will
      not handle.  Namely, the case where I1 is zero, I2 has multiple sets,
      and I3 is a SET whose SET_SRC is a SET_DEST in I2.  In that case,
@@ -1316,6 +1317,7 @@
 	      goto validate_replacement;
 	    }
     }
+#endif
 
 #ifndef HAVE_cc0
   /* If we have no I1 and I2 looks like:
@@ -3994,7 +3996,7 @@
 
   /* Look for MIN or MAX.  */
 
-  if ((! FLOAT_MODE_P (mode) | flag_fast_math)
+  if ((! FLOAT_MODE_P (mode) || flag_fast_math)
       && comparison_p
       && rtx_equal_p (XEXP (cond, 0), true)
       && rtx_equal_p (XEXP (cond, 1), false)
diff -urPX exclude-gcc gcc-2.6.3-orig/config/linux-aout.h gcc-2.6.3/config/linux-aout.h
--- gcc-2.6.3-orig/config/linux-aout.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/linux-aout.h	Sat May 27 15:47:00 1995
@@ -0,0 +1,50 @@
+/* Definitions for Linux
+   Copyright (C) 1995 Free Software Foundation, Inc.
+   Contributed by H.J. Lu (hjl@nynexst.com)
+
+This file is part of GNU CC.
+
+GNU CC 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 CC 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 CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* Don't assume anything about the header files. */
+#define NO_IMPLICIT_EXTERN_C
+
+#undef HAVE_ATEXIT
+#define HAVE_ATEXIT
+
+/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+   For now, we play safe. It may change later. */
+
+#if 0
+#undef MULTIBYTE_CHARS
+#define MULTIBYTE_CHARS	1
+#endif
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC  "%{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}} %{static:-static}"
+
+/* There are conflicting reports about whether this system uses
+   a different assembler syntax.  wilson@cygnus.com says # is right.  */
+#undef COMMENT_BEGIN
+#define COMMENT_BEGIN "#"
+
+#undef ASM_APP_ON
+#define ASM_APP_ON "#APP\n"
+
+#undef ASM_APP_OFF
+#define ASM_APP_OFF "#NO_APP\n"
+
+/* We need that too. */
+#define HANDLE_SYSV_PRAGMA
diff -urPX exclude-gcc gcc-2.6.3-orig/config/linux.h gcc-2.6.3/config/linux.h
--- gcc-2.6.3-orig/config/linux.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/linux.h	Wed Apr 19 04:38:03 1995
@@ -0,0 +1,87 @@
+/* Definitions for Linux with ELF format
+   Copyright (C) 1995 Free Software Foundation, Inc.
+   Contributed by Eric Youngdale.
+   Modified for stabs-in-ELF by H.J. Lu.
+
+This file is part of GNU CC.
+
+GNU CC 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 CC 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 CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* Don't assume anything about the header files. */
+#define NO_IMPLICIT_EXTERN_C
+
+#undef HAVE_ATEXIT
+#define HAVE_ATEXIT
+
+/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+   For now, we play safe. It may change later. */
+
+#if 0
+#undef MULTIBYTE_CHARS
+#define MULTIBYTE_CHARS 1
+#endif
+
+/* There are conflicting reports about whether this system uses
+   a different assembler syntax.  wilson@cygnus.com says # is right.  */
+#undef COMMENT_BEGIN
+#define COMMENT_BEGIN "#"
+
+#undef ASM_APP_ON
+#define ASM_APP_ON "#APP\n"
+
+#undef ASM_APP_OFF
+#define ASM_APP_OFF "#NO_APP\n"
+
+/* Use stabs instead of DWARF debug format.  */
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+#include "svr4.h"
+
+#undef MD_EXEC_PREFIX
+#undef MD_STARTFILE_PREFIX
+
+/* Output at beginning of assembler file.  */
+/* The .file command should always begin the output.  */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE)						\
+  do {									\
+	output_file_directive (FILE, main_input_filename);		\
+	fprintf (FILE, "\t.version\t\"01.01\"\n");			\
+  } while (0)
+
+#undef	LIBGCC_SPEC
+#define LIBGCC_SPEC \
+  "%{!shared:-lgcc}"
+
+
+/* Provide a STARTFILE_SPEC appropriate for Linux.  Here we add
+   the Linux magical crtbegin.o file (see crtstuff.c) which
+   provides part of the support for getting C++ file-scope static
+   object constructed before entering `main'. */
+   
+#undef	STARTFILE_SPEC
+#define STARTFILE_SPEC \
+  "%{!shared: \
+     %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
+   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+
+/* Provide a ENDFILE_SPEC appropriate for Linux.  Here we tack on
+   the Linux magical crtend.o file (see crtstuff.c) which
+   provides part of the support for getting C++ file-scope static
+   object constructed before entering `main', followed by a normal
+   Linux "finalizer" file, `crtn.o'.  */
+
+#undef	ENDFILE_SPEC
+#define ENDFILE_SPEC \
+  "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/linux-aout.h gcc-2.6.3/config/m68k/linux-aout.h
--- gcc-2.6.3-orig/config/m68k/linux-aout.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/m68k/linux-aout.h	Tue May 30 23:07:34 1995
@@ -0,0 +1,63 @@
+/* Definitions for Motorola m68k running Linux */
+
+#include "m68k/m68k.h"
+#include "linux-aout.h"
+
+/* 68020 with 68881 */
+#define TARGET_DEFAULT 7
+
+#define DBX_DEBUGGING_INFO
+
+#define CPP_PREDEFINES \
+  "-Dunix -Dmc68000 -Dmc68020 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(m68k) -Amachine(m68k)"
+
+#undef CPP_SPEC
+#if TARGET_DEFAULT & 2
+#define CPP_SPEC \
+  "%{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE}"
+#else
+#define CPP_SPEC \
+  "%{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE}"
+#endif
+
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES	{"ieee-fp", 0},
+
+#undef ASM_SPEC
+#define ASM_SPEC \
+  "%{m68030} %{m68040} %{fpic:-k} %{fPIC:-k}"
+
+#undef LIB_SPEC
+#if 1
+/* We no longer link with libc_p.a or libg.a by default.  If you want
+   to profile or debug the Linux C library, please add -lc_p or -ggdb
+   to LDFLAGS at the link time, respectively.  */
+#define LIB_SPEC \
+  "%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}"
+#else
+#define LIB_SPEC \
+  "%{mieee-fp:-lieee} %{p:-lgmon -lc_p} %{pg:-lgmon -lc_p} %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}"
+#endif
+
+/* We want to pass -v to linker */
+#undef LINK_SPEC
+#define LINK_SPEC	"-m m68klinux %{v:-dll-verbose}"
+
+/* Define this macro if the system header files support C++ as well
+   as C.  This macro inhibits the usual method of using system header
+   files in C++, which is to pretend that the file's contents are
+   enclosed in `extern "C" {...}'.  */
+#define NO_IMPLICIT_EXTERN_C
+
+#define SIZE_TYPE "unsigned int"
+#define PTRDIFF_TYPE "int"
+
+/* Generate calls to memcpy, memcmp and memset.  */
+#define TARGET_MEM_FUNCTIONS
+
+/* Don't default to pcc-struct-return, because gcc is the only compiler.  */
+#undef PCC_STATIC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* Allow folding division by zero.  */
+#define REAL_INFINITY
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/linux.h gcc-2.6.3/config/m68k/linux.h
--- gcc-2.6.3-orig/config/m68k/linux.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/m68k/linux.h	Sun Jun 11 22:27:38 1995
@@ -0,0 +1,277 @@
+/* Definitions for Motorola 68k running Linux with ELF format
+   Written by Andreas Schwab. */
+
+#define LINUX_DEFAULT_ELF
+#define LINUX_ELF
+
+#include "m68k/m68k.h"
+#include "linux.h"		/* some common stuff */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (68k Linux/ELF, MIT Syntax)");
+
+/* 68020 with 68881 */
+#define TARGET_DEFAULT 7
+
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES	{"ieee-fp", 0},
+
+/* Here are four prefixes that are used by asm_fprintf to
+   facilitate customization for alternate assembler syntaxes.
+   Machines with no likelihood of an alternate syntax need not
+   define these and need not use asm_fprintf.  */
+
+/* The prefix for register names.  Note that REGISTER_NAMES
+   is supposed to include this prefix. Also note that this is NOT an
+   fprintf format string, it is a literal string */
+
+#undef REGISTER_PREFIX
+#define REGISTER_PREFIX "%"
+
+/* The prefix for local (compiler generated) labels.
+   These labels will not appear in the symbol table. */
+
+#undef LOCAL_LABEL_PREFIX
+#define LOCAL_LABEL_PREFIX "."
+
+/* The prefix to add to user-visible assembler symbols. */
+
+#undef USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX ""
+
+/* How to refer to registers in assembler output.
+   This sequence is indexed by compiler's hard-register-number.
+   Motorola format uses different register names than defined in m68k.h. */
+
+#undef REGISTER_NAMES
+
+#ifndef SUPPORT_SUN_FPA
+
+#define REGISTER_NAMES \
+{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \
+ "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \
+ "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7" }
+
+#else /* SUPPORTED_SUN_FPA */
+
+#define REGISTER_NAMES \
+{"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \
+ "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \
+ "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", \
+ "%fpa0", "%fpa1", "%fpa2", "%fpa3", "%fpa4", "%fpa5", "%fpa6", "%fpa7", \
+ "%fpa8", "%fpa9", "%fpa10","%fpa11","%fpa12","%fpa13","%fpa14","%fpa15", \
+ "%fpa16","%fpa17","%fpa18","%fpa19","%fpa20","%fpa21","%fpa22","%fpa23", \
+ "%fpa24","%fpa25","%fpa26","%fpa27","%fpa28","%fpa29","%fpa30","%fpa31" }
+
+#endif /* defined SUPPORT_SUN_FPA */
+
+/* This defines which multi-letter switches take arguments.  On svr4,
+   there are no such switches except those implemented by GCC itself.
+   Add -dynamic-linker for linux. */
+
+#undef WORD_SWITCH_TAKES_ARG
+#define WORD_SWITCH_TAKES_ARG(STR)			\
+ ((DEFAULT_WORD_SWITCH_TAKES_ARG (STR)			\
+   && strcmp (STR, "Tdata") && strcmp (STR, "Ttext")	\
+   && strcmp (STR, "Tbss"))				\
+  || !strcmp (STR, "dynamic-linker"))
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+ 
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+  
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+   
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+
+#undef ASM_SPEC
+#define ASM_SPEC "%{m68030} %{m68040} %{fpic:-k} %{fPIC:-k}"
+
+#define CPP_PREDEFINES \
+  "-D__ELF__ -Dunix -Dmc68000 -Dmc68020 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(m68k) -Amachine(m68k)"
+
+#undef CPP_SPEC
+#if TARGET_DEFAULT & 2
+#define CPP_SPEC \
+  "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE}"
+#else
+#define CPP_SPEC \
+  "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE}"
+#endif
+
+#undef	LIB_SPEC
+#if 1
+/* We no longer link with libc_p.a or libg.a by default.  If you want
+   to profile or debug the Linux C library, please add -lc_p or -ggdb
+   to LDFLAGS at the link time, respectively.  */
+#define LIB_SPEC \
+  "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \
+     %{!ggdb:-lc} %{ggdb:-lg}}"
+#else
+#define LIB_SPEC \
+  "%{!shared: \
+    %{mieee-fp:-lieee} %{p:-lgmon -lc_p} %{pg:-lgmon -lc_p} \
+    %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}"
+#endif
+
+/* Provide a LINK_SPEC appropriate for Linux.  Here we provide support
+   for the special GCC options -static and -shared, which allow us to
+   link things in one of these three modes by applying the appropriate
+   combinations of options at link-time.  We like to support here for
+   as many of the other GNU linker options as possible.  But I don't
+   have the time to search for those flags.  I am sure how to add
+   support for -soname shared_object_name. H.J.
+
+   I took out %{v:%{!V:-V}}.  It is too much :-(.  They can use
+   -Wl,-V.
+
+   When the -shared link option is used a final link is not being
+   done.  */
+
+/* If ELF is the default format, we should not use /lib/elf. */
+
+#undef	LINK_SPEC
+#ifndef LINUX_DEFAULT_ELF
+#define LINK_SPEC "-m m68kelf %{shared} \
+  %{!shared: \
+    %{!static: \
+      %{dynamic-linker*} %{rpath*} \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker*:-dynamic-linker /lib/elf/ld-linux.so.1} \
+      %{!rpath*:-rpath /lib/elf/}} %{static}}"
+#else
+#define LINK_SPEC "-m m68kelf %{shared} \
+  %{!shared: \
+    %{!static: \
+      %{dynamic-linker*} \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker*:-dynamic-linker /lib/ld-linux.so.1}} \
+      %{static}}"
+#endif
+
+/* For compatibility with linux/a.out */
+
+#undef PCC_BITFIELD_TYPE_MATTERS
+
+/* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to
+   keep switch tables in the text section.  */
+   
+#define JUMP_TABLES_IN_TEXT_SECTION 1
+
+/* Use the default action for outputting the case label.  */
+#undef ASM_OUTPUT_CASE_LABEL
+
+#define ASM_RETURN_CASE_JUMP \
+  return "jmp %%pc@(2,%0:w)"
+
+/* This is how to output an assembler line that says to advance the
+   location counter to a multiple of 2**LOG bytes.  */
+
+#undef ASM_OUTPUT_ALIGN
+#define ASM_OUTPUT_ALIGN(FILE,LOG)				\
+  if ((LOG) > 0)						\
+    fprintf ((FILE), "\t%s \t%u\n", ALIGN_ASM_OP, 1 << (LOG));
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+
+#undef FUNCTION_PROFILER
+#define FUNCTION_PROFILER(FILE, LABELNO) \
+{									\
+  asm_fprintf (FILE, "\tlea %Rpc@(%LLP%d),%Ra1\n", (LABELNO));		\
+  if (flag_pic)								\
+    fprintf (FILE, "\tbsrl _mcount:PLTPC\n");				\
+  else									\
+    fprintf (FILE, "\tjbsr _mcount\n");					\
+}
+
+/* Define how the m68k registers should be numbered for Dwarf output.
+   The numbering provided here should be compatible with the native
+   SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7 are
+   0-7, a0-a8 are 8-15, and fp0-fp7 are 16-23.  */
+
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+
+/* Allow folding division by zero.  */
+#define REAL_INFINITY
+
+/* 1 if N is a possible register number for a function value.  For
+   m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral,
+   pointer, or floating types, respectively.  Reject fp0 if not using
+   a 68881 coprocessor.  */
+
+#undef FUNCTION_VALUE_REGNO_P
+#define FUNCTION_VALUE_REGNO_P(N) \
+  ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16))
+
+/* Define this to be true when FUNCTION_VALUE_REGNO_P is true for
+   more than one register.  */
+
+#undef NEEDS_UNTYPED_CALL
+#define NEEDS_UNTYPED_CALL 1
+
+/* Define how to generate (in the callee) the output value of a
+   function and how to find (in the caller) the value returned by a
+   function.  VALTYPE is the data type of the value (as a tree).  If
+   the precise function being called is known, FUNC is its
+   FUNCTION_DECL; otherwise, FUNC is 0.  For m68k/SVR4 generate the
+   result in d0, a0, or fp0 as appropriate. */
+   
+#undef FUNCTION_VALUE
+#define FUNCTION_VALUE(VALTYPE, FUNC)					\
+  (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881			\
+   ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16)				\
+   : (TREE_CODE (VALTYPE) == POINTER_TYPE				\
+      ? gen_rtx (REG, TYPE_MODE (VALTYPE), 8)				\
+      : gen_rtx (REG, TYPE_MODE (VALTYPE), 0)))
+
+/* For compatibility with the large body of existing code which does
+   not always properly declare external functions returning pointer
+   types, the m68k/SVR4 convention is to copy the value returned for
+   pointer functions from a0 to d0 in the function epilogue, so that
+   callers that have neglected to properly declare the callee can
+   still find the correct return value.  */
+
+extern int current_function_returns_pointer;
+#define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE)				\
+do {									\
+  if ((current_function_returns_pointer) && 				\
+      ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode))	\
+    asm_fprintf (FILE, "\tmovel %Ra0,%Rd0\n");				\
+} while (0);
+
+/* Define how to find the value returned by a library function
+   assuming the value has mode MODE.
+   For m68k/SVR4 look for integer values in d0, pointer values in d0
+   (returned in both d0 and a0), and floating values in fp0.  */
+
+#undef LIBCALL_VALUE
+#define LIBCALL_VALUE(MODE)						\
+  (((MODE) == SFmode || (MODE) == DFmode) && TARGET_68881		\
+   ? gen_rtx (REG, (MODE), 16)						\
+   : gen_rtx (REG, (MODE), 0))
+
+/* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is
+   an operand of a function call. */
+#undef LEGITIMATE_PIC_OPERAND_P
+#define LEGITIMATE_PIC_OPERAND_P(X) \
+  (! symbolic_operand (X, VOIDmode) \
+   || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)))
+
+/* Turn off function cse if we are doing PIC. We always want function
+   call to be done as `bsr foo@PLTPC', so it will force the assembler
+   to create the PLT entry for `foo'.  Doing function cse will cause
+   the address of `foo' to be loaded into a register, which is exactly
+   what we want to avoid when we are doing PIC on svr4 m68k.  */
+#undef SUBTARGET_OVERRIDE_OPTIONS
+#define SUBTARGET_OVERRIDE_OPTIONS \
+  if (flag_pic) flag_no_function_cse = 1;
+
+/* For m68k SVR4, structures are returned using the reentrant
+   technique. */
+#undef PCC_STATIC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/m68k.c gcc-2.6.3/config/m68k/m68k.c
--- gcc-2.6.3-orig/config/m68k/m68k.c	Tue Nov 15 19:46:02 1994
+++ gcc-2.6.3/config/m68k/m68k.c	Wed Apr  5 22:32:33 1995
@@ -62,7 +62,11 @@
 finalize_pic ()
 {
   if (flag_pic && current_function_uses_pic_offset_table)
-    emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
+    {
+      rtx insn = gen_rtx (USE, VOIDmode, pic_offset_table_rtx);
+      emit_insn_after (insn, get_insns ());
+      emit_insn (insn);
+    }
 }
 
 
@@ -235,12 +239,17 @@
       asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
 		   reg_names[PIC_OFFSET_TABLE_REGNUM]);
 #else
+#ifdef LINUX_ELF
+      asm_fprintf (stream, "\tlea %Rpc@(%U_GLOBAL_OFFSET_TABLE_:GOTPC), %s\n",
+		   reg_names[PIC_OFFSET_TABLE_REGNUM]);
+#else
       asm_fprintf (stream, "\tmovel %0I__GLOBAL_OFFSET_TABLE_, %s\n",
 		   reg_names[PIC_OFFSET_TABLE_REGNUM]);
       asm_fprintf (stream, "\tlea %Rpc@(0,%s:l),%s\n",
 		   reg_names[PIC_OFFSET_TABLE_REGNUM],
 		   reg_names[PIC_OFFSET_TABLE_REGNUM]);
 #endif
+#endif
     }
 }
 
@@ -2163,10 +2172,15 @@
 	    if (addr != 0)
 	      {
 		output_addr_const (file, addr);
+#ifdef LINUX_ELF
+	        if (flag_pic && breg == pic_offset_table_rtx)
+	          fprintf (file, ":GOT");
+#else
 	        if ((flag_pic == 1) && (breg == pic_offset_table_rtx))
 	          fprintf (file, ":w");
 	        if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
 	          fprintf (file, ":l");
+#endif
 	      }
 	    if (addr != 0 && ireg != 0)
 	      {
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/m68k.h gcc-2.6.3/config/m68k/m68k.h
--- gcc-2.6.3-orig/config/m68k/m68k.h	Tue Nov 15 19:46:04 1994
+++ gcc-2.6.3/config/m68k/m68k.h	Tue Apr  4 01:12:55 1995
@@ -344,21 +344,9 @@
    compiler's mitts completely off it.  We don't bother to zero it out
    of register classes.  If neither TARGET_FPA or TARGET_68881 is set,
    the compiler won't touch since no instructions that use these
-   registers will be valid.  
+   registers will be valid.  */
 
-   Reserve PIC_OFFSET_TABLE_REGNUM (a5) for doing PIC relocation if
-   position independent code is being generated by making it a 
-   fixed register */
-
-#ifndef SUPPORT_SUN_FPA
-
-#define CONDITIONAL_REGISTER_USAGE \
-{                                               \
-  if (flag_pic)                                 \
-    fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
-}
-
-#else /* defined SUPPORT_SUN_FPA */
+#ifdef SUPPORT_SUN_FPA
 
 #define CONDITIONAL_REGISTER_USAGE \
 { 						\
@@ -378,8 +366,6 @@
        if (TEST_HARD_REG_BIT (x, i)) 		\
 	fixed_regs[i] = call_used_regs[i] = 1; 	\
     } 						\
-  if (flag_pic)                                 \
-    fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
 }
 
 #endif /* defined SUPPORT_SUN_FPA */
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/m68k.md gcc-2.6.3/config/m68k/m68k.md
--- gcc-2.6.3-orig/config/m68k/m68k.md	Mon Dec  5 20:00:45 1994
+++ gcc-2.6.3/config/m68k/m68k.md	Thu Mar  2 23:14:39 1995
@@ -1018,6 +1018,17 @@
 	  return \"st %0\";
 	}
     }
+  if (GET_CODE (operands[1]) == CONST_INT
+      && DATA_REG_P (operands[0])
+      && INTVAL (operands[1]) < 128
+      && INTVAL (operands[1]) >= -128)
+    {
+#if defined(MOTOROLA) && !defined(CRDS)
+      return \"moveq%.l %1,%0\";
+#else
+      return \"moveq %1,%0\";
+#endif
+    }
   if (GET_CODE (operands[1]) != CONST_INT && CONSTANT_P (operands[1]))
     return \"move%.l %1,%0\";
   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
@@ -3477,7 +3488,7 @@
 (define_insn "ashlsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")
 	(ashift:SI (match_operand:SI 1 "register_operand" "0")
-		   (match_operand:SI 2 "general_operand" "dI")))]
+		   (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "*
 {
@@ -3489,14 +3500,14 @@
 (define_insn "ashlhi3"
   [(set (match_operand:HI 0 "register_operand" "=d")
 	(ashift:HI (match_operand:HI 1 "register_operand" "0")
-		   (match_operand:HI 2 "general_operand" "dI")))]
+		   (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "asl%.w %2,%0")
 
 (define_insn ""
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
 	(ashift:HI (match_dup 0)
-		   (match_operand:HI 1 "general_operand" "dI")))]
+		   (match_operand:QI 1 "general_operand" "dI")))]
   ""
   "asl%.w %1,%0")
 
@@ -3540,21 +3551,21 @@
 (define_insn "ashrsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")
 	(ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
-		     (match_operand:SI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "asr%.l %2,%0")
 
 (define_insn "ashrhi3"
   [(set (match_operand:HI 0 "register_operand" "=d")
 	(ashiftrt:HI (match_operand:HI 1 "register_operand" "0")
-		     (match_operand:HI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "asr%.w %2,%0")
 
 (define_insn ""
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
 	(ashiftrt:HI (match_dup 0)
-		     (match_operand:HI 1 "general_operand" "dI")))]
+		     (match_operand:QI 1 "general_operand" "dI")))]
   ""
   "asr%.w %1,%0")
 
@@ -3606,21 +3617,21 @@
 (define_insn "lshrsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")
 	(lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
-		     (match_operand:SI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "lsr%.l %2,%0")
 
 (define_insn "lshrhi3"
   [(set (match_operand:HI 0 "register_operand" "=d")
 	(lshiftrt:HI (match_operand:HI 1 "register_operand" "0")
-		     (match_operand:HI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "lsr%.w %2,%0")
 
 (define_insn ""
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
 	(lshiftrt:HI (match_dup 0)
-		     (match_operand:HI 1 "general_operand" "dI")))]
+		     (match_operand:QI 1 "general_operand" "dI")))]
   ""
   "lsr%.w %1,%0")
 
@@ -3643,14 +3654,14 @@
 (define_insn "rotlsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")
 	(rotate:SI (match_operand:SI 1 "register_operand" "0")
-		   (match_operand:SI 2 "general_operand" "dI")))]
+		   (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "rol%.l %2,%0")
 
 (define_insn "rotlhi3"
   [(set (match_operand:HI 0 "register_operand" "=d")
 	(rotate:HI (match_operand:HI 1 "register_operand" "0")
-		   (match_operand:HI 2 "general_operand" "dI")))]
+		   (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "rol%.w %2,%0")
 
@@ -3658,7 +3669,7 @@
 (define_insn ""
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
 	(rotate:HI (match_dup 0)
-		   (match_operand:HI 1 "general_operand" "dI")))]
+		   (match_operand:QI 1 "general_operand" "dI")))]
   ""
   "rol%.w %1,%0")
 
@@ -3679,21 +3690,21 @@
 (define_insn "rotrsi3"
   [(set (match_operand:SI 0 "register_operand" "=d")
 	(rotatert:SI (match_operand:SI 1 "register_operand" "0")
-		     (match_operand:SI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "ror%.l %2,%0")
 
 (define_insn "rotrhi3"
   [(set (match_operand:HI 0 "register_operand" "=d")
 	(rotatert:HI (match_operand:HI 1 "register_operand" "0")
-		     (match_operand:HI 2 "general_operand" "dI")))]
+		     (match_operand:QI 2 "general_operand" "dI")))]
   ""
   "ror%.w %2,%0")
 
 (define_insn ""
   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
 	(rotatert:HI (match_dup 0)
-		     (match_operand:HI 1 "general_operand" "dI")))]
+		     (match_operand:QI 1 "general_operand" "dI")))]
   ""
   "ror%.w %1,%0")
 
@@ -4773,9 +4784,13 @@
 #ifdef MOTOROLA
     SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
 #else
+#ifdef LINUX_ELF
+    SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
+#else
     operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
 			   force_reg (Pmode, XEXP (operands[0], 0)));
 #endif
+#endif
 }")
 
 ;; This is a normal call sequence.
@@ -4814,6 +4829,12 @@
 #else
     return \"bsr %0@PLTPC\";
 #endif
+#else
+#ifdef LINUX_ELF
+  if (GET_CODE (operands[0]) == MEM 
+      && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
+    return \"bsrl %0:PLTPC\";
+#endif
 #endif
   return \"jsr %0\";
 ")
@@ -4833,9 +4854,13 @@
 #ifdef MOTOROLA
     SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
 #else
+#ifdef LINUX_ELF
+    SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
+#else
     operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
 			   force_reg (Pmode, XEXP (operands[1], 0)));
 #endif
+#endif
 }")
 
 ;; This is a normal call_value
@@ -4874,6 +4899,12 @@
 #else
     return \"bsr %1@PLTPC\";
 #endif
+#else
+#ifdef LINUX_ELF
+  if (GET_CODE (operands[1]) == MEM 
+      && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
+    return \"bsrl %1:PLTPC\";
+#endif
 #endif
   return \"jsr %1\";
 ")
@@ -5182,6 +5213,52 @@
 	  (if_then_else
 	    (ge (plus:SI (match_operand:SI 0 "register_operand" "+d")
 		         (const_int -1))
+	        (const_int 0))
+	    (label_ref (match_operand 1 "" ""))
+	    (pc)))
+     (set (match_dup 0)
+	  (plus:SI (match_dup 0)
+		   (const_int -1)))])]
+  "DATA_REG_P (operands[0])"
+  "*
+{
+  CC_STATUS_INIT;
+  output_dbcc_and_branch (operands);
+  return \"\";
+}")
+
+(define_peephole
+  [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
+                             [(cc0) (const_int 0)])
+                           (label_ref (match_operand 2 "" ""))
+                           (pc)))
+   (parallel
+    [(set (pc)
+	  (if_then_else
+	    (ne (match_operand:HI 0 "register_operand" "+d")
+	        (const_int 0))
+	    (label_ref (match_operand 1 "" ""))
+	    (pc)))
+     (set (match_dup 0)
+	  (plus:HI (match_dup 0)
+		   (const_int -1)))])]
+  "DATA_REG_P (operands[0])"
+  "*
+{
+  CC_STATUS_INIT;
+  output_dbcc_and_branch (operands);
+  return \"\";
+}")
+
+(define_peephole
+  [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
+                             [(cc0) (const_int 0)])
+                           (label_ref (match_operand 2 "" ""))
+                           (pc)))
+   (parallel
+    [(set (pc)
+	  (if_then_else
+	    (ne (match_operand:SI 0 "register_operand" "+d")
 	        (const_int 0))
 	    (label_ref (match_operand 1 "" ""))
 	    (pc)))
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/t-linux gcc-2.6.3/config/m68k/t-linux
--- gcc-2.6.3-orig/config/m68k/t-linux	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/m68k/t-linux	Mon May  8 21:50:43 1995
@@ -0,0 +1,2 @@
+# Don't make libgcc1.a
+LIBGCC1 =
diff -urPX exclude-gcc gcc-2.6.3-orig/config/m68k/xm-linux.h gcc-2.6.3/config/m68k/xm-linux.h
--- gcc-2.6.3-orig/config/m68k/xm-linux.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/m68k/xm-linux.h	Sat May  6 14:45:51 1995
@@ -0,0 +1,4 @@
+/* Configuration for GCC for Motorola m68k running Linux. */
+
+#include "m68k/xm-m68k.h"
+#include "xm-linux.h"
diff -urPX exclude-gcc gcc-2.6.3-orig/config/svr4.h gcc-2.6.3/config/svr4.h
--- gcc-2.6.3-orig/config/svr4.h	Sat Nov  5 14:10:28 1994
+++ gcc-2.6.3/config/svr4.h	Mon May  8 21:44:54 1995
@@ -1,7 +1,7 @@
-/* svr4.h  --  operating system specific defines to be used when
-   targeting GCC for some generic System V Release 4 system.
-   Copyright (C) 1991, 1994 Free Software Foundation, Inc.
-   Contributed by Ron Guilmette (rfg@netcom.com).
+/* Operating system specific defines to be used when targeting GCC for some
+   generic System V Release 4 system.
+   Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
+   Contributed by Ron Guilmette (rfg@segfault.us.com).
 
 This file is part of GNU CC.
 
@@ -127,13 +127,11 @@
 #undef	LIB_SPEC
 #define LIB_SPEC "%{!shared:%{!symbolic:-lc}}"
 
-/* Provide a LIB_SPEC_2 appropriate for svr4.  We don't want to include
-   libgcc, but various SVR4 implementations may want to specify some
-   dependencies.  */
-
-#undef  LIB_SPEC_2
-#define LIB_SPEC_2 \
-  "%{!shared:%{!symbolic:-lgcc}} %L %{!shared:%{!symbolic:-lgcc}}"
+/* Provide a LIBGCC_SPEC appropriate for svr4.  We also want to exclude
+   libgcc when -symbolic.  */
+
+#undef  LIBGCC_SPEC
+#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}"
 
 /* Provide an ENDFILE_SPEC appropriate for svr4.  Here we tack on our own
    magical crtend.o file (see crtstuff.c) which provides part of the
@@ -142,7 +140,7 @@
    which is either `gcrtn.o' or `crtn.o'.  */
 
 #undef  ENDFILE_SPEC
-#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}"
+#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
 
 /* Provide a LINK_SPEC appropriate for svr4.  Here we provide support
    for the special GCC options -static, -shared, and -symbolic which
@@ -171,8 +169,8 @@
 #define LINK_SPEC "%{h*} %{V} %{v:%{!V:-V}} \
 		   %{b} %{Wl,*:%*} \
 		   %{static:-dn -Bstatic} \
-		   %{shared:-G -dy -z text} \
-		   %{symbolic:-Bsymbolic -G -dy -z text} \
+		   %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
+		   %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
 		   %{G:-G} \
 		   %{YP,*} \
 		   %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
@@ -302,10 +300,11 @@
 do									\
   {									\
     static int sym_lineno = 1;						\
-    fprintf (file, ".stabn 68,0,%d,.LM%d-%s\n.LM%d:\n",			\
-	     line, sym_lineno, 						\
-	     XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0), 	\
-	     sym_lineno);						\
+    fprintf (file, ".stabn 68,0,%d,.LM%d-",				\
+	     line, sym_lineno);						\
+    assemble_name (file,						\
+		   XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\
+    fprintf (file, "\n.LM%d:\n", sym_lineno);				\
     sym_lineno += 1;							\
   }									\
 while (0)
@@ -315,6 +314,14 @@
 
 #define DBX_FUNCTION_FIRST
 
+/* Generate a blank trailing N_SO to mark the end of the .o file, since
+   we can't depend upon the linker to mark .o file boundaries with
+   embedded stabs.  */
+
+#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME)			\
+  fprintf (FILE,							\
+	   "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO)
+
 /* Define the actual types of some ANSI-mandated types.  (These
    definitions should work for most SVR4 systems).  */
 
@@ -495,8 +502,8 @@
    errors unless the .ctors and .dtors sections are marked as writable
    via the SHF_WRITE attribute.)  */
 
-#define CTORS_SECTION_ASM_OP	".section\t.ctors,\"aw\",@progbits"
-#define DTORS_SECTION_ASM_OP	".section\t.dtors,\"aw\",@progbits"
+#define CTORS_SECTION_ASM_OP	".section\t.ctors,\"aw\""
+#define DTORS_SECTION_ASM_OP	".section\t.dtors,\"aw\""
 
 /* On svr4, we *do* have support for the .init and .fini sections, and we
    can put stuff in there to be executed before and after `main'.  We let
@@ -567,7 +574,7 @@
 /* Switch into a generic section.
    This is currently only used to support section attributes.  */
 
-#define ASM_OUTPUT_SECTION(FILE, NAME) \
+#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
   fprintf (FILE, ".section\t%s,\"a\",@progbits\n", NAME)
 
 /* A C statement (sans semicolon) to output an element in the table of
diff -urPX exclude-gcc gcc-2.6.3-orig/config/x-linux gcc-2.6.3/config/x-linux
--- gcc-2.6.3-orig/config/x-linux	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/x-linux	Sat May 20 12:33:56 1995
@@ -0,0 +1,14 @@
+# It is defined in config/xm-linux.h.
+# X_CFLAGS = -DPOSIX
+
+# The following is needed when compiling stages 2 and 3 because gcc's
+# limits.h must be picked up before /usr/include/limits.h.  This is because
+# each does an #include_next of the other if the other hasn't been included.
+# /usr/include/limits.h loses if it gets found first because /usr/include is
+# at the end of the search order.  When a new version of gcc is released,
+# gcc's limits.h hasn't been installed yet and hence isn't found.
+
+BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
+
+# Don't run fixproto
+STMP_FIXPROTO =
diff -urPX exclude-gcc gcc-2.6.3-orig/config/xm-linux.h gcc-2.6.3/config/xm-linux.h
--- gcc-2.6.3-orig/config/xm-linux.h	Thu Jan  1 01:00:00 1970
+++ gcc-2.6.3/config/xm-linux.h	Sat Apr 22 19:58:14 1995
@@ -0,0 +1,39 @@
+/* Configuration for GCC for Intel i386 running Linux.
+   Copyright (C) 1995 Free Software Foundation, Inc.
+   Contributed by H.J. Lu (hjl@nynexst.com)
+
+This file is part of GNU CC.
+
+GNU CC 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 CC 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 CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#define HAVE_VPRINTF
+
+#define HAVE_STRERROR
+
+#define POSIX
+
+#define DONT_DECLARE_SYS_SIGLIST
+
+/* We do have one, but I'd like to use the one come with gcc since
+   we have been doing that for a long time with USG defined.  H.J. */
+#define NO_STAB_H
+
+#undef BSTRING
+#define BSTRING
+#undef bcmp
+#undef bcopy
+#undef bzero
+#undef index
+#undef rindex
diff -urPX exclude-gcc gcc-2.6.3-orig/configure gcc-2.6.3/configure
--- gcc-2.6.3-orig/configure	Mon Dec  5 20:00:50 1994
+++ gcc-2.6.3/configure	Mon May  8 21:52:26 1995
@@ -790,18 +790,26 @@
 		install_headers_dir=install-headers-cpio
 		broken_install=yes
 		;;
+	i[345]86-*-linux*aout*)		# Intel 80386's running Linux
+		cpu_type=i386		# with a.out format
+		xm_file=i386/xm-linux.h
+		xmake_file=x-linux
+		tm_file=i386/linux-aout.h
+		fixincludes=Makefile.in #On Linux, the headers are ok already.
+		broken_install=yes
+		gnu_ld=yes
+		;;
 	i[345]86-*-linux*)		# Intel 80386's running Linux
-		cpu_type=i386
+		cpu_type=i386		# with ELF format
 		xm_file=i386/xm-linux.h
-		xmake_file=i386/x-linux
-                if [ x$elf = xyes ]
-		then
-			tm_file=i386/linuxelf.h
-		else
-			tm_file=i386/linux.h
-		fi
+		xmake_file=x-linux
+		tm_file=i386/linux.h
 		fixincludes=Makefile.in #On Linux, the headers are ok already.
 		broken_install=yes
+		gnu_ld=yes
+		# Don't use it. Linux uses a slightly different one.
+		# The real one comes with the Linux C library.
+		#extra_parts="crtbegin.o crtend.o"
 		;;
 	i[345]86-*-lynxos*)
 		cpu_type=i386
@@ -1253,6 +1261,24 @@
 		xm_file=m68k/xm-m68kv.h
 		tmake_file=t-svr4
 		header_files=math-68881.h
+		;;
+	m68k-*-linux*aout*)		# Motorola m68k's running Linux
+		xm_file=m68k/xm-linux.h	# with a.out format
+		xmake_file=x-linux
+		tm_file=m68k/linux-aout.h
+		tmake_file=m68k/t-linux
+		fixincludes=Makefile.in #On Linux, the headers are ok already.
+		header_files=math-68881.h
+		gnu_ld=yes
+		;;
+	m68k-*-linux*)			# Motorola m68k's running Linux
+		xm_file=m68k/xm-linux.h	# with ELF format
+		xmake_file=x-linux
+		tm_file=m68k/linux.h
+		tmake_file=m68k/t-linux
+		fixincludes=Makefile.in
+		header_files=math-68881.h
+		gnu_ld=yes
 		;;
 	m88k-dg-dgux*)
 		case $machine in
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/call.c gcc-2.6.3/cp/call.c
--- gcc-2.6.3-orig/cp/call.c	Mon Dec  5 20:01:00 1994
+++ gcc-2.6.3/cp/call.c	Sat Feb 25 11:19:22 1995
@@ -2134,6 +2134,7 @@
 	    basetype_path = TREE_VALUE (basetype_path);
 	  basetype = BINFO_TYPE (basetype_path);
 
+#if 0
 	  /* Cast the instance variable if necessary.  */
 	  if (basetype != TYPE_MAIN_VARIANT
 	      (TREE_TYPE (TREE_TYPE (TREE_VALUE (parms)))))
@@ -2152,6 +2153,7 @@
 	     the access-control rewrite will make this change more cleanly.  */
 	  if (TREE_VALUE (parms) == error_mark_node)
 	    return error_mark_node;
+#endif
 
 	  if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function)))
 	    function = DECL_CHAIN (function);
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/decl.c gcc-2.6.3/cp/decl.c
--- gcc-2.6.3-orig/cp/decl.c	Mon Dec  5 20:25:39 1994
+++ gcc-2.6.3/cp/decl.c	Sat Feb 25 11:17:40 1995
@@ -8675,12 +8675,9 @@
       if (TREE_CODE (declarator) == IDENTIFIER_NODE)
 	{
 	  if (IDENTIFIER_OPNAME_P (declarator))
-#if 0				/* How could this happen? */
+	    /* e.g. `void operator + ;' */
 	    error ("operator `%s' declared void",
 		   operator_name_string (declarator));
-#else
-	    my_friendly_abort (356);
-#endif
 	  else
 	    error ("variable or field `%s' declared void", name);
 	}
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/decl2.c gcc-2.6.3/cp/decl2.c
--- gcc-2.6.3-orig/cp/decl2.c	Fri Nov  4 22:03:27 1994
+++ gcc-2.6.3/cp/decl2.c	Sat Feb 25 11:20:17 1995
@@ -1065,6 +1065,13 @@
 	pedwarn ("anachronistic use of array size in vector delete");
       /* Fall through.  */
     case 1:
+      if (code != POINTER_TYPE)
+	{
+	  cp_error ("type `%#T' argument given to `delete', expected pointer",
+		    type);
+	  return error_mark_node;
+	}
+
       elt_size = c_sizeof (type);
       break;
     default:
@@ -2662,7 +2669,7 @@
 
   /* These must be done in backward order to destroy,
      in which they happen to be!  */
-  while (vars)
+  for (vars = static_aggregates; vars; vars = TREE_CHAIN (vars))
     {
       tree decl = TREE_VALUE (vars);
       tree type = TREE_TYPE (decl);
@@ -2686,7 +2693,6 @@
 	  if (TREE_STATIC (vars))
 	    expand_end_cond ();
 	}
-      vars = TREE_CHAIN (vars);
     }
 
   expand_end_bindings (getdecls(), 1, 0);
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/lex.c gcc-2.6.3/cp/lex.c
--- gcc-2.6.3-orig/cp/lex.c	Fri Nov  4 22:03:49 1994
+++ gcc-2.6.3/cp/lex.c	Mon Dec  5 23:02:43 1994
@@ -21,9 +21,6 @@
 
 /* This file is the lexical analyzer for GNU C++.  */
 
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
 #include <sys/types.h>
 #include <stdio.h>
 #include <errno.h>
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/parse.y gcc-2.6.3/cp/parse.y
--- gcc-2.6.3-orig/cp/parse.y	Mon Dec  5 20:01:16 1994
+++ gcc-2.6.3/cp/parse.y	Sun Feb 12 00:54:40 1995
@@ -40,9 +40,6 @@
   */
 
 %{
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
 #include "config.h"
 
 #include <stdio.h>
@@ -170,6 +167,7 @@
 
 %left '{' ',' ';'
 
+%nonassoc THROW
 %right <code> ASSIGN '='
 %right <code> '?' ':'
 %left <code> OROR
@@ -190,7 +188,7 @@
 %left <code> POINTSAT '.' '(' '['
 
 %right SCOPE			/* C++ extension */
-%nonassoc NEW DELETE TRY CATCH THROW
+%nonassoc NEW DELETE TRY CATCH
 
 %type <code> unop
 
@@ -1729,6 +1727,7 @@
 typed_declspecs:
 	  typed_typespecs %prec EMPTY
 	| typed_declspecs1
+	;
 
 typed_declspecs1:
 	  declmods typespec
@@ -2207,9 +2206,11 @@
 
 do_xref: /* empty */ %prec EMPTY
 	{ $<ttype>$ = xref_tag (current_aggr, $<ttype>0, NULL_TREE, 1); }
+	;
 
 do_xref_defn: /* empty */ %prec EMPTY
 	{ $<ttype>$ = xref_defn_tag (current_aggr, $<ttype>0, NULL_TREE); }
+	;
 
 named_class_head:
 	  named_class_head_sans_basetype do_xref
@@ -3678,13 +3679,13 @@
 bad_parm:
 	  /* empty */ %prec EMPTY
 		{
-		  warning ("type specifier omitted for parameter");
-		  $$ = build_tree_list (TREE_PURPOSE (TREE_VALUE ($<ttype>-1)), NULL_TREE);
+		  error ("type specifier omitted for parameter");
+		  $$ = build_tree_list (integer_type_node, NULL_TREE);
 		}
 	| notype_declarator
 		{
-		  warning ("type specifier omitted for parameter");
-		  $$ = build_tree_list (TREE_PURPOSE (TREE_VALUE ($<ttype>-1)), $$);
+		  error ("type specifier omitted for parameter");
+		  $$ = build_tree_list (integer_type_node, $$);
 		}
 	;
 
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/pt.c gcc-2.6.3/cp/pt.c
--- gcc-2.6.3-orig/cp/pt.c	Mon Dec  5 20:31:29 1994
+++ gcc-2.6.3/cp/pt.c	Fri Feb 17 19:31:40 1995
@@ -1247,6 +1247,38 @@
 		&& TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (t))) == 't'
 		&& constructor_name (DECL_CONTEXT (t)) == DECL_NAME (t))
 	      name = constructor_name (ctx);
+
+	    if (DECL_CONSTRUCTOR_P (t) && TYPE_USES_VIRTUAL_BASECLASSES (ctx))
+	      {
+		/* Since we didn't know that this class had virtual bases
+		   until after we instantiated it, we have to recreate the
+		   arguments to this constructor, as otherwise it would
+		   miss the __in_chrg parameter.  */
+		tree newtype, parm;
+		tree parms = TREE_CHAIN (TYPE_ARG_TYPES (type));
+		parms = hash_tree_chain (integer_type_node, parms);
+		newtype = build_cplus_method_type (ctx,
+						   TREE_TYPE (type),
+						   parms);
+		newtype = build_type_variant (newtype,
+					      TYPE_READONLY (type),
+					      TYPE_VOLATILE (type));
+		type = newtype;
+
+		fnargs = copy_node (DECL_ARGUMENTS (t));
+		/* In this case we need "in-charge" flag saying whether
+		   this constructor is responsible for initialization
+		   of virtual baseclasses or not.  */
+		parm = build_decl (PARM_DECL, in_charge_identifier, integer_type_node);
+		/* Mark the artificial `__in_chrg' parameter as "artificial".  */
+		SET_DECL_ARTIFICIAL (parm);
+		DECL_ARG_TYPE (parm) = integer_type_node;
+		DECL_REGISTER (parm) = 1;
+		TREE_CHAIN (parm) = TREE_CHAIN (fnargs);
+		TREE_CHAIN (fnargs) = parm;
+
+		fnargs = tsubst (fnargs, args, nargs, t);
+	      }
 #if 0
 	    fprintf (stderr, "\nfor function %s in class %s:\n",
 		     IDENTIFIER_POINTER (name),
@@ -2302,6 +2334,10 @@
       else if (! flag_implicit_templates)
 	DECIDE (0);
 
+      if (i->interface == 1)
+	/* OK, it was an implicit instantiation.  */
+	TREE_PUBLIC (t) = 0;
+
       /* If it's a method, let the class type decide it.
 	 @@ What if the method template is in a separate file?
 	 Maybe both file contexts should be taken into account?
@@ -2424,6 +2460,7 @@
 		else
 		  result = instantiate_template (fn, targs);
 	      }
+	    free (targs);
 	  }
     }
   if (! result)
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/tree.c gcc-2.6.3/cp/tree.c
--- gcc-2.6.3-orig/cp/tree.c	Sat Nov  5 00:22:22 1994
+++ gcc-2.6.3/cp/tree.c	Thu Jan 12 00:26:19 1995
@@ -570,15 +570,28 @@
       BINFO_OFFSET (vbase_types) = offset;
 
       if (TREE_CODE (TYPE_SIZE (basetype)) == INTEGER_CST)
-	const_size += MAX (BITS_PER_UNIT,
-			   TREE_INT_CST_LOW (TYPE_SIZE (basetype))
-			   - TREE_INT_CST_LOW (CLASSTYPE_VBASE_SIZE (basetype)));
+	{
+	  /* Every virtual baseclass takes at least a UNIT, so that we can
+	     take it's address and get something different for each base.  */
+	  const_size += MAX (BITS_PER_UNIT,
+			     TREE_INT_CST_LOW (TYPE_SIZE (basetype))
+			     - TREE_INT_CST_LOW (CLASSTYPE_VBASE_SIZE (basetype)));
+	}
       else if (var_size == 0)
 	var_size = TYPE_SIZE (basetype);
       else
 	var_size = size_binop (PLUS_EXPR, var_size, TYPE_SIZE (basetype));
 
       vbase_types = TREE_CHAIN (vbase_types);
+    }
+
+  if (const_size)
+    {
+      /* Because a virtual base might take a single byte above,
+	 we have to re-adjust the total size to make sure it it
+	 a multiple of the alignment.  */
+      /* Give the whole object the alignment it wants.  */
+      const_size = CEIL (const_size, record_align) * record_align;
     }
 
   /* Set the alignment in the complete type.  We don't set CLASSTYPE_ALIGN
diff -urPX exclude-gcc gcc-2.6.3-orig/cp/typeck.c gcc-2.6.3/cp/typeck.c
--- gcc-2.6.3-orig/cp/typeck.c	Mon Dec  5 20:01:24 1994
+++ gcc-2.6.3/cp/typeck.c	Tue Dec 27 23:16:18 1994
@@ -4300,12 +4300,13 @@
 	  if (TREE_OPERAND (arg, 0)
 	      && (TREE_CODE (TREE_OPERAND (arg, 0)) != NOP_EXPR
 		  || TREE_OPERAND (TREE_OPERAND (arg, 0), 0) != error_mark_node))
-	    {
-	      /* Don't know if this should return address to just
-		 _DECL, or actual address resolved in this expression.  */
-	      sorry ("address of bound pointer-to-member expression");
-	      return error_mark_node;
-	    }
+	    if (TREE_CODE (t) != FIELD_DECL)
+	      {
+		/* Don't know if this should return address to just
+		   _DECL, or actual address resolved in this expression.  */
+		sorry ("address of bound pointer-to-member expression");
+		return error_mark_node;
+	      }
 
 	  return convert (build_pointer_type (TREE_TYPE (arg)),
 			  size_binop (EASY_DIV_EXPR, 
diff -urPX exclude-gcc gcc-2.6.3-orig/crtstuff.c gcc-2.6.3/crtstuff.c
--- gcc-2.6.3-orig/crtstuff.c	Mon Jul 18 19:25:52 1994
+++ gcc-2.6.3/crtstuff.c	Wed Mar 22 21:29:15 1995
@@ -54,23 +54,89 @@
 
 #include "tm.h"
 
+/* Provide default definitions for the pseudo-ops used to switch to the
+   .ctors and .dtors sections.
+ 
+   Note that we want to give these sections the SHF_WRITE attribute
+   because these sections will actually contain data (i.e. tables of
+   addresses of functions in the current root executable or shared library
+   file) and, in the case of a shared library, the relocatable addresses
+   will have to be properly resolved/relocated (and then written into) by
+   the dynamic linker when it actually attaches the given shared library
+   to the executing process.  (Note that on SVR4, you may wish to use the
+   `-z text' option to the ELF linker, when building a shared library, as
+   an additional check that you are doing everything right.  But if you do
+   use the `-z text' option when building a shared library, you will get
+   errors unless the .ctors and .dtors sections are marked as writable
+   via the SHF_WRITE attribute.)  */
+
 #ifndef CTORS_SECTION_ASM_OP
-#define CTORS_SECTION_ASM_OP	".section\t.ctors,\"a\",@progbits"
+#define CTORS_SECTION_ASM_OP	".section\t.ctors,\"aw\""
 #endif
 #ifndef DTORS_SECTION_ASM_OP
-#define DTORS_SECTION_ASM_OP	".section\t.dtors,\"a\",@progbits"
+#define DTORS_SECTION_ASM_OP	".section\t.dtors,\"aw\""
 #endif
 
+#ifdef OBJECT_FORMAT_ELF
+
+/*  Declare a pointer to void function type.  */
+typedef void (*func_ptr) (void);
+#define STATIC static
+
+#else  /* OBJECT_FORMAT_ELF */
+
 #include "gbl-ctors.h"
 
 #ifndef ON_EXIT
 #define ON_EXIT(a, b)
 #endif
+#define STATIC
+
+#endif /* OBJECT_FORMAT_ELF */
 
 #ifdef CRT_BEGIN
 
 #ifdef INIT_SECTION_ASM_OP
 
+#ifdef OBJECT_FORMAT_ELF
+
+/* Run all the global destructors on exit from the program.  */
+ 
+/* Some systems place the number of pointers in the first word of the
+   table.  On SVR4 however, that word is -1.  In all cases, the table is
+   null-terminated.  On SVR4, we start from the beginning of the list and
+   invoke each per-compilation-unit destructor routine in order
+   until we find that null.
+
+   Note that this function MUST be static.  There will be one of these
+   functions in each root executable and one in each shared library, but
+   although they all have the same code, each one is unique in that it
+   refers to one particular associated `__DTOR_LIST__' which belongs to the
+   same particular root executable or shared library file.  */
+
+static func_ptr __DTOR_LIST__[];
+static void
+__do_global_dtors_aux ()
+{
+  func_ptr *p;
+  for (p = __DTOR_LIST__ + 1; *p; p++)
+    (*p) ();
+}
+
+/* Stick a call to __do_global_dtors_aux into the .fini section.  */
+static void
+fini_dummy ()
+{
+  asm (FINI_SECTION_ASM_OP);
+  __do_global_dtors_aux ();
+#ifdef FORCE_FINI_SECTION_ALIGN
+  FORCE_FINI_SECTION_ALIGN;
+#endif
+  asm (TEXT_SECTION_ASM_OP);
+}
+
+#else  /* OBJECT_FORMAT_ELF */
+
 /* The function __do_global_ctors_aux is compiled twice (once in crtbegin.o
    and once in crtend.o).  It must be declared static to avoid a link
    error.  Here, we define __do_global_ctors as an externally callable
@@ -92,16 +158,6 @@
 
 asm (INIT_SECTION_ASM_OP);	/* cc1 doesn't know that we are switching! */
 
-/* On some svr4 systems, the .init section preamble code provided in
-   crti.o may do some evil things which we have to undo before we reach
-   the function prologue code for __do_global_ctors (directly below).
-   For such systems, define the macro INIT_SECTION_PREAMBLE to
-   expand into the code needed to undo the actions of the crti.o file.  */
-   
-#ifdef INIT_SECTION_PREAMBLE
-  INIT_SECTION_PREAMBLE;
-#endif
-
 /* A routine to invoke all of the global constructors upon entry to the
    program.  We put this into the .init section (for systems that have
    such a thing) so that we can properly perform the construction of
@@ -118,25 +174,38 @@
   ON_EXIT (__do_global_dtors, 0);
 }
 
+#endif /* OBJECT_FORMAT_ELF */
 #endif /* defined(INIT_SECTION_ASM_OP) */
 
 /* Force cc1 to switch to .data section.  */
 static func_ptr force_to_data[0] = { };
 
+/* NOTE:  In order to be able to support SVR4 shared libraries, we arrange
+   to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+   __DTOR_END__ } per root executable and also one set of these symbols
+   per shared library.  So in any given whole process image, we may have
+   multiple definitions of each of these symbols.  In order to prevent
+   these definitions from conflicting with one another, and in order to
+   ensure that the proper lists are used for the initialization/finalization
+   of each individual shared library (respectively), we give these symbols
+   only internal (i.e. `static') linkage, and we also make it a point to
+   refer to only the __CTOR_END__ symbol in crtend.o and the __DTOR_LIST__
+   symbol in crtbegin.o, where they are defined.  */
+
 /* The -1 is a flag to __do_global_[cd]tors
    indicating that this table does not start with a count of elements.  */
 #ifdef CTOR_LIST_BEGIN
 CTOR_LIST_BEGIN;
 #else
 asm (CTORS_SECTION_ASM_OP);	/* cc1 doesn't know that we are switching! */
-func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) };
+STATIC func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) };
 #endif
 
 #ifdef DTOR_LIST_BEGIN
 DTOR_LIST_BEGIN;
 #else
 asm (DTORS_SECTION_ASM_OP);	/* cc1 doesn't know that we are switching! */
-func_ptr __DTOR_LIST__[1] = { (func_ptr) (-1) };
+STATIC func_ptr __DTOR_LIST__[1] = { (func_ptr) (-1) };
 #endif
 
 #endif /* defined(CRT_BEGIN) */
@@ -145,17 +214,51 @@
 
 #ifdef INIT_SECTION_ASM_OP
 
-/* A routine to invoke all of the global constructors upon entry to the
-   program.  We put this into the .init section (for systems that have
-   such a thing) so that we can properly perform the construction of
-   file-scope static-storage C++ objects within shared libraries.
+#ifdef OBJECT_FORMAT_ELF
 
-   This must be virtually identical to the one above so that we can
-   insure that the function prologue from the one above works correctly
-   with the epilogue from this one.  (They will both go into the .init
-   section as the first and last things (respectively) that the linker
-   will put in that section.)
-*/
+static func_ptr __CTOR_END__[];
+static void
+__do_global_ctors_aux ()
+{
+  func_ptr *p;
+  for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+    (*p) ();
+}
+
+/* Stick a call to __do_global_ctors_aux into the .init section.  */
+static void
+init_dummy ()
+{
+  asm (INIT_SECTION_ASM_OP);
+  __do_global_ctors_aux ();
+#ifdef FORCE_INIT_SECTION_ALIGN
+  FORCE_INIT_SECTION_ALIGN;
+#endif
+  asm (TEXT_SECTION_ASM_OP);
+}
+
+#else  /* OBJECT_FORMAT_ELF */
+
+/* Stick the real initialization code, followed by a normal sort of
+   function epilogue at the very end of the .init section for this
+   entire root executable file or for this entire shared library file.
+
+   Note that we use some tricks here to get *just* the body and just
+   a function epilogue (but no function prologue) into the .init
+   section of the crtend.o file.  Sepcifically, we switch to the .text
+   section, start to define a function, and then we switch to the .init
+   section just before the body code.
+
+   Earlier on, we put the corresponding function prologue into the .init
+   section of the crtbegin.o file (which will be linked in first).
+
+   Note that we want to invoke all constructors for C++ file-scope static-
+   storage objects AFTER any other possible initialization actions which
+   may be performed by the code in the .init section contributions made by
+   other libraries, etc.  That's because those other initializations may
+   include setup operations for very primitive things (e.g. initializing
+   the state of the floating-point coprocessor, etc.) which should be done
+   before we start to execute any of the user's code. */
 
 static void
 __do_global_ctors_aux ()	/* prologue goes in .text section */
@@ -165,23 +268,31 @@
   ON_EXIT (__do_global_dtors, 0);
 }				/* epilogue and body go in .init section */
 
+#endif /* OBJECT_FORMAT_ELF */
+
 #endif /* defined(INIT_SECTION_ASM_OP) */
 
 /* Force cc1 to switch to .data section.  */
 static func_ptr force_to_data[0] = { };
 
+/* Put a word containing zero at the end of each of our two lists of function
+   addresses.  Note that the words defined here go into the .ctors and .dtors
+   sections of the crtend.o file, and since that file is always linked in
+   last, these words naturally end up at the very ends of the two lists
+   contained in these two sections.  */
+
 #ifdef CTOR_LIST_END
 CTOR_LIST_END;
 #else
 asm (CTORS_SECTION_ASM_OP);	/* cc1 doesn't know that we are switching! */
-func_ptr __CTOR_END__[1] = { (func_ptr) 0 };
+STATIC func_ptr __CTOR_END__[1] = { (func_ptr) 0 };
 #endif
 
 #ifdef DTOR_LIST_END
 DTOR_LIST_END;
 #else
 asm (DTORS_SECTION_ASM_OP);	/* cc1 doesn't know that we are switching! */
-func_ptr __DTOR_END__[1] = { (func_ptr) 0 };
+STATIC func_ptr __DTOR_END__[1] = { (func_ptr) 0 };
 #endif
 
 #endif /* defined(CRT_END) */
diff -urPX exclude-gcc gcc-2.6.3-orig/floatlib.c gcc-2.6.3/floatlib.c
--- gcc-2.6.3-orig/floatlib.c	Sat Jan  4 10:25:42 1992
+++ gcc-2.6.3/floatlib.c	Wed Jan 26 20:11:52 1994
@@ -115,9 +115,9 @@
   exp2 = EXP (fl2.l);
 
   if (exp1 > exp2 + 25)
-    return (fl1.l);
+    return (fl1.f);
   if (exp2 > exp1 + 25)
-    return (fl2.l);
+    return (fl2.f);
 
   /* do everything in excess precision so's we can round later */
   mant1 = MANT (fl1.l) << 6;
@@ -292,8 +292,11 @@
 
   /* divide by zero??? */
   if (!fl2.l)
-    /* return NaN or -NaN */
-    return (sign ? 0xFFFFFFFF : 0x7FFFFFFF);
+    {
+      /* return NaN or -NaN */
+      fl2.l = (sign ? 0xFFFFFFFF : 0x7FFFFFFF);
+      return fl2.f;
+    }
 
   /* numerator zero??? */
   if (!fl1.l)
diff -urPX exclude-gcc gcc-2.6.3-orig/gcc.c gcc-2.6.3/gcc.c
--- gcc-2.6.3-orig/gcc.c	Tue Nov 15 19:46:41 1994
+++ gcc-2.6.3/gcc.c	Wed Mar 22 21:35:22 1995
@@ -362,6 +362,7 @@
 	If multilib_dir is set, extra entries are generated with it affixed.
  %l     process LINK_SPEC as a spec.
  %L     process LIB_SPEC as a spec.
+ %B     process LIB_SPEC_2 as a spec.
  %S     process STARTFILE_SPEC as a spec.  A capital S is actually used here.
  %E     process ENDFILE_SPEC as a spec.  A capital E is actually used here.
  %c	process SIGNED_CHAR_SPEC as a spec.
@@ -461,6 +462,17 @@
 #define LIB_SPEC "%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
 #endif
 
+/* config.h can define LIB_SPEC_2 to override how and when the default
+   libraries are included.  */
+#ifndef LIB_SPEC_2
+#if defined(LINK_LIBGCC_SPECIAL) || defined(LINK_LIBGCC_SPECIAL_1)
+/* Have gcc do the search for libgcc.a.  */
+#define LIB_SPEC_2 "%{!shared:libgcc.a%s %L libgcc.a%s}"
+#else
+#define LIB_SPEC_2 "%{!shared:-lgcc %L -lgcc}"
+#endif
+#endif
+
 /* config.h can define STARTFILE_SPEC to override the default crt0 files.  */
 #ifndef STARTFILE_SPEC
 #define STARTFILE_SPEC  \
@@ -505,6 +517,7 @@
 static char *asm_final_spec = ASM_FINAL_SPEC;
 static char *link_spec = LINK_SPEC;
 static char *lib_spec = LIB_SPEC;
+static char *lib_spec_2 = LIB_SPEC_2;
 static char *endfile_spec = ENDFILE_SPEC;
 static char *startfile_spec = STARTFILE_SPEC;
 static char *switches_need_spaces = SWITCHES_NEED_SPACES;
@@ -728,32 +741,16 @@
 /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
    scripts which exist in user specified directories, or in standard
    directories.  */
-#ifdef LINK_LIBGCC_SPECIAL_1
-/* Have gcc do the search for libgcc.a, but generate -L options as usual.  */
 static char *link_command_spec = "\
 %{!fsyntax-only: \
  %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
 			%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
 			%{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\
-			%{L*} %D %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}";
-#else
+			%{L*} %D %{T*} %o %{!nostdlib:%B %{!A:%E}}\n }}}}}}";
+
+/* Don't generate -L options.  */
 #ifdef LINK_LIBGCC_SPECIAL
-/* Have gcc do the search for libgcc.a, and don't generate -L options.  */
-static char *link_command_spec = "\
-%{!fsyntax-only: \
- %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
-			%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
-			%{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\
-			%{L*} %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}";
-#else
-/* Use -L and have the linker do the search for -lgcc.  */
-static char *link_command_spec = "\
-%{!fsyntax-only: \
- %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
-			%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
-			%{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\
-			%{L*} %D %{T*} %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}}";
-#endif
+#define NO_DASH_L
 #endif
 
 /* A vector of options to give to the linker.
@@ -1229,6 +1226,8 @@
     endfile_spec = sl->spec;
   else if (! strcmp (name, "lib"))
     lib_spec = sl->spec;
+  else if (! strcmp (name, "lib2"))
+    lib_spec_2 = sl->spec;
   else if (! strcmp (name, "link"))
     link_spec = sl->spec;
   else if (! strcmp (name, "predefines"))
@@ -2251,16 +2250,18 @@
 
   /* Wait for all the subprocesses to finish.
      We don't care what order they finish in;
-     we know that N_COMMANDS waits will get them all.  */
+     we know that N_COMMANDS waits will get them all.
+     Ignore subprocesses that we don't know about,
+     since they can be spawned by the process that exec'ed us.  */
 
   {
     int ret_code = 0;
 
-    for (i = 0; i < n_commands; i++)
+    for (i = 0; i < n_commands; )
       {
+	int j;
 	int status;
 	int pid;
-	char *prog = "unknown";
 
 #ifdef __MSDOS__
         status = pid = commands[i].pid;
@@ -2274,24 +2275,25 @@
 	if (pid < 0)
 	  abort ();
 
-	if (status != 0)
-	  {
-	    int j;
-	    for (j = 0; j < n_commands; j++)
-	      if (commands[j].pid == pid)
-		prog = commands[j].prog;
-
-	    if (WIFSIGNALED (status))
-	      {
-		fatal ("Internal compiler error: program %s got fatal signal %d",
-		       prog, WTERMSIG (status));
-		signal_count++;
-		ret_code = -1;
-	      }
-	    else if (WIFEXITED (status)
-		     && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
-	      ret_code = -1;
-	  }
+	for (j = 0; j < n_commands; j++)
+	  if (commands[j].pid == pid)
+	    {
+	      i++;
+	      if (status != 0)
+		{
+		  if (WIFSIGNALED (status))
+		    {
+		      fatal ("Internal compiler error: program %s got fatal signal %d",
+			     commands[j].prog, WTERMSIG (status));
+		      signal_count++;
+		      ret_code = -1;
+		    }
+		  else if (WIFEXITED (status)
+			   && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
+		    ret_code = -1;
+		}
+	      break;
+	    }
       }
     return ret_code;
   }
@@ -2490,6 +2492,7 @@
 	  printf ("*endfile:\n%s\n\n", endfile_spec);
 	  printf ("*link:\n%s\n\n", link_spec);
 	  printf ("*lib:\n%s\n\n", lib_spec);
+	  printf ("*lib2:\n%s\n\n", lib_spec_2);
 	  printf ("*startfile:\n%s\n\n", startfile_spec);
 	  printf ("*switches_need_spaces:\n%s\n\n", switches_need_spaces);
 	  printf ("*signed_char:\n%s\n\n", signed_char_spec);
@@ -3136,6 +3139,7 @@
 	     followed by the absolute directories
 	     that we search for startfiles.  */
 	  case 'D':
+#ifndef NO_DASH_L
 	    {
 	      struct prefix_list *pl = startfile_prefixes.plist;
 	      int bufsize = 100;
@@ -3240,6 +3244,7 @@
 		}
 	      free (buffer);
 	    }
+#endif
 	    break;
 
 	  case 'e':
@@ -3474,6 +3479,12 @@
 	      return value;
 	    break;
 
+	  case 'B':
+	    value = do_spec_1 (lib_spec_2, 0, NULL_PTR);
+	    if (value != 0)
+	      return value;
+	    break;
+
 	  case 'c':
 	    value = do_spec_1 (signed_char_spec, 0, NULL_PTR);
 	    if (value != 0)
@@ -4862,6 +4873,12 @@
       validate_switches (p + 1);
 
   p = lib_spec;
+  while (c = *p++)
+    if (c == '%' && *p == '{')
+      /* We have a switch spec.  */
+      validate_switches (p + 1);
+
+  p = lib_spec_2;
   while (c = *p++)
     if (c == '%' && *p == '{')
       /* We have a switch spec.  */
diff -urPX exclude-gcc gcc-2.6.3-orig/ginclude/stdarg.h gcc-2.6.3/ginclude/stdarg.h
--- gcc-2.6.3-orig/ginclude/stdarg.h	Mon Jul 18 19:27:40 1994
+++ gcc-2.6.3/ginclude/stdarg.h	Sat Apr 29 16:48:46 1995
@@ -84,9 +84,10 @@
 /* This is for big-endian machines; small args are padded downward.  */
 #define va_arg(AP, TYPE)						\
  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),	\
-  *((TYPE *) (void *) ((char *) (AP) - ((sizeof (TYPE) < 4		\
-					 ? sizeof (TYPE)		\
-					 : __va_rounded_size (TYPE))))))
+  *((TYPE *) (void *) ((char *) (AP)					\
+		       - ((sizeof (TYPE) < __va_rounded_size (char)	\
+			   ? sizeof (TYPE)				\
+			   : __va_rounded_size (TYPE))))))
 #endif /* big-endian */
 #endif /* _STDARG_H */
 
diff -urPX exclude-gcc gcc-2.6.3-orig/gmon.c gcc-2.6.3/gmon.c
--- gcc-2.6.3-orig/gmon.c	Sat Mar 14 06:04:00 1992
+++ gcc-2.6.3/gmon.c	Fri Jul 15 17:37:30 1994
@@ -89,12 +89,12 @@
     monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr);
     buffer = sbrk( monsize );
     if ( buffer == (char *) -1 ) {
-	write( 2 , MSG , sizeof(MSG) );
+	write( 2 , MSG , sizeof(MSG) - 1);
 	return;
     }
     froms = (unsigned short *) sbrk( s_textsize / HASHFRACTION );
     if ( froms == (unsigned short *) -1 ) {
-	write( 2 , MSG , sizeof(MSG) );
+	write( 2 , MSG , sizeof(MSG) - 1);
 	froms = 0;
 	return;
     }
@@ -106,7 +106,7 @@
     }
     tos = (struct tostruct *) sbrk( tolimit * sizeof( struct tostruct ) );
     if ( tos == (struct tostruct *) -1 ) {
-	write( 2 , MSG , sizeof(MSG) );
+	write( 2 , MSG , sizeof(MSG) - 1);
 	froms = 0;
 	tos = 0;
 	return;
@@ -300,7 +300,7 @@
 overflow:
 	profiling++; /* halt further profiling */
 #   define	TOLIMIT	"mcount: tos overflow\n"
-	write(2, TOLIMIT, sizeof(TOLIMIT));
+	write(2, TOLIMIT, sizeof(TOLIMIT) - 1);
 	goto out;
 }
 
diff -urPX exclude-gcc gcc-2.6.3-orig/libgcc2.c gcc-2.6.3/libgcc2.c
--- gcc-2.6.3-orig/libgcc2.c	Fri Nov  4 22:25:08 1994
+++ gcc-2.6.3/libgcc2.c	Mon May  8 21:53:29 1995
@@ -1680,7 +1680,7 @@
   /* don't use fprintf (stderr, ...) because it may need to call malloc.  */
   /* This should really print the name of the program, but that is hard to
      do.  We need a standard, clean way to get at the name.  */
-  write (2, MESSAGE, sizeof (MESSAGE));
+  write (2, MESSAGE, sizeof (MESSAGE) - 1);
   /* don't call exit () because that may call global destructors which
      may cause a loop.  */
   _exit (-1);
@@ -1988,6 +1988,7 @@
 #define SYMBOL__MAIN __main
 #endif
 
+#if !defined (INIT_SECTION_ASM_OP) || !defined (OBJECT_FORMAT_ELF)
 /* Run all the global destructors on exit from the program.  */
 
 void
@@ -2001,6 +2002,7 @@
     (*p++) ();
 #endif
 }
+#endif
 
 #ifndef INIT_SECTION_ASM_OP
 /* Run all the global constructors on entry to the program.  */
@@ -2089,7 +2091,9 @@
 exit (status)
      int status;
 {
+#if !defined (INIT_SECTION_ASM_OP) || !defined (OBJECT_FORMAT_ELF)
   __do_global_dtors ();
+#endif
 #ifdef EXIT_BODY
   EXIT_BODY;
 #else
@@ -2103,41 +2107,6 @@
 #endif
 
 #endif /* L_exit */
-
-/* In a.out systems, we need to have these dummy constructor and destructor
-   lists in the library.
-
-   When using `collect', the first link will resolve __CTOR_LIST__
-   and __DTOR_LIST__ to these symbols.  We will then run "nm" on the
-   result, build the correct __CTOR_LIST__ and __DTOR_LIST__, and relink.
-   Since we don't do the second link if no constructors existed, these
-   dummies must be fully functional empty lists.
-
-   When using `gnu ld', these symbols will be used if there are no
-   constructors.  If there are constructors, the N_SETV symbol defined
-   by the linker from the N_SETT's in input files will define __CTOR_LIST__
-   and __DTOR_LIST__ rather than its being allocated as common storage
-   by the definitions below.
-
-   When using a linker that supports constructor and destructor segments,
-   these definitions will not be used, since crtbegin.o and crtend.o
-   (from crtstuff.c) will have already defined __CTOR_LIST__ and
-    __DTOR_LIST__.  The crt*.o files are passed directly to the linker
-   on its command line, by gcc.  */
-
-/* The list needs two elements:  one is ignored (the old count); the
-   second is the terminating zero.  Since both values are zero, this
-   declaration is not initialized, and it becomes `common'.  */
-
-#ifdef L_ctor_list
-#include "gbl-ctors.h"
-func_ptr __CTOR_LIST__[2];
-#endif
-
-#ifdef L_dtor_list
-#include "gbl-ctors.h"
-func_ptr __DTOR_LIST__[2];
-#endif
 
 #ifdef L_eh
 typedef struct {
diff -urPX exclude-gcc gcc-2.6.3-orig/stmt.c gcc-2.6.3/stmt.c
--- gcc-2.6.3-orig/stmt.c	Fri Nov  4 22:27:19 1994
+++ gcc-2.6.3/stmt.c	Tue Jun 13 00:26:16 1995
@@ -1572,6 +1572,7 @@
 		}
 
 	      /* Ignore unknown register, error already signalled.  */
+	      continue;
 	    }
 
 	  /* Use QImode since that's guaranteed to clobber just one reg.  */
@@ -4114,7 +4115,7 @@
     default:
     case INTEGER_TYPE:
       if (TREE_CODE (TYPE_MIN_VALUE (type)) != INTEGER_CST
-	  || TREE_CODE (TYPE_MIN_VALUE (type)) != INTEGER_CST)
+	  || TREE_CODE (TYPE_MAX_VALUE (type)) != INTEGER_CST)
 	return -1;
       else
 	{
diff -urPX exclude-gcc gcc-2.6.3-orig/toplev.c gcc-2.6.3/toplev.c
--- gcc-2.6.3-orig/toplev.c	Fri Nov  4 22:27:43 1994
+++ gcc-2.6.3/toplev.c	Sat Nov  5 00:44:03 1994
@@ -2655,15 +2655,12 @@
 					      top_level, at_end);
 		 }
 	     });
-  else if (DECL_REGISTER (decl) && asmspec != 0)
+  else if (asmspec != 0)
     {
-      if (decode_reg_name (asmspec) >= 0)
-	{
-	  DECL_RTL (decl) = 0;
-	  make_decl_rtl (decl, asmspec, top_level);
-	}
-      else
-	error ("invalid register name `%s' for register variable", asmspec);
+      /* Let make_decl_rtl issue the appropriate error messages if
+         asmspec is invalid.  */
+      DECL_RTL (decl) = 0;
+      make_decl_rtl (decl, asmspec, top_level);
     }
 #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
   else if ((write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG)
@@ -3867,7 +3864,7 @@
     {
 #ifndef TARGET_SUPPORTS_BYTECODE
       /* Just die with a fatal error if not supported */
-      fatal ("-fbytecode not supporter for this target");
+      fatal ("-fbytecode not supported for this target");
 #else
       bc_initialize ();
 #endif
diff -urPX exclude-gcc gcc-2.6.3-orig/varasm.c gcc-2.6.3/varasm.c
--- gcc-2.6.3-orig/varasm.c	Mon Dec  5 20:02:13 1994
+++ gcc-2.6.3/varasm.c	Sat May  6 22:24:17 1995
@@ -206,7 +206,8 @@
 /* Tell assembler to change to named section.  */
 
 void
-named_section (name)
+named_section (decl, name)
+     tree decl;
      char *name;
 {
   if (in_section != in_named || strcmp (name, in_named_name))
@@ -215,7 +216,7 @@
       in_section = in_named;
     
 #ifdef ASM_OUTPUT_SECTION_NAME
-      ASM_OUTPUT_SECTION_NAME (asm_out_file, name);
+      ASM_OUTPUT_SECTION_NAME (asm_out_file, decl, name);
 #else
       /* Section attributes are not supported if this macro isn't provided -
 	 some host formats don't support them at all.  The front-end should
@@ -713,7 +714,7 @@
   output_constant_pool (fnname, decl);
 
   if (IN_NAMED_SECTION (decl))
-    named_section (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)));
+    named_section (decl, TREE_STRING_POINTER (DECL_SECTION_NAME (decl)));
   else
     text_section ();
 
@@ -1141,7 +1142,7 @@
 
   /* Switch to the proper section for this data.  */
   if (IN_NAMED_SECTION (decl))
-    named_section (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)));
+    named_section (decl, TREE_STRING_POINTER (DECL_SECTION_NAME (decl)));
   else
     {
       /* C++ can have const variables that get initialized from constructors,
@@ -2673,7 +2674,7 @@
   int align;
 
   if (IN_NAMED_SECTION (exp))
-    named_section (TREE_STRING_POINTER (DECL_SECTION_NAME (exp)));
+    named_section (exp, TREE_STRING_POINTER (DECL_SECTION_NAME (exp)));
   else
     {
       /* First switch to text section, except for writable strings.  */
