Ping^2 Steve Ellcey sell...@cavium.com
On Thu, 2018-05-17 at 14:50 -0700, Steve Ellcey wrote: > Ping. > > Steve Ellcey > sell...@cavium.com > > > On Wed, 2018-05-02 at 12:47 -0700, Steve Ellcey wrote: > > > > This is a new version of a patch I sent out last year to stop gcc from > > trying to do a link when creating precompiled headers and a linker > > flag is also given. > > > > When I build and test GCC I also build glibc and then I run the GCC tests > > with -Wl,-rpath and -Wl,--dynamic-linker so that I don't have to install > > glibc and the compiler in the default locations. When I do this some > > precompiled header tests fail because the existance of the linker flags > > causes the compiler to try and call the linker when we really just want to > > create pch files. > > > > I tracked this down to driver::maybe_run_linker where it sees the linker > > flags and increments num_linker_inputs, this causes the routine to call > > the linker. This patch checks to see if we are creating precompiled > > header files and avoids calling the linker in that case. > > > > I tested this with the GCC testsuite and got no regressions, OK to > > checkin? > > > > Steve Ellcey > > sell...@cavium.com > > > > > > 2018-05-02 Steve Ellcey <sell...@cavium.com> > > > > * gcc.c (create_pch_flag): New variable. > > (driver::prepare_infiles): Set create_pch_flag > > when we are creating precompiled headers. > > (driver::maybe_run_linker): Do not link if > > create_pch_flag is set. > > (driver::finalize): Reset create_pch_flag. > > > > > > diff --git a/gcc/gcc.c b/gcc/gcc.c > > index a716f70..ca986cf 100644 > > --- a/gcc/gcc.c > > +++ b/gcc/gcc.c > > @@ -208,6 +208,9 @@ int is_cpp_driver; > > /* Flag set to nonzero if an @file argument has been supplied to > > gcc. */ > > static bool at_file_supplied; > > > > +/* Flag set to nonzero if we are generating a precompiled > > header. */ > > +static bool create_pch_flag; > > + > > /* Definition of string containing the arguments given to > > configure. */ > > #include "configargs.h" > > > > @@ -8095,8 +8098,15 @@ driver::prepare_infiles () > > strlen (name), > > infiles[i].lang > > ua > > ge); > > > > - if (compiler && !(compiler->combinable)) > > - combine_inputs = false; > > + if (compiler) > > + { > > + if (!(compiler->combinable)) > > + combine_inputs = false; > > + > > + if ((strcmp(compiler->suffix, "@c-header") == 0) > > + || (strcmp(compiler->suffix, "@c++-header") == 0)) > > + create_pch_flag = true; > > + } > > > > if (lang_n_infiles > 0 && compiler != input_file_compiler > > && infiles[i].language && infiles[i].language[0] != '*') > > @@ -8282,6 +8292,10 @@ driver::maybe_run_linker (const char *argv0) > > const > > int linker_was_run = 0; > > int num_linker_inputs; > > > > + /* If we are creating a precompiled header, do not run the > > linker. */ > > + if (create_pch_flag) > > + return; > > + > > /* Determine if there are any linker input files. */ > > num_linker_inputs = 0; > > for (i = 0; (int) i < n_infiles; i++) > > @@ -10052,6 +10066,7 @@ driver::finalize () > > > > is_cpp_driver = 0; > > at_file_supplied = 0; > > + create_pch_flag = 0; > > print_help_list = 0; > > print_version = 0; > > verbose_only_flag = 0;