summaryrefslogtreecommitdiff
path: root/patches/gcc/2.95.3
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gcc/2.95.3')
-rw-r--r--patches/gcc/2.95.3/arm-linux.patch647
-rw-r--r--patches/gcc/2.95.3/backport-config.gcc-1.4.patch35
-rw-r--r--patches/gcc/2.95.3/backport-config.gcc-1.92.patch39
-rw-r--r--patches/gcc/2.95.3/config.sub.patch1257
-rw-r--r--patches/gcc/2.95.3/deque-leak-fix.patch31
-rw-r--r--patches/gcc/2.95.3/gcc-2.95.3-cygwin-020611.patch33
-rw-r--r--patches/gcc/2.95.3/gcc-2.95.3-trap-posix.patch44
-rw-r--r--patches/gcc/2.95.3/gcc-pr3106.patch28
-rw-r--r--patches/gcc/2.95.3/threads_snafu.patch28
9 files changed, 2142 insertions, 0 deletions
diff --git a/patches/gcc/2.95.3/arm-linux.patch b/patches/gcc/2.95.3/arm-linux.patch
new file mode 100644
index 0000000..00974f6
--- /dev/null
+++ b/patches/gcc/2.95.3/arm-linux.patch
@@ -0,0 +1,647 @@
+--------- snip -------
+Downloaded from ftp://ftp.linux.org.uk/pub/armlinux/toolchain/src-2.95.3/gcc-2.95.3.diff.bz2
+Not sure what it fixes, but this appears to be The Patch used with gcc-2.95.3 on arm.
+--------- snip -------
+
+diff -urN gcc-2.95.3-orig/gcc/config/arm/arm.c gcc-2.95.3/gcc/config/arm/arm.c
+--- gcc-2.95.3-orig/gcc/config/arm/arm.c Thu Jan 25 15:03:24 2001
++++ gcc-2.95.3/gcc/config/arm/arm.c Fri Jul 20 19:39:11 2001
+@@ -1529,27 +1529,34 @@
+ return gen_rtx_PLUS (Pmode, base, offset);
+ }
+ else if (GET_CODE (orig) == LABEL_REF)
+- current_function_uses_pic_offset_table = 1;
+-
+- return orig;
+-}
++ {
++ current_function_uses_pic_offset_table = 1;
+
+-static rtx pic_rtx;
++ if (NEED_PLT_GOT)
++ {
++ rtx pic_ref, address = gen_reg_rtx (Pmode);
++
++ emit_insn (gen_pic_load_addr (address, orig));
++ pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx,
++ address);
++ emit_move_insn (address, pic_ref);
++ return address;
++ }
++ }
+
+-int
+-is_pic(x)
+- rtx x;
+-{
+- if (x == pic_rtx)
+- return 1;
+- return 0;
++ return orig;
+ }
+
++/* Generate code to load the PIC register. PROLOGUE is true if
++ called from arm_expand_prologue (in which case we want the
++ generated insns at the start of the function); false if called
++ by an exception receiver that needs the PIC register reloaded
++ (in which case the insns are just dumped at the current location). */
+ void
+-arm_finalize_pic ()
++arm_finalize_pic (int prologue)
+ {
+ #ifndef AOF_ASSEMBLER
+- rtx l1, pic_tmp, pic_tmp2, seq;
++ rtx l1, pic_tmp, pic_tmp2, seq, pic_rtx;
+ rtx global_offset_table;
+
+ if (current_function_uses_pic_offset_table == 0)
+@@ -1578,7 +1585,10 @@
+
+ seq = gen_sequence ();
+ end_sequence ();
+- emit_insn_after (seq, get_insns ());
++ if (prologue)
++ emit_insn_after (seq, get_insns ());
++ else
++ emit_insn (seq);
+
+ /* Need to emit this whether or not we obey regdecls,
+ since setjmp/longjmp can cause life info to screw up. */
+@@ -5327,7 +5337,13 @@
+ if (frame_pointer_needed)
+ live_regs += 4;
+
+- if (live_regs)
++ if (live_regs == 1 && regs_ever_live[LR_REGNUM]
++ && ! lr_save_eliminated && ! really_return)
++ {
++ output_asm_insn (reverse ? "ldr%?%D0\t%|lr, [%|sp}, #4"
++ : "ldr%?%d0\t%|lr, [%|sp], #4", &operand);
++ }
++ else if (live_regs)
+ {
+ if (lr_save_eliminated || ! regs_ever_live[14])
+ live_regs++;
+@@ -5446,7 +5462,7 @@
+ rtx x;
+
+ length = strlen (name);
+- alignlength = (length + 1) + 3 & ~3;
++ alignlength = ((length + 1) + 3) & ~3;
+
+ ASM_OUTPUT_ASCII (stream, name, length + 1);
+ ASM_OUTPUT_ALIGN (stream, 2);
+@@ -5838,6 +5854,9 @@
+ int store_arg_regs = 0;
+ int volatile_func = (optimize > 0
+ && TREE_THIS_VOLATILE (current_function_decl));
++ rtx ip_rtx;
++ int fp_offset = 0;
++ rtx insn;
+
+ /* Naked functions don't have prologues. */
+ if (arm_naked_function_p (current_function_decl))
+@@ -5859,11 +5878,59 @@
+ live_regs_mask |= 0x4000;
+ }
+
++ ip_rtx = gen_rtx_REG (SImode, IP_REGNUM);
++
+ if (frame_pointer_needed)
+ {
++ if (current_function_needs_context)
++ {
++ /* The Static chain register is the same as the IP register
++ used as a scratch register during stack frame creation.
++ To get around this need to find somewhere to store IP
++ whilst the frame is being created. We try the following
++ places in order:
++
++ 1. An unused argument register.
++ 2. A slot on the stack above the frame. (This only
++ works if the function is not a varargs function).
++
++ If neither of these places is available, we abort (for now). */
++ if (regs_ever_live[3] == 0)
++ {
++ insn = gen_rtx_REG (SImode, 3);
++ insn = gen_rtx_SET (SImode, insn, ip_rtx);
++ insn = emit_insn (insn);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++ else if (current_function_pretend_args_size == 0)
++ {
++ insn = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx);
++ insn = gen_rtx_MEM (SImode, insn);
++ insn = gen_rtx_SET (VOIDmode, insn, ip_rtx);
++ insn = emit_insn (insn);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ fp_offset = 4;
++ }
++ else
++ /* FIXME - the way to handle this situation is to allow
++ the pretend args to be dumped onto the stack, then
++ reuse r3 to save IP. This would involve moving the
++ copying os SP into IP until after the pretend args
++ have been dumped, but this is not too hard. */
++ error ("Unable to find a temporary location for static chanin register");
++ }
++
+ live_regs_mask |= 0xD800;
+- emit_insn (gen_movsi (gen_rtx_REG (SImode, 12),
+- stack_pointer_rtx));
++ if (fp_offset)
++ {
++ insn = gen_rtx_PLUS (SImode, stack_pointer_rtx, GEN_INT (fp_offset));
++ insn = gen_rtx_SET (SImode, ip_rtx, insn);
++ }
++ else
++ insn = gen_movsi (ip_rtx, stack_pointer_rtx);
++
++ insn = emit_insn (insn);
++ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+ if (current_function_pretend_args_size)
+@@ -5927,9 +5994,31 @@
+ }
+
+ if (frame_pointer_needed)
+- emit_insn (gen_addsi3 (hard_frame_pointer_rtx, gen_rtx_REG (SImode, 12),
+- (GEN_INT
+- (-(4 + current_function_pretend_args_size)))));
++ {
++ insn = GEN_INT (-(4 + current_function_pretend_args_size + fp_offset));
++ insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx, ip_rtx, insn));
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ if (current_function_needs_context)
++ {
++ /* Recover the static chain register. */
++ if (regs_ever_live [3] == 0)
++ {
++ insn = gen_rtx_REG (SImode, 3);
++ insn = gen_rtx_SET (SImode, ip_rtx, insn);
++ insn = emit_insn (insn);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++ else /* if (current_function_pretend_args_size == 0) */
++ {
++ insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx, GEN_INT (4));
++ insn = gen_rtx_MEM (SImode, insn);
++ insn = gen_rtx_SET (SImode, ip_rtx, insn);
++ insn = emit_insn (insn);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++ }
++ }
+
+ if (amount != const0_rtx)
+ {
+diff -urN gcc-2.95.3-orig/gcc/config/arm/arm.h gcc-2.95.3/gcc/config/arm/arm.h
+--- gcc-2.95.3-orig/gcc/config/arm/arm.h Thu Jan 25 15:03:26 2001
++++ gcc-2.95.3/gcc/config/arm/arm.h Fri Jul 20 19:39:11 2001
+@@ -601,14 +601,20 @@
+ (TREE_CODE (EXP) == STRING_CST \
+ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
+
++#ifndef STRUCTURE_SIZE_BOUNDARY
+ /* Every structures size must be a multiple of 32 bits. */
+ /* This is for compatibility with ARMCC. ARM SDT Reference Manual
+ (ARM DUI 0020D) page 2-20 says "Structures are aligned on word
+ boundaries". */
+-#ifndef STRUCTURE_SIZE_BOUNDARY
+-#define STRUCTURE_SIZE_BOUNDARY 32
++/* Setting this to 32 produces more efficient code, but the value set in previous
++ versions of this toolchain was 8, which produces more compact structures. The
++ command line option -mstructure_size_boundary=<n> can be used to change this
++ value. */
++#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
+ #endif
+
++extern int arm_structure_size_boundary;
++
+ /* Used when parsing command line option -mstructure_size_boundary. */
+ extern const char * structure_size_string;
+
+@@ -768,6 +774,9 @@
+ /* Specify the registers used for certain standard purposes.
+ The values of these macros are register numbers. */
+
++/* Register which holds return address from a subroutine call. */
++#define LR_REGNUM 14
++
+ /* Define this if the program counter is overloaded on a register. */
+ #define PC_REGNUM 15
+
+@@ -777,6 +786,9 @@
+ /* Base register for access to local variables of the function. */
+ #define FRAME_POINTER_REGNUM 25
+
++/* Scratch register - used in all kinds of places, eg trampolines. */
++#define IP_REGNUM 12
++
+ /* Define this to be where the real frame pointer is if it is not possible to
+ work out the offset between the frame pointer and the automatic variables
+ until after register allocation has taken place. FRAME_POINTER_REGNUM
+@@ -798,7 +810,7 @@
+ /* The native (Norcroft) Pascal compiler for the ARM passes the static chain
+ as an invisible last argument (possible since varargs don't exist in
+ Pascal), so the following is not true. */
+-#define STATIC_CHAIN_REGNUM 8
++#define STATIC_CHAIN_REGNUM 12
+
+ /* Register in which address to store a structure value
+ is passed to a function. */
+@@ -1248,7 +1260,12 @@
+ { \
+ int volatile_func = arm_volatile_func (); \
+ if ((FROM) == ARG_POINTER_REGNUM && (TO) == HARD_FRAME_POINTER_REGNUM)\
+- (OFFSET) = 0; \
++ { \
++ if (! current_function_needs_context || ! frame_pointer_needed) \
++ (OFFSET) = 0; \
++ else \
++ (OFFSET) = 4; \
++ } \
+ else if ((FROM) == FRAME_POINTER_REGNUM \
+ && (TO) == STACK_POINTER_REGNUM) \
+ (OFFSET) = (current_function_outgoing_args_size \
+@@ -1379,8 +1396,10 @@
+
+ On the ARM, allow any integer (invalid ones are removed later by insn
+ patterns), nice doubles and symbol_refs which refer to the function's
+- constant pool XXX. */
+-#define LEGITIMATE_CONSTANT_P(X) (! label_mentioned_p (X))
++ constant pool XXX.
++
++ When generating PIC code, allow anything. */
++#define LEGITIMATE_CONSTANT_P(X) (flag_pic || ! label_mentioned_p (X))
+
+ /* Symbols in the text segment can be accessed without indirecting via the
+ constant pool; it may take an extra binary operation, but this is still
+@@ -1496,9 +1515,8 @@
+ && INTVAL (op) <= 31) \
+ goto LABEL; \
+ } \
+- /* NASTY: Since this limits the addressing of unsigned byte loads */ \
+ range = ((MODE) == HImode || (MODE) == QImode) \
+- ? (arm_arch4 ? 256 : 4095) : 4096; \
++ ? (((MODE) == HImode && arm_arch4) ? 256 : 4095) : 4096; \
+ if (code == CONST_INT && INTVAL (INDEX) < range \
+ && INTVAL (INDEX) > -range) \
+ goto LABEL; \
+@@ -1812,14 +1830,15 @@
+ data addresses in memory. */
+ #define PIC_OFFSET_TABLE_REGNUM arm_pic_register
+
+-#define FINALIZE_PIC arm_finalize_pic ()
++#define FINALIZE_PIC arm_finalize_pic (1)
+
+-/* We can't directly access anything that contains a symbol,
++/* We can't directly access anything that contains a symbol or label,
+ nor can we indirect via the constant pool. */
+ #define LEGITIMATE_PIC_OPERAND_P(X) \
+- (! symbol_mentioned_p (X) \
++ (! symbol_mentioned_p (X) && ! label_mentioned_p (X) \
+ && (! CONSTANT_POOL_ADDRESS_P (X) \
+- || ! symbol_mentioned_p (get_pool_constant (X))))
++ || (! symbol_mentioned_p (get_pool_constant (X))) \
++ && (! label_mentioned_p (get_pool_constant (X)))))
+
+ /* We need to know when we are making a constant pool; this determines
+ whether data needs to be in the GOT or can be referenced via a GOT
+@@ -2046,17 +2065,9 @@
+ else output_addr_const(STREAM, X); \
+ }
+
+-/* Handles PIC addr specially */
+ #define OUTPUT_INT_ADDR_CONST(STREAM,X) \
+ { \
+- if (flag_pic && GET_CODE(X) == CONST && is_pic(X)) \
+- { \
+- output_addr_const(STREAM, XEXP (XEXP (XEXP (X, 0), 0), 0)); \
+- fputs(" - (", STREAM); \
+- output_addr_const(STREAM, XEXP (XEXP (XEXP (X, 0), 1), 0)); \
+- fputs(")", STREAM); \
+- } \
+- else output_addr_const(STREAM, X); \
++ output_addr_const(STREAM, X); \
+ \
+ /* Mark symbols as position independent. We only do this in the \
+ .text segment, not in the .data segment. */ \
+@@ -2170,8 +2181,7 @@
+ int arm_return_in_memory PROTO ((Tree));
+ int legitimate_pic_operand_p PROTO ((Rtx));
+ Rtx legitimize_pic_address PROTO ((Rtx, Mmode, Rtx));
+-int is_pic PROTO ((Rtx));
+-void arm_finalize_pic PROTO ((void));
++void arm_finalize_pic PROTO ((int));
+ int arm_rtx_costs RTX_CODE_PROTO ((Rtx, Rcode));
+ int arm_adjust_cost PROTO ((Rtx, Rtx, Rtx, int));
+ int const_double_rtx_ok_for_fpu PROTO ((Rtx));
+diff -urN gcc-2.95.3-orig/gcc/config/arm/arm.md gcc-2.95.3/gcc/config/arm/arm.md
+--- gcc-2.95.3-orig/gcc/config/arm/arm.md Thu Jan 25 15:03:27 2001
++++ gcc-2.95.3/gcc/config/arm/arm.md Fri Jul 20 19:39:11 2001
+@@ -2629,7 +2629,8 @@
+ : preserve_subexpressions_p ()));
+ DONE;
+ }
+- if (CONSTANT_P (operands[1]) && flag_pic)
++ if ((CONSTANT_P (operands[1]) || symbol_mentioned_p (operands[1])
++ || label_mentioned_p (operands[1])) && flag_pic)
+ operands[1] = legitimize_pic_address (operands[1], SImode,
+ ((reload_in_progress
+ || reload_completed)
+@@ -2721,6 +2722,15 @@
+ return \"add%?\\t%0, %|pc, %0\";
+ ")
+
++(define_expand "builtin_setjmp_receiver"
++ [(label_ref (match_operand 0 "" ""))]
++ "flag_pic"
++ "
++{
++ arm_finalize_pic (0);
++ DONE;
++}")
++
+ ;; If copying one reg to another we can set the condition codes according to
+ ;; its value. Such a move is common after a return from subroutine and the
+ ;; result is being tested against zero.
+@@ -6184,15 +6194,20 @@
+ abort ();
+ return \"\";
+ }
+- strcpy (pattern, \"stmfd\\t%m0!, {%1\");
+- for (i = 1; i < XVECLEN (operands[2], 0); i++)
++ if (XVECLEN (operands[2], 0) > 1)
+ {
+- strcat (pattern, \", %|\");
+- strcat (pattern, reg_names[REGNO (XEXP (XVECEXP (operands[2], 0, i),
++ strcpy (pattern, \"stmfd\\t%m0!, {%1\");
++ for (i = 1; i < XVECLEN (operands[2], 0); i++)
++ {
++ strcat (pattern, \", %|\");
++ strcat (pattern, reg_names[REGNO (XEXP (XVECEXP (operands[2], 0, i),
+ 0))]);
++ }
++ strcat (pattern, \"}\");
++ output_asm_insn (pattern, operands);
+ }
+- strcat (pattern, \"}\");
+- output_asm_insn (pattern, operands);
++ else
++ output_asm_insn (\"str\\t%1, [%m0, #-4]!\", operands);
+ return \"\";
+ }"
+ [(set_attr "type" "store4")])
+diff -urN gcc-2.95.3-orig/gcc/config/arm/elf.h gcc-2.95.3/gcc/config/arm/elf.h
+--- gcc-2.95.3-orig/gcc/config/arm/elf.h Mon May 31 10:21:53 1999
++++ gcc-2.95.3/gcc/config/arm/elf.h Fri Jul 20 19:39:11 2001
+@@ -167,15 +167,6 @@
+ #define MULTILIB_DEFAULTS { "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
+ #endif
+
+-/* Setting this to 32 produces more efficient code, but the value set in previous
+- versions of this toolchain was 8, which produces more compact structures. The
+- command line option -mstructure_size_boundary=<n> can be used to change this
+- value. */
+-#undef STRUCTURE_SIZE_BOUNDARY
+-#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
+-
+-extern int arm_structure_size_boundary;
+-
+ /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
+ is a valid machine specific attribute for DECL.
+ The attributes in ATTRIBUTES have previously been assigned to DECL. */
+diff -urN gcc-2.95.3-orig/gcc/config/arm/linux-gas.h gcc-2.95.3/gcc/config/arm/linux-gas.h
+--- gcc-2.95.3-orig/gcc/config/arm/linux-gas.h Mon Feb 22 17:47:57 1999
++++ gcc-2.95.3/gcc/config/arm/linux-gas.h Fri Jul 20 19:39:11 2001
+@@ -1,6 +1,6 @@
+ /* Definitions of target machine for GNU compiler.
+ ARM Linux-based GNU systems version.
+- Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+ Contributed by Russell King <rmk92@ecs.soton.ac.uk>.
+
+ This file is part of GNU CC.
+@@ -79,5 +79,7 @@
+ register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \
+ register unsigned long _end __asm ("a2") = (unsigned long) (END); \
+ register unsigned long _flg __asm ("a3") = 0; \
+- __asm __volatile ("swi 0x9f0002"); \
++ __asm __volatile ("swi 0x9f0002 @ sys_cacheflush" \
++ : "=r" (_beg) \
++ : "0" (_beg), "r" (_end), "r" (_flg)); \
+ }
+diff -urN gcc-2.95.3-orig/gcc/config/arm/t-linux gcc-2.95.3/gcc/config/arm/t-linux
+--- gcc-2.95.3-orig/gcc/config/arm/t-linux Fri Mar 26 16:30:20 1999
++++ gcc-2.95.3/gcc/config/arm/t-linux Fri Jul 20 20:46:19 2001
+@@ -1,6 +1,6 @@
+ # Just for these, we omit the frame pointer since it makes such a big
+ # difference. It is then pointless adding debugging.
+-TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
++TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
+ LIBGCC2_DEBUG_CFLAGS = -g0
+
+ # Don't build enquire
+diff -urN gcc-2.95.3-orig/gcc/final.c gcc-2.95.3/gcc/final.c
+--- gcc-2.95.3-orig/gcc/final.c Mon Mar 12 13:07:59 2001
++++ gcc-2.95.3/gcc/final.c Fri Jul 20 19:39:11 2001
+@@ -3652,8 +3652,9 @@
+
+ output_addr_const (file, XEXP (x, 0));
+ fprintf (file, "-");
+- if (GET_CODE (XEXP (x, 1)) == CONST_INT
+- && INTVAL (XEXP (x, 1)) < 0)
++ if ((GET_CODE (XEXP (x, 1)) == CONST_INT
++ && INTVAL (XEXP (x, 1)) < 0)
++ || GET_CODE (XEXP (x, 1)) != CONST_INT)
+ {
+ fprintf (file, ASM_OPEN_PAREN);
+ output_addr_const (file, XEXP (x, 1));
+diff -urN gcc-2.95.3-orig/gcc/function.c gcc-2.95.3/gcc/function.c
+--- gcc-2.95.3-orig/gcc/function.c Thu Jan 25 15:03:15 2001
++++ gcc-2.95.3/gcc/function.c Fri Jul 20 19:39:10 2001
+@@ -3053,6 +3053,105 @@
+ extracted by usage MEM with narrower mode. */
+ static rtx purge_addressof_replacements;
+
++/* Return 1 if X and Y are identical-looking rtx's.
++ This is the Lisp function EQUAL for rtx arguments. */
++
++int
++rtx_equal_for_addressof_p (x, y)
++ rtx x, y;
++{
++ register int i;
++ register int j;
++ register enum rtx_code code;
++ register char *fmt;
++
++ if (x == y)
++ return 1;
++ if (x == 0 || y == 0)
++ return 0;
++
++ code = GET_CODE (x);
++ /* Rtx's of different codes cannot be equal. */
++ if (code != GET_CODE (y))
++ return 0;
++
++ /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
++ (REG:SI x) and (REG:HI x) are NOT equivalent.
++ But (MEM:SI x) and (MEM:HI x) are equivalent for our purposes. */
++
++ if (code != MEM && (GET_MODE (x) != GET_MODE (y)))
++ return 0;
++
++ /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively. */
++
++ if (code == REG)
++ return REGNO (x) == REGNO (y);
++ else if (code == LABEL_REF)
++ return XEXP (x, 0) == XEXP (y, 0);
++ else if (code == SYMBOL_REF)
++ return XSTR (x, 0) == XSTR (y, 0);
++ else if (code == SCRATCH || code == CONST_DOUBLE)
++ return 0;
++
++ /* Compare the elements. If any pair of corresponding elements
++ fail to match, return 0 for the whole things. */
++
++ fmt = GET_RTX_FORMAT (code);
++ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
++ {
++ switch (fmt[i])
++ {
++ case 'w':
++ if (XWINT (x, i) != XWINT (y, i))
++ return 0;
++ break;
++
++ case 'n':
++ case 'i':
++ if (XINT (x, i) != XINT (y, i))
++ return 0;
++ break;
++
++ case 'V':
++ case 'E':
++ /* Two vectors must have the same length. */
++ if (XVECLEN (x, i) != XVECLEN (y, i))
++ return 0;
++
++ /* And the corresponding elements must match. */
++ for (j = 0; j < XVECLEN (x, i); j++)
++ if (rtx_equal_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
++ return 0;
++ break;
++
++ case 'e':
++ if (rtx_equal_p (XEXP (x, i), XEXP (y, i)) == 0)
++ return 0;
++ break;
++
++ case 'S':
++ case 's':
++ if (strcmp (XSTR (x, i), XSTR (y, i)))
++ return 0;
++ break;
++
++ case 'u':
++ /* These are just backpointers, so they don't matter. */
++ break;
++
++ case '0':
++ break;
++
++ /* It is believed that rtx's at this level will never
++ contain anything but integers and other rtx's,
++ except for within LABEL_REFs and SYMBOL_REFs. */
++ default:
++ abort ();
++ }
++ }
++ return 1;
++}
++
+ /* Helper function for purge_addressof. See if the rtx expression at *LOC
+ in INSN needs to be changed. If FORCE, always put any ADDRESSOFs into
+ the stack. */
+@@ -3133,7 +3232,7 @@
+ for (tem = purge_bitfield_addressof_replacements;
+ tem != NULL_RTX;
+ tem = XEXP (XEXP (tem, 1), 1))
+- if (rtx_equal_p (x, XEXP (tem, 0)))
++ if (rtx_equal_for_addressof_p (x, XEXP (tem, 0)))
+ {
+ *loc = XEXP (XEXP (tem, 1), 0);
+ return;
+@@ -3143,7 +3242,7 @@
+ for (tem = purge_addressof_replacements;
+ tem != NULL_RTX;
+ tem = XEXP (XEXP (tem, 1), 1))
+- if (rtx_equal_p (XEXP (x, 0), XEXP (tem, 0)))
++ if (rtx_equal_for_addressof_p (XEXP (x, 0), XEXP (tem, 0)))
+ {
+ rtx z = XEXP (XEXP (tem, 1), 0);
+
+diff -urN gcc-2.95.3-orig/gcc/jump.c gcc-2.95.3/gcc/jump.c
+--- gcc-2.95.3-orig/gcc/jump.c Thu Oct 21 08:24:03 1999
++++ gcc-2.95.3/gcc/jump.c Fri Jul 20 19:39:10 2001
+@@ -115,7 +115,7 @@
+ static rtx delete_unreferenced_labels PROTO((rtx));
+ static void delete_noop_moves PROTO((rtx));
+ static int calculate_can_reach_end PROTO((rtx, int, int));
+-static int duplicate_loop_exit_test PROTO((rtx));
++static int duplicate_loop_exit_test PROTO((rtx, int));
+ static void find_cross_jump PROTO((rtx, rtx, int, rtx *, rtx *));
+ static void do_cross_jump PROTO((rtx, rtx, rtx));
+ static int jump_back_p PROTO((rtx, rtx));
+@@ -338,7 +338,7 @@
+ && simplejump_p (temp1))
+ {
+ temp = PREV_INSN (insn);
+- if (duplicate_loop_exit_test (insn))
++ if (duplicate_loop_exit_test (insn, after_regscan))
+ {
+ changed = 1;
+ next = NEXT_INSN (temp);
+@@ -2548,8 +2548,9 @@
+ values of regno_first_uid and regno_last_uid. */
+
+ static int
+-duplicate_loop_exit_test (loop_start)
++duplicate_loop_exit_test (loop_start, after_regscan)
+ rtx loop_start;
++ int after_regscan;
+ {
+ rtx insn, set, reg, p, link;
+ rtx copy = 0, first_copy = 0;
+@@ -2662,6 +2663,9 @@
+ reg_map[REGNO (reg)] = gen_reg_rtx (GET_MODE (reg));
+ }
+ }
++
++ if (after_regscan)
++ reg_scan_update (exitcode, lastexit, max_reg);
+
+ /* Now copy each insn. */
+ for (insn = exitcode; insn != lastexit; insn = NEXT_INSN (insn))
+diff -urN gcc-2.95.3-orig/gcc/varasm.c gcc-2.95.3/gcc/varasm.c
+--- gcc-2.95.3-orig/gcc/varasm.c Mon Feb 19 15:02:02 2001
++++ gcc-2.95.3/gcc/varasm.c Fri Jul 20 19:39:11 2001
+@@ -3286,7 +3286,10 @@
+ value->un.addr.offset = - INTVAL (XEXP (x, 1));
+ }
+ else
+- abort ();
++ {
++ value->un.addr.base = x;
++ value->un.addr.offset = 0;
++ }
+ break;
+
+ default:
diff --git a/patches/gcc/2.95.3/backport-config.gcc-1.4.patch b/patches/gcc/2.95.3/backport-config.gcc-1.4.patch
new file mode 100644
index 0000000..141de0c
--- /dev/null
+++ b/patches/gcc/2.95.3/backport-config.gcc-1.4.patch
@@ -0,0 +1,35 @@
+# Taken from http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.gcc.diff?r1=1.3&r2=1.4
+# Should fix error
+# Configuration powerpc-host_apple-darwin7.3.0 not supported
+# when configuring gcc-2.95 on Mac OS X for i686 target
+# Also create xm-darwin.h, seems to be required, else we get the error
+# In file included from .../gcc-2.95.3/gcc/gencheck.c:21:
+# hconfig.h:11:30: rs6000/xm-darwin.h: No such file or directory
+# make[1]: *** [gencheck.o] Error 1
+
+
+--- gcc-2.95.3/gcc/configure.old 2004-03-24 12:17:44.000000000 -0800
++++ gcc-2.95.3/gcc/configure 2004-03-24 17:14:38.000000000 -0800
+@@ -5079,6 +5079,10 @@
+ tmake_file=rs6000/t-beos
+ xmake_file=rs6000/x-beos
+ ;;
++ powerpc-*-darwin*)
++ xm_file="rs6000/xm-rs6000.h rs6000/xm-darwin.h"
++ xmake_file=rs6000/x-darwin
++ ;;
+ powerpc-*-sysv* | powerpc-*-elf*)
+ tm_file=rs6000/sysv4.h
+ xm_file="xm-siglist.h rs6000/xm-sysv4.h"
+--- /dev/null 2003-01-30 02:24:37.000000000 -0800
++++ gcc-3.0.4/gcc/config/rs6000/xm-darwin.h 2000-11-20 19:02:09.000000000 -0800
+@@ -0,0 +1,9 @@
++/* Undo the USG definition in xm-rs6000.h, Darwin is a BSD flavor. */
++
++#undef USG
++
++/* Override the usual setting, since Apple's GCC has lame bugs and
++ can't handle the initializers. Someday the bugs will be fixed and
++ we can get rid of this silliness. */
++
++#define HAVE_DESIGNATED_INITIALIZERS 0
diff --git a/patches/gcc/2.95.3/backport-config.gcc-1.92.patch b/patches/gcc/2.95.3/backport-config.gcc-1.92.patch
new file mode 100644
index 0000000..fc55681
--- /dev/null
+++ b/patches/gcc/2.95.3/backport-config.gcc-1.92.patch
@@ -0,0 +1,39 @@
+# Taken from http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.gcc.diff?r1=1.91&r2=1.92
+# Should fix error
+# Configuration x86_64-host_unknown-linux-gnu not supported
+# when configuring gcc-2.95 on x86_64 build for i686 target
+# It's a bit silly, since tm_file refers to files that don't exist,
+# but as long as x86_64 is just the build machine, that doesn't matter.
+
+--- gcc-2.95.3/gcc/configure.old 2004-03-24 12:17:44.000000000 -0800
++++ gcc-2.95.3/gcc/configure 2004-03-24 12:19:30.000000000 -0800
+@@ -2929,6 +2929,9 @@
+ i[34567]86-*-*)
+ cpu_type=i386
+ ;;
++ x86_64-*-*)
++ cpu_type=i386
++ ;;
+ hppa*-*-*)
+ cpu_type=pa
+ ;;
+@@ -3643,6 +3646,19 @@
+ thread_file='posix'
+ fi
+ ;;
++ x86_64-*-linux*)
++ xmake_file=x-linux
++ tm_file="i386/biarch64.h i386/i386.h i386/att.h linux.h i386/x86-64.h \
++ i386/linux64.h"
++ tmake_file="t-slibgcc-elf-ver t-linux i386/t-crtstuff"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ gnu_ld=yes
++ float_format=i386
++ if test x$enable_threads = xyes; then
++ thread_file='posix'
++ fi
++ ;;
++
+ i[34567]86-*-gnu*)
+ float_format=i386
+ ;;
diff --git a/patches/gcc/2.95.3/config.sub.patch b/patches/gcc/2.95.3/config.sub.patch
new file mode 100644
index 0000000..c8189b5
--- /dev/null
+++ b/patches/gcc/2.95.3/config.sub.patch
@@ -0,0 +1,1257 @@
+# Backport from gcc-3.3.3
+# Fixes errors like
+# Invalid configuration `x86_64-host_unknown-linux-gnu': machine `x86_64-host_unknown' not recognized
+# Unrecognized host system name x86_64-host_unknown-linux-gnu.
+# when configuring on chip types or operating systems like x86_64 or Darwin
+# which are newer than gcc-2.95
+
+--- gcc-2.95.3/config.sub.old 1999-08-04 01:09:26.000000000 -0700
++++ gcc-2.95.3/config.sub 2004-03-24 11:28:24.000000000 -0800
+@@ -1,6 +1,10 @@
+ #! /bin/sh
+-# Configuration validation subroutine script, version 1.1.
+-# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
++# Configuration validation subroutine script.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++
++timestamp='2003-01-28'
++
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+ # can handle that machine. It does not imply ALL GNU software can.
+@@ -25,6 +29,9 @@
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+
++# Please send patches to <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted ChangeLog entry.
++#
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+ # If it is invalid, we print an error message on stderr and exit with code 1.
+@@ -45,30 +52,73 @@
+ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+ # It is wrong to echo any other type of specification.
+
+-if [ x$1 = x ]
+-then
+- echo Configuration name missing. 1>&2
+- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+- echo "or $0 ALIAS" 1>&2
+- echo where ALIAS is a recognized configuration type. 1>&2
+- exit 1
+-fi
++me=`echo "$0" | sed -e 's,.*/,,'`
+
+-# First pass through any local machine types.
+-case $1 in
+- *local*)
+- echo $1
+- exit 0
+- ;;
+- *)
+- ;;
++usage="\
++Usage: $0 [OPTION] CPU-MFR-OPSYS
++ $0 [OPTION] ALIAS
++
++Canonicalize a configuration name.
++
++Operation modes:
++ -h, --help print this help, then exit
++ -t, --time-stamp print date of last modification, then exit
++ -v, --version print version number, then exit
++
++Report bugs and patches to <config-patches@gnu.org>."
++
++version="\
++GNU config.sub ($timestamp)
++
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
++Free Software Foundation, Inc.
++
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++
++help="
++Try \`$me --help' for more information."
++
++# Parse command line
++while test $# -gt 0 ; do
++ case $1 in
++ --time-stamp | --time* | -t )
++ echo "$timestamp" ; exit 0 ;;
++ --version | -v )
++ echo "$version" ; exit 0 ;;
++ --help | --h* | -h )
++ echo "$usage"; exit 0 ;;
++ -- ) # Stop option processing
++ shift; break ;;
++ - ) # Use stdin as input.
++ break ;;
++ -* )
++ echo "$me: invalid option $1$help"
++ exit 1 ;;
++
++ *local*)
++ # First pass through any local machine types.
++ echo $1
++ exit 0;;
++
++ * )
++ break ;;
++ esac
++done
++
++case $# in
++ 0) echo "$me: missing argument$help" >&2
++ exit 1;;
++ 1) ;;
++ *) echo "$me: too many arguments$help" >&2
++ exit 1;;
+ esac
+
+ # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- linux-gnu*)
++ nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -94,20 +144,28 @@
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+- -apple)
++ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+- -sim | -cisco | -oki | -wec | -winbond ) # EGCS LOCAL
++ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+- -scout) # EGCS LOCAL
++ -scout)
+ ;;
+- -wrs) # EGCS LOCAL
++ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
++ -chorusos*)
++ os=-chorusos
++ basic_machine=$1
++ ;;
++ -chorusrdb)
++ os=-chorusrdb
++ basic_machine=$1
++ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+@@ -156,49 +214,72 @@
+ -psos*)
+ os=-psos
+ ;;
++ -mint | -mint[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
++ ;;
+ esac
+
+ # Decode aliases for certain CPU-COMPANY combinations.
+ case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+- tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+- | arme[lb] | pyramid | mn10200 | mn10300 \
+- | tron | a29k | 580 | i960 | h8300 \
+- | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+- | alpha | alphaev5 | alphaev56 | alphapca56 | alphaev6 \
+- | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
+- | 1750a | dsp16xx | pdp11 \
+- | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
+- | mipstx39 | mipstx39el \
+- | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x)
+- basic_machine=$basic_machine-unknown
+- ;;
+- m88110 | m680[012346]0 | m683?2 | m68360 | m5200 | z8k | v70 \
+- | h8500 | w65) # EGCS LOCAL
+- ;;
+- thumb)
+- basic_machine=$basic_machine-unknown
+- ;;
+- mips64vr4300 | mips64vr4300el) # EGCS LOCAL jsmith/vr4300
++ 1750a | 580 \
++ | a29k \
++ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
++ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
++ | clipper \
++ | d10v | d30v | dlx | dsp16xx \
++ | fr30 | frv \
++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | i370 | i860 | i960 | ia64 \
++ | ip2k \
++ | m32r | m68000 | m68k | m88k | mcore \
++ | mips | mipsbe | mipseb | mipsel | mipsle \
++ | mips16 \
++ | mips64 | mips64el \
++ | mips64vr | mips64vrel \
++ | mips64orion | mips64orionel \
++ | mips64vr4100 | mips64vr4100el \
++ | mips64vr4300 | mips64vr4300el \
++ | mips64vr5000 | mips64vr5000el \
++ | mipsisa32 | mipsisa32el \
++ | mipsisa32r2 | mipsisa32r2el \
++ | mipsisa64 | mipsisa64el \
++ | mipsisa64sb1 | mipsisa64sb1el \
++ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipstx39 | mipstx39el \
++ | mn10200 | mn10300 \
++ | msp430 \
++ | ns16k | ns32k \
++ | openrisc | or32 \
++ | pdp10 | pdp11 | pj | pjl \
++ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | pyramid \
++ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
++ | sh64 | sh64le \
++ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
++ | strongarm \
++ | tahoe | thumb | tic80 | tron \
++ | v850 | v850e \
++ | we32k \
++ | x86 | xscale | xstormy16 | xtensa \
++ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+- mips64vr4100 | mips64vr4100el) # EGCS LOCAL jsmith/vr4100
+- basic_machine=$basic_machine-unknown
+- ;;
+- mips64vr5000 | mips64vr5000el) # EGCS LOCAL ian/vr5000
+- basic_machine=$basic_machine-unknown
+- ;;
+- mips16)
++ m6811 | m68hc11 | m6812 | m68hc12)
++ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
++ os=-none
+ ;;
+- d10v)
+- basic_machine=$basic_machine-unknown
++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
++
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+- i[34567]86)
++ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+@@ -207,44 +288,62 @@
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+- vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+- | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
+- | xmp-* | ymp-* \
+- | hppa-* | hppa1.0-* | hppa1.1-* \
+- | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
+- | alpha-* | alphaev5-* | alphaev56-* | alphapca56-* \
+- | alphaev6-* | we32k-* | cydra-* | ns16k-* | pn-* | np1-* \
+- | xps100-* | clipper-* | orion-* \
+- | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+- | sparc64-* | sparcv9-* | sparc86x-* | mips64-* | mipsel-* \
+- | mips64el-* | mips64orion-* | mips64orionel-* \
+- | mipstx39-* | mipstx39el-* \
+- | f301-* | arm*-*)
+- ;;
+- m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | h8500-* | d10v-*) # EGCS LOCAL
+- ;;
+- thumb-*) # EGCS LOCAL angela/thumb
+- ;;
+- v850-*) # EGCS LOCAL
+- ;;
+- d30v-*) # EGCS LOCAL
+- ;;
+- mips64vr4300-* | mips64vr4300el-*) # EGCS LOCAL jsmith/vr4300
+- ;;
+- mips64vr4100-* | mips64vr4100el-*) # EGCS LOCAL jsmith/vr4100
+- ;;
+- mips16-*) # EGCS LOCAL krk/mips16
+- ;;
+- tic30-*) # EGCS LOCAL ian/tic30
+- ;;
+- c30-*) # EGCS LOCAL ian/tic30
+- basic_machine=tic30-unknown
++ 580-* \
++ | a29k-* \
++ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
++ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
++ | avr-* \
++ | bs2000-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
++ | clipper-* | cydra-* \
++ | d10v-* | d30v-* | dlx-* \
++ | elxsi-* \
++ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
++ | h8300-* | h8500-* \
++ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++ | i*86-* | i860-* | i960-* | ia64-* \
++ | ip2k-* \
++ | m32r-* \
++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
++ | m88110-* | m88k-* | mcore-* \
++ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
++ | mips16-* \
++ | mips64-* | mips64el-* \
++ | mips64vr-* | mips64vrel-* \
++ | mips64orion-* | mips64orionel-* \
++ | mips64vr4100-* | mips64vr4100el-* \
++ | mips64vr4300-* | mips64vr4300el-* \
++ | mips64vr5000-* | mips64vr5000el-* \
++ | mipsisa32-* | mipsisa32el-* \
++ | mipsisa32r2-* | mipsisa32r2el-* \
++ | mipsisa64-* | mipsisa64el-* \
++ | mipsisa64sb1-* | mipsisa64sb1el-* \
++ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipstx39-* | mipstx39el-* \
++ | msp430-* \
++ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
++ | orion-* \
++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | pyramid-* \
++ | romp-* | rs6000-* \
++ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
++ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
++ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
++ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
++ | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
++ | v850-* | v850e-* | vax-* \
++ | we32k-* \
++ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
++ | xtensa-* \
++ | ymp-* \
++ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+- 386bsd) # EGCS LOCAL
++ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+@@ -254,11 +353,11 @@
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+- a29khif) # EGCS LOCAL
++ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+- adobe68k) # EGCS LOCAL
++ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+@@ -277,21 +376,21 @@
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+- basic_machine=m68k-cbm
++ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+- basic_machine=m68k-cbm
++ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+- basic_machine=m68k-cbm
++ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+- apollo68bsd) # EGCS LOCAL
++ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+@@ -303,6 +402,10 @@
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
++ c90)
++ basic_machine=c90-cray
++ os=-unicos
++ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+@@ -323,27 +426,30 @@
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+- cray | ymp)
+- basic_machine=ymp-cray
+- os=-unicos
+- ;;
+- cray2)
+- basic_machine=cray2-cray
+- os=-unicos
+- ;;
+- [ctj]90-cray)
+- basic_machine=c90-cray
++ cray | j90)
++ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
++ cris | cris-* | etrax*)
++ basic_machine=cris-axis
++ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
++ decsystem10* | dec10*)
++ basic_machine=pdp10-dec
++ os=-tops10
++ ;;
++ decsystem20* | dec20*)
++ basic_machine=pdp10-dec
++ os=-tops20
++ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+@@ -371,7 +477,7 @@
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+- es1800 | OSE68k | ose68k | ose | OSE) # EGCS LOCAL
++ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+@@ -385,6 +491,10 @@
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
++ go32)
++ basic_machine=i386-pc
++ os=-go32
++ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+@@ -393,11 +503,11 @@
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+- h8300xray) # EGCS LOCAL
++ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+- h8500hms) # EGCS LOCAL
++ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+@@ -416,22 +526,6 @@
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+- w89k-*) # EGCS LOCAL
+- basic_machine=hppa1.1-winbond
+- os=-proelf
+- ;;
+- op50n-*) # EGCS LOCAL
+- basic_machine=hppa1.1-oki
+- os=-proelf
+- ;;
+- op60c-*) # EGCS LOCAL
+- basic_machine=hppa1.1-oki
+- os=-proelf
+- ;;
+- hppro) # EGCS LOCAL
+- basic_machine=hppa1.1-hp
+- os=-proelf
+- ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+@@ -441,22 +535,21 @@
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+- hp9k6[0-9][0-9] | hp6[0-9][0-9] )
++ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+- hp9k7[0-79][0-9] | hp7[0-79][0-9] )
++ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+- hp9k78[0-9] | hp78[0-9] )
++ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | \
+- hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893 )
++ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+- hp9k8[0-9][13679] | hp8[0-9][13679] )
++ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+@@ -465,47 +558,42 @@
+ hppa-next)
+ os=-nextstep3
+ ;;
+- hppaosf) # EGCS LOCAL
++ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
++ hppro)
++ basic_machine=hppa1.1-hp
++ os=-proelf
++ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+- os=-mvs
+ ;;
+ # I'm not sure what "Sysv32" means. Should this be sysv3.2?
+- i[34567]86v32)
++ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+- i[34567]86v4*)
++ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+- i[34567]86v)
++ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+- i[34567]86sol2)
++ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+- i386mach) # EGCS LOCAL
++ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+- i386-vsta | vsta) # EGCS LOCAL
++ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+- i386-go32 | go32) # EGCS LOCAL
+- basic_machine=i386-unknown
+- os=-go32
+- ;;
+- i386-mingw32 | mingw32)
+- basic_machine=i386-unknown
+- os=-mingw32
+- ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+@@ -531,16 +619,16 @@
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
++ mingw32)
++ basic_machine=i386-pc
++ os=-mingw32
++ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+- mipsel*-linux*)
+- basic_machine=mipsel-unknown
+- os=-linux-gnu
+- ;;
+- mips*-linux*)
+- basic_machine=mips-unknown
+- os=-linux-gnu
++ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+@@ -548,24 +636,36 @@
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+- monitor) # EGCS LOCAL
++ mmix*)
++ basic_machine=mmix-knuth
++ os=-mmixware
++ ;;
++ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+- msdos) # EGCS LOCAL
+- basic_machine=i386-unknown
++ morphos)
++ basic_machine=powerpc-unknown
++ os=-morphos
++ ;;
++ msdos)
++ basic_machine=i386-pc
+ os=-msdos
+ ;;
++ mvs)
++ basic_machine=i370-ibm
++ os=-mvs
++ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+- basic_machine=i386-unknown # EGCS LOCAL
++ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+- basic_machine=armv4l-corel
++ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+@@ -580,7 +680,7 @@
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+- necv70) # EGCS LOCAL
++ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+@@ -609,18 +709,37 @@
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+- mon960) # EGCS LOCAL
++ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
++ nonstopux)
++ basic_machine=mips-compaq
++ os=-nonstopux
++ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+- OSE68000 | ose68000) # EGCS LOCAL
++ nv1)
++ basic_machine=nv1-cray
++ os=-unicosmp
++ ;;
++ nsr-tandem)
++ basic_machine=nsr-tandem
++ ;;
++ op50n-* | op60c-*)
++ basic_machine=hppa1.1-oki
++ os=-proelf
++ ;;
++ or32 | or32-*)
++ basic_machine=or32-unknown
++ os=-coff
++ ;;
++ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+- os68k) # EGCS LOCAL
++ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+@@ -638,46 +757,60 @@
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+- pc532 | pc532-*)
++ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+- pentium | p5 | k5 | k6 | nexen)
++ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+- pentiumpro | p6 | 6x86)
++ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+- basic_machine=i786-pc
++ basic_machine=i686-pc
+ ;;
+- pentium-* | p5-* | k5-* | k6-* | nexen-*)
++ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+- pentiumpro-* | p6-* | 6x86-*)
++ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+- power) basic_machine=rs6000-ibm
++ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+- ;;
++ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+- ;;
++ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
++ ppc64) basic_machine=powerpc64-unknown
++ ;;
++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
++ basic_machine=powerpc64le-unknown
++ ;;
++ ppc64le-* | powerpc64little-*)
++ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+- rom68k) # EGCS LOCAL
++ pw32)
++ basic_machine=i586-unknown
++ os=-pw32
++ ;;
++ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+@@ -687,10 +820,22 @@
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+- sa29200) # EGCS LOCAL
++ s390 | s390-*)
++ basic_machine=s390-ibm
++ ;;
++ s390x | s390x-*)
++ basic_machine=s390x-ibm
++ ;;
++ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
++ sb1)
++ basic_machine=mipsisa64sb1-unknown
++ ;;
++ sb1el)
++ basic_machine=mipsisa64sb1el-unknown
++ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+@@ -698,7 +843,7 @@
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+- sparclite-wrs) # EGCS LOCAL
++ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+@@ -709,10 +854,10 @@
+ spur)
+ basic_machine=spur-unknown
+ ;;
+- st2000) # EGCS LOCAL
++ st2000)
+ basic_machine=m68k-tandem
+ ;;
+- stratus) # EGCS LOCAL
++ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+@@ -756,16 +901,40 @@
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
++ sv1)
++ basic_machine=sv1-cray
++ os=-unicos
++ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
++ t3e)
++ basic_machine=alphaev5-cray
++ os=-unicos
++ ;;
++ t90)
++ basic_machine=t90-cray
++ os=-unicos
++ ;;
++ tic4x | c4x*)
++ basic_machine=tic4x-unknown
++ os=-coff
++ ;;
++ tic54x | c54x*)
++ basic_machine=tic54x-unknown
++ os=-coff
++ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
++ toad1)
++ basic_machine=pdp10-xkl
++ os=-tops20
++ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+@@ -777,7 +946,7 @@
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+- v810 | necv810) # EGCS LOCAL
++ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+@@ -790,8 +959,8 @@
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+- basic_machine=f301-fujitsu
+- ;;
++ basic_machine=f301-fujitsu
++ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+@@ -804,18 +973,22 @@
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+- w65*) # EGCS LOCAL
+- basic_machine=w65-wdc
+- os=-none
++ w65*)
++ basic_machine=w65-wdc
++ os=-none
+ ;;
+- xmp)
+- basic_machine=xmp-cray
+- os=-unicos
++ w89k-*)
++ basic_machine=hppa1.1-winbond
++ os=-proelf
+ ;;
+- xps | xps100)
++ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+- z8k-*-coff) # EGCS LOCAL
++ ymp)
++ basic_machine=ymp-cray
++ os=-unicos
++ ;;
++ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+@@ -826,22 +999,15 @@
+
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+- w89k) # EGCS LOCAL
++ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+- op50n) # EGCS LOCAL
++ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+- op60c) # EGCS LOCAL
++ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+- mips)
+- if [ x$os = x-linux-gnu ]; then
+- basic_machine=mips-unknown
+- else
+- basic_machine=mips-mips
+- fi
+- ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+@@ -851,16 +1017,26 @@
+ vax)
+ basic_machine=vax-dec
+ ;;
++ pdp10)
++ # there are many clones, so DEC is not a safe bet
++ basic_machine=pdp10-unknown
++ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+- sparc | sparcv9)
++ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
++ basic_machine=sh-unknown
++ ;;
++ sh64)
++ basic_machine=sh64-unknown
++ ;;
++ sparc | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+- cydra)
++ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+@@ -869,16 +1045,15 @@
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+- mac | mpw | mac-mpw) # EGCS LOCAL
++ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+- pmac | pmac-mpw) # EGCS LOCAL
++ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+- c4x*)
+- basic_machine=c4x-none
+- os=-coff
+- ;;
++ *-unknown)
++ # Make sure to match an already-canonicalized machine name.
++ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+@@ -935,20 +1110,38 @@
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
++ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+- | -interix* | -uwin* )
++ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
++ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
++ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
++ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
++ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
++ | -powermax* | -dnix* | -microbsd*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+- # EGCS LOCAL
++ -qnx*)
++ case $basic_machine in
++ x86-* | i*86-*)
++ ;;
++ *)
++ os=-nto$os
++ ;;
++ esac
++ ;;
++ -nto-qnx*)
++ ;;
++ -nto*)
++ os=`echo $os | sed -e 's|nto|nto-qnx|'`
++ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+- | -macos* | -mpw* | -magic* | -mon960* | -lnews* )
++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
++ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+- # END EGCS LOCAL
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+@@ -958,6 +1151,12 @@
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
++ -opened*)
++ os=-openedition
++ ;;
++ -wince*)
++ os=-wince
++ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+@@ -973,14 +1172,23 @@
+ -acis*)
+ os=-aos
+ ;;
+- -386bsd) # EGCS LOCAL
++ -atheos*)
++ os=-atheos
++ ;;
++ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
++ -nova*)
++ os=-rtmk-nova
++ ;;
+ -ns2 )
+- os=-nextstep2
++ os=-nextstep2
++ ;;
++ -nsk*)
++ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+@@ -1007,15 +1215,21 @@
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+- -ose*) # EGCS LOCAL
++ -ose*)
+ os=-ose
+ ;;
+- -es1800*) # EGCS LOCAL
++ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ os=-mint
++ ;;
++ -aros*)
++ os=-aros
++ ;;
+ -none)
+ ;;
+ *)
+@@ -1041,13 +1255,17 @@
+ *-acorn)
+ os=-riscix1.2
+ ;;
+- arm*-corel)
++ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+- pdp11-*)
++ # This must come before the *-dec entry.
++ pdp10-*)
++ os=-tops20
++ ;;
++ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+@@ -1065,15 +1283,18 @@
+ # default.
+ # os=-sunos4
+ ;;
+- m68*-cisco) # EGCS LOCAL
++ m68*-cisco)
+ os=-aout
+ ;;
+- mips*-cisco) # EGCS LOCAL
++ mips*-cisco)
+ os=-elf
+ ;;
+- mips*-*) # EGCS LOCAL
+- os=-elf
+- ;;
++ mips*-*)
++ os=-elf
++ ;;
++ or32-*)
++ os=-coff
++ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+@@ -1086,13 +1307,13 @@
+ *-ibm)
+ os=-aix
+ ;;
+- *-wec) # EGCS LOCAL
++ *-wec)
+ os=-proelf
+ ;;
+- *-winbond) # EGCS LOCAL
++ *-winbond)
+ os=-proelf
+ ;;
+- *-oki) # EGCS LOCAL
++ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+@@ -1137,36 +1358,39 @@
+ *-next)
+ os=-nextstep3
+ ;;
+- *-gould)
++ *-gould)
+ os=-sysv
+ ;;
+- *-highlevel)
++ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+- *-sgi)
++ *-sgi)
+ os=-irix
+ ;;
+- *-siemens)
++ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+- f301-fujitsu)
++ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+- *-rom68k) # EGCS LOCAL
++ *-rom68k)
+ os=-coff
+ ;;
+- *-*bug) # EGCS LOCAL
++ *-*bug)
+ os=-coff
+ ;;
+- *-apple) # EGCS LOCAL
++ *-apple)
+ os=-macos
+ ;;
++ *-atari*)
++ os=-mint
++ ;;
+ *)
+ os=-none
+ ;;
+@@ -1212,27 +1436,41 @@
+ -genix*)
+ vendor=ns
+ ;;
+- -mvs*)
++ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+- -vxsim* | -vxworks*)
++ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+- -hms*) # EGCS LOCAL
++ -hms*)
+ vendor=hitachi
+ ;;
+- -mpw* | -macos*) # EGCS LOCAL
++ -mpw* | -macos*)
+ vendor=apple
+ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ vendor=atari
++ ;;
++ -vos*)
++ vendor=stratus
++ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+ esac
+
+ echo $basic_machine$os
++exit 0
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "timestamp='"
++# time-stamp-format: "%:y-%02m-%02d"
++# time-stamp-end: "'"
++# End:
diff --git a/patches/gcc/2.95.3/deque-leak-fix.patch b/patches/gcc/2.95.3/deque-leak-fix.patch
new file mode 100644
index 0000000..44d2a01
--- /dev/null
+++ b/patches/gcc/2.95.3/deque-leak-fix.patch
@@ -0,0 +1,31 @@
+[See also http://gcc.gnu.org/ml/libstdc++/2001-11/msg00133.html ]
+
+Date: Fri, 16 Nov 2001 16:06:22 -0500
+From: Phil Edwards <pedwards at disaster dot jaj dot com>
+To: gcc-patches at gcc dot gnu dot org
+Subject: [libstdc++ trunk & 3.0] Fix deque memory leak
+Message-ID: <20011116160622.A23094@disaster.jaj.com>
+
+
+As discussed on the libstdc++ mailing list. Tested on i686/linux.
+
+
+
+2001-11-16 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/bits/stl_deque.h (deque::erase()): Fix memory leak.
+
+
+[rediffed against 2.95.3 -- dank]
+
+--- gcc-2.95.3/libstdc++/stl/stl_deque.h.old 2001-01-01 09:48:22.000000000 -0800
++++ gcc-2.95.3/libstdc++/stl/stl_deque.h 2006-02-18 15:24:17.000000000 -0800
+@@ -1052,7 +1052,7 @@
+ copy_backward(_M_start, __first, __last);
+ iterator __new_start = _M_start + __n;
+ destroy(_M_start, __new_start);
+- _M_destroy_nodes(__new_start._M_node, _M_start._M_node);
++ _M_destroy_nodes(_M_start._M_node, __new_start._M_node); /* fixed per http://gcc.gnu.org/ml/libstdc++/2001-11/msg00139.html */
+ _M_start = __new_start;
+ }
+ else {
diff --git a/patches/gcc/2.95.3/gcc-2.95.3-cygwin-020611.patch b/patches/gcc/2.95.3/gcc-2.95.3-cygwin-020611.patch
new file mode 100644
index 0000000..fb2b8da
--- /dev/null
+++ b/patches/gcc/2.95.3/gcc-2.95.3-cygwin-020611.patch
@@ -0,0 +1,33 @@
+[ Building gcc-2.95.3 on cygwin yields a compiler that sticks a .exe
+ on the end of every executable, even if they're linux executable.
+ This is highly annoying, and causes glibc build failures that look like this:
+ mv: `.../bin/makedb.new' and `.../bin/makedb' are the same file
+ make[2]: *** [.../bin/makedb] Error 1
+ make[2]: Leaving directory `.../gcc-2.95.3-glibc-2.1.3/glibc-2.1.3/db2'
+
+ The mainline solves this with http://gcc.gnu.org/ml/gcc-cvs/2001-04/msg00440.html,
+ but that doesn't apply cleanly to gcc-2.95.3.
+
+ So, I'm using
+ http://www.uclinux.org/pub/uClinux/uclinux-elf-tools/tools-20030314/gcc-2.95.3-cygwin-020611.patch
+ This is the only patch in crosstool that *isn't* suitable for the mainline.
+ I can live with this patch simply because crosstool does not build
+ compilers that target cygwin or VAX/VMS.
+ If that ever changes, I might need to try applying the real patch.
+]
+
+
+
+#
+# This patch can be found at http://www.uclinux.org/pub/uClinux/m68k-elf-tools/
+#
+--- gcc-2.95.3/gcc/config/i386/xm-cygwin.h 1999-04-22 16:40:56.000000000 +0200
++++ gcc-2.95.3-cygwin/gcc/config/i386/xm-cygwin.h 2002-06-11 08:23:18.000000000 +0200
+@@ -19,7 +19,6 @@
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+-#define EXECUTABLE_SUFFIX ".exe"
+ #define NO_SYS_SIGLIST 1
+
+ /* We support both "/" and "\" since everybody tests both but we
diff --git a/patches/gcc/2.95.3/gcc-2.95.3-trap-posix.patch b/patches/gcc/2.95.3/gcc-2.95.3-trap-posix.patch
new file mode 100644
index 0000000..1d18055
--- /dev/null
+++ b/patches/gcc/2.95.3/gcc-2.95.3-trap-posix.patch
@@ -0,0 +1,44 @@
+#
+# Submitted-By: Marc Kleine-Budde <mkl@pengutronix.de>, 2005-04-20
+#
+# Error:
+#
+# creating libintl.h
+# Configuring etc...
+# loading cache ../config.cache
+# checking for a BSD compatible install... (cached) /usr/bin/install -c
+# creating ./config.status
+# creating Makefile
+# trap: usage: trap [-lp] [[arg] signal_spec ...]
+#
+# Description:
+#
+# non-posix conform usage of trap causes bash >= 3.0 to fail
+# e.g.: http://sourceware.org/ml/crossgcc/2004-12/msg00132.html
+#
+# Status:
+#
+# fixed in gcc >= 3.3.5
+# backport of gcc-3.3.5 fix
+#
+diff -ruN gcc-2.95.3-orig/configure gcc-2.95.3/configure
+--- gcc-2.95.3-orig/configure 1999-04-02 16:17:40.000000000 +0200
++++ gcc-2.95.3/configure 2005-04-20 18:25:45.030488235 +0200
+@@ -687,7 +687,7 @@
+ if test -f skip-this-dir; then
+ # Perform the same cleanup as the trap handler, minus the "exit 1" of course,
+ # and reset the trap handler.
+- trap 0
++ trap '' 0
+ rm -f Makefile* ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos
+ # Execute the final clean-up actions
+ ${config_shell} skip-this-dir
+@@ -1599,7 +1599,7 @@
+ # Perform the same cleanup as the trap handler, minus the "exit 1" of course,
+ # and reset the trap handler.
+ rm -f ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos
+-trap 0
++trap '' 0
+
+ exit 0
+
diff --git a/patches/gcc/2.95.3/gcc-pr3106.patch b/patches/gcc/2.95.3/gcc-pr3106.patch
new file mode 100644
index 0000000..0e077ea
--- /dev/null
+++ b/patches/gcc/2.95.3/gcc-pr3106.patch
@@ -0,0 +1,28 @@
+See http://gcc.gnu.org/PR3106
+Backported from gcc-3.0.x
+
+Fixes error
+ .../binutils-2.11.2/libiberty/strerror.c:468: error: conflicting types for `sys_nerr'
+ /usr/include/stdio.h:258: error: previous declaration of `sys_nerr'
+ make[1]: *** [strerror.o] Error 1
+ make: *** [all-libiberty] Error 2
+on Mac OS X.
+
+--- gcc-2.95.3/libiberty/strerror.c.old 2004-03-24 16:23:19.000000000 -0800
++++ gcc-2.95.3/libiberty/strerror.c 2004-03-24 16:23:48.000000000 -0800
+@@ -13,6 +13,7 @@
+ incompatible with our later declaration, perhaps by using const
+ attributes. So we hide the declaration in errno.h (if any) using a
+ macro. */
++#define sys_nerr sys_nerr__
+ #define sys_errlist sys_errlist__
+ #endif
+
+@@ -20,6 +21,7 @@
+ #include <errno.h>
+
+ #ifdef HAVE_SYS_ERRLIST
++#undef sys_nerr
+ #undef sys_errlist
+ #endif
+
diff --git a/patches/gcc/2.95.3/threads_snafu.patch b/patches/gcc/2.95.3/threads_snafu.patch
new file mode 100644
index 0000000..2c5297e
--- /dev/null
+++ b/patches/gcc/2.95.3/threads_snafu.patch
@@ -0,0 +1,28 @@
+This fixes the error
+
+In file included from gthr-default.h:1,
+ from /build/arm-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/gcc-2.95.3/gcc/gthr.h:98,
+ from /build/arm-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/gcc-2.95.3/gcc/libgcc2.c:3034:
+/build/arm-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/gcc-2.95.3/gcc/gthr-posix.h:37: pthread.h: No such file or directory
+make[3]: *** [libgcc2.a] Error 1
+make[3]: Leaving directory `/build/arm-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/build-gcc-core/gcc'
+
+in what I think is a nicer way than the patch used by the arm team,
+i.e. "perl -pi -e 's/^(TARGET_LIBGCC2_CFLAGS.*)/$1 -Dinhibit_libc -D__gthr_posix_h/' gcc/config/arm/t-linux"
+which seems a bit of a kludge.
+
+--- gcc-2.95.3/gcc/configure.old Fri Mar 16 06:13:48 2001
++++ gcc-2.95.3/gcc/configure Sun Jun 8 13:02:20 2003
+@@ -853,9 +853,9 @@
+ # Check whether --enable-threads or --disable-threads was given.
+ if test "${enable_threads+set}" = set; then
+ enableval="$enable_threads"
+- if test x$enable_threads = xno; then
+- enable_threads=''
+-fi
++ #if test x$enable_threads = xno; then
++ #enable_threads=''
++ #fi
+ else
+ enable_threads=''
+ fi