On Sun, Mar 02, 2008 at 01:17:02PM -0500, Carlos O'Donell wrote:
> Greg Schafer wrote:
> >Hi Carlos and Mark,
> >
> >Your "Relocated compiler should not look in $prefix" patch here:
> >
> >http://gcc.gnu.org/ml/gcc/2006-10/msg00280.html
> >
> >appears to have caused a regression in my GCC 4.3 testing.
> >
> >In summary, there is a small window *during the GCC build itself* where GCC
> >does not pick up the correct startfiles. For example, when GCC_FOR_TARGET 
> >is
> >called to build the target libraries, the startfiles in $prefix/lib are not
> >used. Instead, the startfiles from the host's /usr/lib are used which 
> >breaks
> >my build. Note that the problem seems to rectify itself once the just-built
> >GCC is installed into $prefix.
> >
> >Here's the scenario:
> >
> > - Native build
> > - i686-pc-linux-gnu
> > - --prefix=/temptools
> > - Glibc already installed in /temptools/lib
> 
> What options did you use to configure the compiler? Could you double 
> check your host system is actually i686-pc-linux-gnu? When you say 
> "breaks my build", what error are you seeing?

Hi Carlos,

The problem boils down to this:

 - when xgcc is run from $objdir, GCC thinks it is a relocated compiler

 - your patch changed the behaviour of relocated compilers

 - therefore your patch also changed the behaviour of GCC when it is run
   from $objdir eg: when building the target libs. This is the key point
   that breaks my build.

The following patch restores the old behaviour and fixes my build. I suspect
what is really needed is for GCC to somehow differentiate when it is being
run from $objdir and when it is truly relocated. Thoughts?


diff -Naur gcc-4.3.0-RC-20080222.orig/gcc/gcc.c gcc-4.3.0-RC-20080222/gcc/gcc.c
--- gcc-4.3.0-RC-20080222.orig/gcc/gcc.c        2008-01-24 18:57:12.000000000 
+0000
+++ gcc-4.3.0-RC-20080222/gcc/gcc.c     2008-03-02 06:07:36.000000000 +0000
@@ -6370,6 +6370,11 @@
                              machine_suffix, 
                              standard_startfile_prefix, NULL),
                      NULL, PREFIX_PRIORITY_LAST, 0, 1);
+         add_prefix (&startfile_prefixes,
+                     concat (standard_exec_prefix,
+                             machine_suffix,
+                             standard_startfile_prefix, NULL),
+                     NULL, PREFIX_PRIORITY_LAST, 0, 1);
        }
 
       /* Sysrooted prefixes are relocated because target_system_root is


For the record, the scenario I quoted initially was contrived to demonstrate
the problem. The real breakage happens in a slightly more complicated
procedure that involves bootstrapping a 64-bit toolchain from a 32-bit host.

Thanks
Greg

Reply via email to