http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46749

--- Comment #26 from rguenther at suse dot de <rguenther at suse dot de> 
2010-12-03 10:51:06 UTC ---
On Fri, 3 Dec 2010, rguenther at suse dot de wrote:

> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46749
> 
> --- Comment #25 from rguenther at suse dot de <rguenther at suse dot de> 
> 2010-12-03 10:47:49 UTC ---
> On Fri, 3 Dec 2010, mrs at gcc dot gnu.org wrote:
> 
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46749
> > 
> > m...@gcc.gnu.org <mrs at gcc dot gnu.org> changed:
> > 
> >            What    |Removed                     |Added
> > ----------------------------------------------------------------------------
> >                  CC|                            |mrs at gcc dot gnu.org
> > 
> > --- Comment #24 from mrs at gcc dot gnu.org <mrs at gcc dot gnu.org> 
> > 2010-12-03 00:26:37 UTC ---
> > The lto people need to engineer a design in which the debug information is 
> > left
> > around in .o files, and those files are read at the very last step in a 
> > link,
> > to collect the debug information from them and persist that information into
> > the filesystem.  They are removing .o files before the end of the final 
> > link. 
> > To the extent those files have debug information in them, this can't work.
> > 
> > I could not find the last invocation of gcc that fails.  If someone could 
> > point
> > that out, I might be able to suggest a work around that just disappears 
> > debug
> > information until such time as the first bug is fixed.  Essentially, you can
> > remove -g* from that line and disappear the collection of the debug
> > information.  Another solution would be to not have any .c, .cc, .C, .cpp, 
> > .cp,
> > .c++, .cxx, .CPP, .m, .mm, .f, or .s files on that line.
> 
> I didn't manage to prove the following theory but it's the only that
> makes sense.
> 
> What I think happens is the following:
> 
> User says
> 
>  gcc -o t t.c -flto
> 
> We now do the usual compile
> 
>  ./cc1 -c -o /tmp/xyz.o t.c -flto
> 
> and now execute the link-spec which matches the symtool thing
> (but on the wrong object file!).  So, we now link.  Which will do
> 
>  collect2 ...
> 
> which executes lto-wrapper which executes
> 
>  gcc -c -x lto -o /tmp/abc.o /tmp/xyz.o -flto
> 
> and then collect2 continues and links
> 
>  collect2-ld ... -o t /tmp/abc.o
> 
> only _now_ dsymutil is invoked (from the first link-spec!) and
> on /tmp/xyz.o, which isn't the correct object file either.
> But somehow that intermediate file has disappeared at this point
> (I have yet to see who is responsible for cleaning up that one
> and when it does so).
> 
> Thus, the setup is broken anyhow, even if we manage to retain
> the object file for long enough.
> 
> The darwin people have to design a more robust way to run
> dsymutil.

Btw, I would have tried to dig deeper but darwin lacks basic tools
such as strace which I am familiar with, so I was lost (fortunately
for you I now do have access to a darwin x86 machine).

So if you can hint me at what's the equivalent of
  strace -f -e unlink,execve -o log ./xgcc ...
on darwin that would help.

Richard.

Reply via email to