On Mon, Apr 29, 2024 at 1:27 AM Peter0x44 <peter0...@disroot.org> wrote: > > 29 Apr 2024 12:16:26 am Peter Damianov <peter0...@disroot.org>: > > > This commit adds a new option to the driver that truncates one file > > after > > linking. > > > > Tested likeso: > > > > $ gcc hello.c -c > > $ du -h hello.o > > 4.0K hello.o > > $ gcc hello.o -truncate hello.o > > $ ./a.out > > Hello world > > $ du -h hello.o > > $ 0 hello.o > > > > $ gcc hello.o -truncate > > gcc: error: missing filename after '-truncate' > > > > The motivation for adding this is PR110710. It is used by lto-wrapper > > to > > truncate files in a shell-independent manner. > > > > Signed-off-by: Peter Damianov <peter0...@disroot.org> > > --- > > gcc/common.opt | 6 ++++++ > > gcc/gcc.cc | 14 ++++++++++++++ > > 2 files changed, 20 insertions(+) > > > > diff --git a/gcc/common.opt b/gcc/common.opt > > index ad348844775..40cab3cb36a 100644 > > --- a/gcc/common.opt > > +++ b/gcc/common.opt > > @@ -422,6 +422,12 @@ Display target specific command line options > > (including assembler and linker opt > > -time > > Driver Alias(time) > > > > +;; Truncate the file specified after linking. > > +;; This option is used by lto-wrapper to reduce the peak disk-usage > > when > > +;; linking with many .LTRANS units. > > +truncate > > +Driver Separate Undocumented MissingArgError(missing filename after > > %qs) > > + > > -verbose > > Driver Alias(v) > > > > diff --git a/gcc/gcc.cc b/gcc/gcc.cc > > index 728332b8153..830a4700a87 100644 > > --- a/gcc/gcc.cc > > +++ b/gcc/gcc.cc > > @@ -2138,6 +2138,10 @@ static int have_E = 0; > > /* Pointer to output file name passed in with -o. */ > > static const char *output_file = 0; > > > > +/* Pointer to input file name passed in with -truncate. > > + This file should be truncated after linking. */ > > +static const char *totruncate_file = 0; > > + > > /* This is the list of suffixes and codes (%g/%u/%U/%j) and the > > associated > > temp file. If the HOST_BIT_BUCKET is used for %j, no entry is made > > for > > it here. */ > > @@ -4538,6 +4542,11 @@ driver_handle_option (struct gcc_options *opts, > > do_save = false; > > break; > > > > + case OPT_truncate: > > + totruncate_file = arg; > > + do_save = false; > > + break; > > + > > case OPT____: > > /* "-###" > > This is similar to -v except that there is no execution > > @@ -9286,6 +9295,11 @@ driver::final_actions () const > > delete_failure_queue (); > > delete_temp_files (); > > > > + if (totruncate_file != NULL && !seen_error ()) > > + /* Truncate file specified by -truncate. > > + Used by lto-wrapper to reduce temporary disk-space usage. */ > > + truncate(totruncate_file, 0); > > + > > if (print_help_list) > > { > > printf (("\nFor bug reporting instructions, please see:\n")); > > -- > > 2.39.2 > I resubmitted the patch because the previous one had a mistake. > > It didn't set "do_save" to false, so it resulted in problems like this: > > ./gcc/xgcc -truncate > xgcc: error: missing filename after ‘-truncate’ > xgcc: fatal error: no input files > > ./gcc/xgcc -truncate ?? > xgcc: error: unrecognized command-line option ‘-truncate’ > xgcc: fatal error: no input files > > Therefore regressing some tests, and not working properly. > After fixing this, I ran all of the LTO tests again and observed no > failures. > > I'm not sure how I ever observed it working before, but I'm reasonably > confident this is correct now.
The series is still OK. I suppose you do not have git write access so I am testing the series with a LTO bootstrap and will push it once that's successful. Thanks, Richard.