On Mon, Jun 17, 2019 at 5:02 PM <david.tay...@dell.com> wrote:
>
> > From: Richard Biener <richard.guent...@gmail.com>
> > Sent: Monday, June 17, 2019 9:57 AM
> > To: taylor, david
> > Cc: GCC Development
> > Subject: Re: gcc: -ftest-coverage and -auxbase
>
> > On Mon, Jun 17, 2019 at 2:46 PM David Taylor <dtay...@emc.com> wrote:
> > >
>
> > >     From: Richard Biener <richard dot guenther at gmail dot com>
> > >     Date: Thu, 13 Jun 2019 10:22:54 +0200
> > >
> > >     On Wed, Jun 12, 2019 at 10:17 PM <david.tay...@dell.com> wrote:
> > >     >
> > >     > When doing a build, we use a pipe between GCC and GAS.
> > >     > And because we wish to do some analysis of the assembly code,
> > >     > we do not use -pipe but instead do '-S -c -'.  And this has worked
> > >     > fine for many years.
> > >
> > >     Can you please show us complete command-lines here?  -S -c -
> > >     will only assemble (and require source from standard input
> > >     and produce output in -.s).
> > >
> > > Actually, GCC recognzes '-c -' as meaning to write to stdout.  The *.c
> >
> > -o -
> >
> > you mean.  OK, so the issue is that with -o - auxbase is computed in a not 
> > so
>
> Right.  Sorry for the brain fart.
>
> > useful way from
> >
> > %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase
> > %b}}}%{!c:%{!S:-auxbase %b}}
> >
> > which means we just pass '-auxbase-strip -', I guess in this case the !o 
> > choice
> > of using %b (substitute the basename of the input file) is a more sensible
> > choice.  That means having a new spec %<take-free-letter> expanding to %*
> > when it is not - and else expand to %b (which might be stdin, also not 
> > useful).
> > Note that the coverage utility might not be able to find the output file 
> > then.
>
> The build tree is laid out the same as the source tree...
>
> rel/a/tive/path.c is compiled into some-prefix/rel/a/tive/path.c
>
> But I was certainly hoping / expecting that setting auxbase would cause the 
> proper information to be recorded in the assembly file so that everything 
> would be found.
>
> I should have thought to check the spec strings.  Given that the common.opt 
> file marks it as RejectDriver, it pretty much a given
> that when it needs to be set the driver is not going to check if it
> is already set...
>
> How about, instead of a new specs letter with a new meaning,
> instead just wrap {!auxbase ... } around the current setting?
>
> It seems that that combined with removing RejectDriver would
> solve the problem.
>
> > Using -pipe would also work so why not use that together with -Wa,... for 
> > the
> > assembler options you need?
>
> I'll have to see if the build can be twisted into doing that.
>
> Currently there are three scripts that optionally run between the compiler 
> and the assembler.  When they run they collect information into a 'side file' 
> for additional processing later.
>
> The .c to .o rule is already fairly complicated...  I am loathe to
> make it more complicated.

You could also supply alternate specs, -dumpspecs gets you the default contents
which you can put into a file, edit out the problematic part (just
always use %b)
and supply it via -specs ...

I don't think we want to expose -auxbase.  Iff then an alternate way to specify
a coverage output file name.

> > > file is given on the command line to GCC.  And the output of GAS is
> > > specified with -o.
> > >
> > > The compile & assemble part of the command line is approximately 2K
> > > bytes in length.  Mostly it's pretty boring.  It's roughly:
> > >
> > >     /full/path/to/version/controlled/gcc \
> > >     -MMD -MF bin/<product-name>/some/dir/path.o.d \
> > >     more than a dozen '-iquote <some-relative-directory>' combos \
> > >     some -D switches \
> > >     some -imacros switches \
> > >     -pipe \
> > >     more than a dozen -f switches \
> > >     -Wall -Werror and about two dozen additional -W switches \
> > >     some -m switches \
> > >     -gdwarf-4 -g3 \
> > >     -S -o - some/dir/path.c \
> > >     |
> > >     /full/path/to/version/controlled/as \
> > >     -warn-fatal-warnings -64
> > >     bin/<product-name>/some/dir/path.o_
> > >
> > > On success the *.o_ file will be renamed to *.o in the same directory.
>

Reply via email to