diff -ur src-base/gcc/common.opt src/gcc/common.opt
--- src-base/gcc/common.opt	2008-09-06 01:45:01.000000000 -0400
+++ src/gcc/common.opt	2008-09-06 01:48:39.000000000 -0400
@@ -766,7 +766,7 @@
 Generate position-independent code if possible (large mode)
 
 fPIE
-Common Report Var(flag_pie,2)
+Common Report Var(flag_pie,2) Init(2)
 Generate position-independent code for executables if possible (large mode)
 
 fpic
diff -ur src-base/gcc/config/i386/linux64.h src/gcc/config/i386/linux64.h
--- src-base/gcc/config/i386/linux64.h	2008-09-06 01:44:39.000000000 -0400
+++ src/gcc/config/i386/linux64.h	2008-09-06 04:02:16.000000000 -0400
@@ -53,8 +53,8 @@
    When the -shared link option is used a final link is not being
    done.  */
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
-#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
+#define GLIBC_DYNAMIC_LINKER32 "/tools/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER64 "/tools/lib/ld-linux-x86-64.so.2"
 
 #if TARGET_64BIT_DEFAULT
 #define SPEC_32 "m32"
@@ -81,7 +81,7 @@
    %{mpc32:crtprec32.o%s} \
    %{mpc64:crtprec64.o%s} \
    %{mpc80:crtprec80.o%s} \
-   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
+   %{shared|pie:crtendS.o%s;static|nopie|pg|p|profile:crtend.o%s;:crtendS.o%s} crtn.o%s"
 
 #if TARGET_64BIT_DEFAULT
 #define MULTILIB_DEFAULTS { "m64" }
diff -ur src-base/gcc/config/i386/linux.h src/gcc/config/i386/linux.h
--- src-base/gcc/config/i386/linux.h	2008-09-06 01:44:39.000000000 -0400
+++ src/gcc/config/i386/linux.h	2008-09-06 01:59:05.000000000 -0400
@@ -100,7 +100,7 @@
 
 /* These macros may be overridden in k*bsd-gnu.h and i386/k*bsd-gnu.h. */
 #define LINK_EMULATION "elf_i386"
-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER "/tools/lib/ld-linux.so.2"
 
 #undef  SUBTARGET_EXTRA_SPECS
 #define SUBTARGET_EXTRA_SPECS \
@@ -123,7 +123,7 @@
    %{mpc32:crtprec32.o%s} \
    %{mpc64:crtprec64.o%s} \
    %{mpc80:crtprec80.o%s} \
-   %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
+   %{shared|pie:crtendS.o%s;static|nopie|pg|p|profile:crtend.o%s;:crtendS.o%s} crtn.o%s"
 
 /* A C statement (sans semicolon) to output to the stdio stream
    FILE the assembler definition of uninitialized global DECL named
Only in src/gcc/config/i386: linux.h.orig
diff -ur src-base/gcc/config/linux.h src/gcc/config/linux.h
--- src-base/gcc/config/linux.h	2008-09-06 01:44:40.000000000 -0400
+++ src/gcc/config/linux.h	2008-09-06 02:00:03.000000000 -0400
@@ -40,8 +40,9 @@
 #undef	STARTFILE_SPEC
 #if defined HAVE_LD_PIE
 #define STARTFILE_SPEC \
-  "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
-   crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
+  "%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;static|nopie:crt1.o%s;: \
+   Scrt1.o%s}} crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s; \
+   nopie|pg|p|profile:crtbegin.o%s;:crtbeginS.o%s}"
 #else
 #define STARTFILE_SPEC \
   "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
@@ -130,3 +131,5 @@
 #define TARGET_HAS_SINCOS (OPTION_GLIBC)
 
 #define TARGET_POSIX_IO
+#undef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR 0
Only in src/gcc/config: linux.h.orig
diff -ur src-base/gcc/gcc.c src/gcc/gcc.c
--- src-base/gcc/gcc.c	2008-09-06 01:43:44.000000000 -0400
+++ src/gcc/gcc.c	2008-09-06 01:53:24.000000000 -0400
@@ -714,7 +714,8 @@
 
 #ifndef LINK_PIE_SPEC
 #ifdef HAVE_LD_PIE
-#define LINK_PIE_SPEC "%{pie:-pie} "
+#define LINK_PIE_SPEC "%{pie:-pie} \
+  %{static|Bstatic|shared|Bshareable|i|r|pie|nopie:;:-pie} "
 #else
 #define LINK_PIE_SPEC "%{pie:} "
 #endif
@@ -822,6 +823,9 @@
    in turn cause preprocessor symbols to be defined specially.  */
 static const char *cpp_options =
 "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
+ %{fpic|fPIC|fpie|static|D__KERNEL__:-fno-PIE}\
+ %{shared|nostdlib|nostartfiles:-fno-PIE -fPIC}\
+ %{static:%{pie:%e-static and -pie are incompatible}}\
  %{f*} %{g*:%{!g0:%{!fno-working-directory:-fworking-directory}}} %{O*}\
  %{undef} %{save-temps:-fpch-preprocess}";
 
diff -ur src-base/gcc/Makefile.in src/gcc/Makefile.in
--- src-base/gcc/Makefile.in	2008-09-06 01:44:54.000000000 -0400
+++ src/gcc/Makefile.in	2008-09-06 01:58:57.000000000 -0400
@@ -564,7 +564,7 @@
 LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
 		 $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
 		 -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
-		 -fno-stack-protector \
+		 -fno-stack-protector -fno-PIE \
 		 $(INHIBIT_LIBC_CFLAGS)
 
 # Additional options to use when compiling libgcc2.a.
@@ -578,7 +578,7 @@
 CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
   -finhibit-size-directive -fno-inline-functions -fno-exceptions \
   -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
-  -fno-stack-protector \
+  -fno-stack-protector -fno-PIE \
   $(INHIBIT_LIBC_CFLAGS)
 
 # Additional sources to handle exceptions; overridden by targets as needed.
@@ -3511,7 +3511,7 @@
 	      SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \
 	      export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
 	      cd $(build_objdir)/fixincludes && \
-	      $(SHELL) ./fixinc.sh ../../gcc/$${fix_dir} \
+	      $(SHELL) -c true ../../gcc/$${fix_dir} \
 	        $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
 	    rm -f $${fix_dir}/syslimits.h; \
 	    if [ -f $${fix_dir}/limits.h ]; then \
Only in src/gcc: Makefile.in.orig2
