Sending to list as well.

> -----Original Message-----
> From: Tamar Christina
> Sent: Thursday, June 14, 2018 11:54
> To: 'Eric Botcazou' <ebotca...@adacore.com>; gcc-patches@gcc.gnu.org
> Subject: RE: [PATCH] Use response files from the driver in more cases
> 
> This also fixes PR86030,
> 
> Thanks Eric!
> 
> Regards,
> Tamar
> 
> > -----Original Message-----
> > From: gcc-patches-ow...@gcc.gnu.org <gcc-patches-ow...@gcc.gnu.org>
> On
> > Behalf Of Eric Botcazou
> > Sent: Thursday, April 26, 2018 11:52
> > To: gcc-patches@gcc.gnu.org
> > Subject: [PATCH] Use response files from the driver in more cases
> >
> > Hi,
> >
> > response files were added to the GNU toolchain to work around length
> > limits put on the command line by some OSes, typically Windows.  For
> > the compiler, the implementation is as follows: if a response file is
> > passed to the driver at link time, typically containing the list of
> > object files, then the list of object files is passed to collect2 in a
> > (second) response file and, if the linker is the GNU linker, collect2
> > then passes *all* the arguments to the linker in a (third) response file.
> >
> > So you can flawlessly pass a gigantic list of object files at link
> > time.  But this doesn't work for a gigantic list of -L switches,
> > because the driver will pass them to collect2 on the command line,
> > even if they were passed to it in a response file and even if they'll be
> passed to the GNU linker this way again.
> >
> > In other words, the ball is dropped between driver and collect2.
> > Similarly, if you pass a gigantic list of -I switches at compile time,
> > the driver will pass them to cc1 on the command line, even if they were
> passed to it in a response file.
> >
> > Therefore the attached patch makes it so that the -I switches and -L
> > switches are passed by the driver to cc1 and collect2 respectively in
> > a response file, if they were passed to it this way.  That's
> > implemented by extending the spec syntax with:
> >
> >  %@{...}
> >     like %{...} but puts the result into a FILE and substitutes @FILE
> >     if an @file argument has been supplied.
> >
> > and adding '@' to the LINK_COMMAND_SPEC and cpp_unique_options
> specs.
> >
> > Tested on x86-64/Linux and Windows.  We have been using this in
> > production for a couple of months.  OK for the mainline?
> >
> >
> > 2018-04-26  Eric Botcazou  <ebotca...@adacore.com>
> >
> >     * gcc.c: Document new %@{...} sequence.
> >     (LINK_COMMAND_SPEC): Use it for the -L switches.
> >     (cpp_unique_options): Use it for the -I switches.
> >     (at_file_argbuf): New global variable.
> >     (in_at_file): Likewise.
> >     (alloc_args): Create at_file_argbuf.
> >     (clear_args): Truncate at_file_argbuf.
> >     (store_arg): If in_at_file, push the argument onto at_file_argbuf.
> >     (open_at_file): New function.
> >     (close_at_file): Likewise.
> >     (create_at_file): Delete.
> >     (do_spec_1) <'i'>: Use open_at_file/close_at_file.
> >     <'o'>: Likewise.
> >     <'@'>: New case.
> >     (validate_switches_from_spec): Deal with %@{...} sequence.
> >     (validate_switches): Likewise.
> >     (driver::finalize): Call clear_args.
> >
> > --
> > Eric Botcazou

Reply via email to