[distcc] gcc bootstraps with distcc

Neil Booth neil at daikokuya.co.uk
Wed Jul 2 20:26:37 GMT 2003


Alexandre Oliva wrote:-

> I'm undecided.  People like to be able to share ccaches, despite the
> fact that, if they do, they'll end up visiting a different, shared
> source code base (which is generally fine, since, if there was a cache
> hit, the code is identical anyway).  However, we could argue for
> having it enabled by default, and disabled with a flag.  I was just
> trying to preserve as much of the status quo as possible.

OK, let's keep it non-default.

> Hmm...  Separate callback.  Sounds reasonable, even if a bit
> over-engineered to my taste.  I mean, if we have <built-in> and
> <command line>, why not go ahead with <directory> as well?  I do agree
> we should try to avoid the overhead of string comparison, though, so
> how about LC_DIRECTORY instead of LC_RENAME for this case?

The LC_ are for a clear purpose: they indicate change of file name;
yours doesn't do that.  It's completely orthogonal.  If you need more
convincing, the LC_ affect line maps; this directory stuff is unrelated.

There is a good reason for <built-in> and <command line>, namely
diagnostics.  If there are diagnostics referring to macros or
syntax errors from built-ins or the command line (including switches
-include and -imacros etc) their location will be reported as
<built-in> or, e.g. for -imacros, "in file included from /whatever/
included from <command-line>".  <directory> serves no such purpose.

However, preprocessing a .i file should continue to output its
input.  Does it?

> I'm afraid not.  We have to get the cwd directory right before we emit
> the very first bit of debugging info and, in some formats, it's the
> very first thing we emit, which is part of the reason for this
> cpp_read_main_file ugliness.  So we have to do it in
> cpp_read_main_file or in its caller.

I was referring to all the mucking about with text strings.  I don't
see why it would remain necessary.

> As long as something that fixes this long-standing issue can get into
> GCC 3.4 before it enters stage 2, sure :-) :-)
> 
> > I'm not sure if I prefer something like this, or perhaps
> > somehow storing it in the first #line.
> 
> I couldn't find a clean way to get it into the first #line.  Also,
> backward compatibility is relevant to a point.  Consider feeding a
> preprocessed file with -Mpwd (or with this enabled by default, which
> is how I had it at first) to a compiler that doesn't know how to
> handle a new line marker flag.  Comments, which you had suggested to
> me at the GCC Summit, were too tricky to get right, so I ended up
> sticking with the <directory> marker, based on the <built-in> and
> <command line> precedents.
> 
> The important point about using a compiler that may not understand the
> <directory> marker in preprocessed input is that distcc may actually
> run into such situations, if the compiler that preprocesses the code
> in the host machine happens to not be the same as the one that will
> compile the preprocessed code.  This will often fail for other
> reasons, but I'd rather not force it to fail by introducing an
> intentional incompatibility.  That's why I designed it the way I did.
> If you know nothing about <directory>, you'll probably just end up
> discarding that line.

Hmm.  OK; let me think about it.  As I point out above; <built-in>
and <command line> are not "precedents" in the way you appear to have
thought, but I don't have a better idea at the moment either.

Neil.



More information about the distcc mailing list