diff -ruN gcc-4.1.0/gcc/cppdefault.c gcc-4.1.0.new/gcc/cppdefault.c
--- gcc-4.1.0/gcc/cppdefault.c	2005-06-25 04:02:01.000000000 +0200
+++ gcc-4.1.0.new/gcc/cppdefault.c	2006-03-01 18:48:58.000000000 +0100
@@ -41,6 +41,10 @@
 # undef CROSS_INCLUDE_DIR
 #endif
 
+#undef LOCAL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+
 const struct default_include cpp_include_defaults[]
 #ifdef INCLUDE_DEFAULTS
 = INCLUDE_DEFAULTS;
diff -ruN gcc-4.1.0/gcc/Makefile.in gcc-4.1.0.new/gcc/Makefile.in
--- gcc-4.1.0/gcc/Makefile.in	2006-02-16 16:23:24.000000000 +0100
+++ gcc-4.1.0.new/gcc/Makefile.in	2006-03-01 18:55:12.000000000 +0100
@@ -219,7 +219,7 @@
 CPPFLAGS = @CPPFLAGS@
 
 # These exists to be overridden by the x-* and t-* files, respectively.
-X_CFLAGS =
+X_CFLAGS = $(NIX_EXTRA_CFLAGS) $(NIX_EXTRA_LDFLAGS)
 T_CFLAGS =
 
 X_CPPFLAGS =
@@ -383,7 +383,11 @@
 MD5_H	    = $(srcdir)/../include/md5.h
 
 # Default native SYSTEM_HEADER_DIR, to be overridden by targets.
-NATIVE_SYSTEM_HEADER_DIR = /usr/include
+# Nix: we override NATIVE_SYSTEM_HEADER_DIR in order to prevent
+# `fixinc' from fixing header files in /usr/include.  However,
+# NATIVE_SYSTEM_HEADER_DIR must point to an existing directory, so set
+# it to some dummy directory.
+NATIVE_SYSTEM_HEADER_DIR = $(NIX_FIXINC_DUMMY)
 # Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
 CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
 
@@ -395,7 +399,7 @@
 STMP_FIXINC = @STMP_FIXINC@
 
 # Test to see whether <limits.h> exists in the system header files.
-LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = true
 
 # Directory for prefix to system directories, for
 # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
@@ -3002,7 +3006,7 @@
   -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
   -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
   -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
-  -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
+  -DLOCAL_INCLUDE_DIR=\"/no-such-dir\" \
   -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
   -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
   @TARGET_SYSTEM_ROOT_DEFINE@
diff -ruN gcc-4.1.0/libstdc++-v3/include/Makefile.in gcc-4.1.0.new/libstdc++-v3/include/Makefile.in
--- gcc-4.1.0/libstdc++-v3/include/Makefile.in	2006-01-10 18:14:00.000000000 +0100
+++ gcc-4.1.0.new/libstdc++-v3/include/Makefile.in	2006-03-01 18:57:32.000000000 +0100
@@ -1257,8 +1257,8 @@
 	if [ ! -d "${pch_output_builddir}" ]; then \
 	  mkdir -p ${pch_output_builddir}; \
 	fi; \
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g.gch; \
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g.gch;
+	$(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g.gch; \
+	$(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g.gch;
 
 # For robustness sake (in light of junk files or in-source
 # configuration), copy from the build or source tree to the install
diff -ruN gcc-4.1.0/ltcf-cxx.sh gcc-4.1.0.new/ltcf-cxx.sh
--- gcc-4.1.0/ltcf-cxx.sh	2005-07-16 04:30:53.000000000 +0200
+++ gcc-4.1.0.new/ltcf-cxx.sh	2006-03-01 18:58:15.000000000 +0100
@@ -989,7 +989,7 @@
   # the conftest object file.
   pre_test_object_deps_done=no
 
-  for p in `eval $output_verbose_link_cmd`; do
+  for p in `true`; do
 
     case $p in
 
diff -ruN gcc-4.1.0/ltconfig gcc-4.1.0.new/ltconfig
--- gcc-4.1.0/ltconfig	2005-07-16 04:30:53.000000000 +0200
+++ gcc-4.1.0.new/ltconfig	2006-03-01 18:59:58.000000000 +0100
@@ -2322,6 +2322,11 @@
 # A language-specific compiler.
 CC=$CC
 
+# Ugly hack to get libmudflap (and possibly other libraries) to build.
+# Libtool filters out \`-B' flags when linking (why?), so the \`-B' flag
+# to Glibc gets lost.  Here we forcibly add it to any invocation.
+CC="\$CC $NIX_EXTRA_LDFLAGS"
+
 # Is the compiler the GNU C compiler?
 with_gcc=$with_gcc
 
diff -ruN gcc-4.1.0/Makefile.in gcc-4.1.0.new/Makefile.in
--- gcc-4.1.0/Makefile.in	2005-12-15 15:02:02.000000000 +0100
+++ gcc-4.1.0.new/Makefile.in	2006-03-01 19:41:04.000000000 +0100
@@ -286,7 +286,7 @@
 WINDRES = @WINDRES@
 
 CFLAGS = @CFLAGS@
-LDFLAGS = 
+LDFLAGS = $(NIX_EXTRA_LDFLAGS)
 LIBCFLAGS = $(CFLAGS)
 CXXFLAGS = @CXXFLAGS@
 LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
@@ -329,12 +329,12 @@
 # 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 = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) $(NIX_EXTRA_CFLAGS)
 SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
-CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
+CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) $(NIX_EXTRA_CFLAGS)
 LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
 LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
-LDFLAGS_FOR_TARGET = 
+LDFLAGS_FOR_TARGET = $(NIX_EXTRA_LDFLAGS)
 PICFLAG_FOR_TARGET = 
 
 # ------------------------------------
