Index: contrib/crossrpms/patches/gcc-core-4.1.1-rtems4.8-20070201.diff
===================================================================
--- contrib/crossrpms/patches/gcc-core-4.1.1-rtems4.8-20070201.diff	(revision 9135069010c60c023827459b93254ecf57319939)
+++ contrib/crossrpms/patches/gcc-core-4.1.1-rtems4.8-20070201.diff	(revision 9135069010c60c023827459b93254ecf57319939)
@@ -0,0 +1,190 @@
+diff -uNr gcc-4.1.1.orig/gcc/config/arm/rtems-elf.h gcc-4.1.1/gcc/config/arm/rtems-elf.h
+--- gcc-4.1.1.orig/gcc/config/arm/rtems-elf.h	2005-11-22 00:28:29.000000000 +0100
++++ gcc-4.1.1/gcc/config/arm/rtems-elf.h	2007-01-31 09:37:57.000000000 +0100
+@@ -27,6 +27,7 @@
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+ 	builtin_define ("__rtems__");		\
++	builtin_define ("__USE_INIT_FINI__");	\
+ 	builtin_assert ("system=rtems");	\
+     } while (0)
+ 
+diff -uNr gcc-4.1.1.orig/gcc/config/bfin/rtems.h gcc-4.1.1/gcc/config/bfin/rtems.h
+--- gcc-4.1.1.orig/gcc/config/bfin/rtems.h	1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.1.1/gcc/config/bfin/rtems.h	2007-01-31 09:37:57.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Definitions for rtems targeting a bfin
++   Copyright (C) 2006 Free Software Foundation, Inc.
++   Contributed by Ralf CorsÃ©pius (ralf.corsepius@rtems.org).
++
++This file is part of GCC.
++
++GCC 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.
++
++GCC 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 GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++/* Target OS preprocessor built-ins.  */
++#define TARGET_OS_CPP_BUILTINS()		\
++  do						\
++    {						\
++      builtin_define ("__rtems__");		\
++      builtin_assert ("system=rtems");		\
++    }						\
++  while (0)
+diff -uNr gcc-4.1.1.orig/gcc/config/c4x/rtems.h gcc-4.1.1/gcc/config/c4x/rtems.h
+--- gcc-4.1.1.orig/gcc/config/c4x/rtems.h	2005-06-25 03:22:41.000000000 +0200
++++ gcc-4.1.1/gcc/config/c4x/rtems.h	2007-01-31 09:37:58.000000000 +0100
+@@ -24,6 +24,5 @@
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+ 	builtin_define ("__rtems__");		\
+-	builtin_define ("__USE_INIT_FINI__");	\
+ 	builtin_assert ("system=rtems");	\
+     } while (0)
+diff -uNr gcc-4.1.1.orig/gcc/config/mips/elf.h gcc-4.1.1/gcc/config/mips/elf.h
+--- gcc-4.1.1.orig/gcc/config/mips/elf.h	2005-07-09 10:46:34.000000000 +0200
++++ gcc-4.1.1/gcc/config/mips/elf.h	2007-01-31 09:37:58.000000000 +0100
+@@ -48,5 +48,3 @@
+ 
+ #undef  ENDFILE_SPEC
+ #define ENDFILE_SPEC "crtend%O%s crtn%O%s"
+-
+-#define NO_IMPLICIT_EXTERN_C 1
+diff -uNr gcc-4.1.1.orig/gcc/config/mips/t-rtems gcc-4.1.1/gcc/config/mips/t-rtems
+--- gcc-4.1.1.orig/gcc/config/mips/t-rtems	2005-01-15 09:38:53.000000000 +0100
++++ gcc-4.1.1/gcc/config/mips/t-rtems	2007-01-31 09:37:58.000000000 +0100
+@@ -1,5 +1,16 @@
+ # Custom multilibs for RTEMS
+ 
+-MULTILIB_OPTIONS = mips1/mips3/mips32 msoft-float/msingle-float
+-MULTILIB_DIRNAMES = mips1 mips3 mips32 soft-float single
+-MULTILIB_MATCHES = msingle-float=m4650
++# default is mips1 EB hard-float
++MULTILIB_OPTIONS = mips1/mips3/mips32 EB/EL msoft-float
++MULTILIB_DIRNAMES = mips1 mips3 mips32 eb el soft-float
++MULTILIB_MATCHES = EL=mel EB=meb
++
++MULTILIB_EXCEPTIONS =
++
++# Big endian only
++MULTILIB_EXCEPTIONS += EL*
++MULTILIB_EXCEPTIONS += mips32/EL*
++
++# Little endian only
++MULTILIB_EXCEPTIONS += mips3
++MULTILIB_EXCEPTIONS += mips3/msoft-float
+diff -uNr gcc-4.1.1.orig/gcc/config.gcc gcc-4.1.1/gcc/config.gcc
+--- gcc-4.1.1.orig/gcc/config.gcc	2006-05-09 22:02:29.000000000 +0200
++++ gcc-4.1.1/gcc/config.gcc	2007-01-31 09:37:58.000000000 +0100
+@@ -761,6 +761,11 @@
+         tmake_file=bfin/t-bfin-elf
+         use_collect2=no
+         ;;
++bfin*-rtems*)
++	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h bfin/rtems.h rtems.h"
++        tmake_file=bfin/t-bfin-elf
++        use_collect2=no
++        ;;
+ bfin*-*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h"
+         tmake_file=bfin/t-bfin
+@@ -1560,7 +1565,7 @@
+ 	tm_defines="MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64"
+ 	use_fixproto=yes
+ 	;;
+-mips*-*-rtems*)
++mips-*-rtems*)
+ 	tm_file="elfos.h ${tm_file} mips/elf.h mips/rtems.h rtems.h"
+ 	tmake_file="mips/t-elf t-rtems mips/t-rtems"
+ 	;;
+diff -uNr gcc-4.1.1.orig/gcc/Makefile.in gcc-4.1.1/gcc/Makefile.in
+--- gcc-4.1.1.orig/gcc/Makefile.in	2006-05-17 20:38:58.000000000 +0200
++++ gcc-4.1.1/gcc/Makefile.in	2007-02-01 16:39:50.000000000 +0100
+@@ -388,7 +388,10 @@
+ CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
+ 
+ # autoconf sets SYSTEM_HEADER_DIR to one of the above.
+-SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@
++# Purge it of unneccessary internal relative paths
++# to directories that might not exist yet.
++# The sed idiom for this is to repeat the search-and-replace until it doesn't match, using :a ... ta.
++SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`
+ 
+ # Control whether to run fixproto and fixincludes.
+ STMP_FIXPROTO = @STMP_FIXPROTO@
+@@ -2193,7 +2196,7 @@
+    $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)  
+ ipa-pure-const.o : ipa-pure-const.c $(CONFIG_H) $(SYSTEM_H) \
+    coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) tree-inline.h langhooks.h \
+-   pointer-set.h $(GGC_H) $(IPA_UTILS_H) $(C_COMMON_H) \
++   pointer-set.h $(GGC_H) $(IPA_UTILS_H) $(C_COMMON_H) $(TARGET_H) \
+    $(TREE_GIMPLE_H) $(CGRAPH_H) output.h $(FLAGS_H) tree-pass.h $(DIAGNOSTIC_H)  
+ ipa-type-escape.o : ipa-type-escape.c $(CONFIG_H) $(SYSTEM_H) \
+    coretypes.h $(TM_H) $(TREE_H) $(TREE_FLOW_H) tree-inline.h langhooks.h \
+@@ -3146,8 +3149,8 @@
+ macro_list: s-macro_list; @true
+ s-macro_list : $(GCC_PASSES) 
+ 	echo | $(GCC_FOR_TARGET) -E -dM - | \
+-	  sed -n 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p ; \
+-		s/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
++	  sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \
++		-e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \
+ 	  sort -u > tmp-macro_list
+ 	$(SHELL) $(srcdir)/../move-if-change tmp-macro_list macro_list
+ 	$(STAMP) s-macro_list
+@@ -3167,13 +3170,16 @@
+ ../$(build_subdir)/fixincludes/fixincl: ; @ :
+ 
+ # Build fixed copies of system files.
++# Abort if no system headers available, unless building a crosscompiler.
++# FIXME: abort unless building --without-headers would be more accurate and less ugly
+ stmp-fixinc: gsyslimits.h macro_list \
+   $(build_objdir)/fixincludes/fixincl \
+   $(build_objdir)/fixincludes/fixinc.sh
+ 	@if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
+ 	  echo The directory that should contain system headers does not exist: >&2 ; \
+ 	  echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
+-	  if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \
++	  tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
++	  if test "x${SYSTEM_HEADER_DIR}" = "x${tooldir_sysinc}"; \
+ 	  then sleep 1; else exit 1; fi; \
+ 	fi
+ 	rm -rf include; mkdir include
+@@ -3616,9 +3622,9 @@
+ install-driver: installdirs xgcc$(exeext)
+ 	-rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+ 	-$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+-	-rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)
++	-rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext)
+ 	-( cd $(DESTDIR)$(bindir) && \
+-	   $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version) )
++	   $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) )
+ 	-if [ -f gcc-cross$(exeext) ] ; then \
+ 	  if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
+ 	    rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
+diff -uNr gcc-4.1.1.orig/Makefile.in gcc-4.1.1/Makefile.in
+--- gcc-4.1.1.orig/Makefile.in	2006-04-04 23:03:05.000000000 +0200
++++ gcc-4.1.1/Makefile.in	2007-01-31 09:37:58.000000000 +0100
+@@ -329,9 +329,9 @@
+ # CFLAGS will be just -g.  We want to ensure that TARGET libraries
+ # (which we know are built with gcc) are built with optimizations so
+ # prepend -O2 when setting CFLAGS_FOR_TARGET.
+-CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
++CFLAGS_FOR_TARGET = $(strip -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET))
+ SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
+-CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
++CXXFLAGS_FOR_TARGET = $(strip $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET))
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+ LDFLAGS_FOR_TARGET = 
