]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Driver: Add new -truncate option
authorPeter Damianov <peter0x44@disroot.org>
Sun, 28 Apr 2024 23:16:11 +0000 (16:16 -0700)
committerRichard Biener <rguenther@suse.de>
Thu, 2 May 2024 10:42:33 +0000 (12:42 +0200)
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 <peter0x44@disroot.org>
PR lto/110710
* common.opt (truncate): New internal option.
* gcc.cc (totruncate_file): New global.
(driver_handle_option): Handle -truncate <file>.
(driver::final_actions): Truncate the file indicated.

gcc/common.opt
gcc/gcc.cc

index ad3488447752b6335bc9bd51f1b5d6705f740680..40cab3cb36a33b147b881592919f0ed488fcd4dd 100644 (file)
@@ -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)
 
index 728332b81538f7252e19e96c8699e3f69b698e2b..830a4700a87b393d2a3b32d3b8eb69de1e3c86d6 100644 (file)
@@ -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"));