Hi, this is the remaining issue that happens when -flto and -save-temps is used together, it leaks several files in /tmp.
I try to give more background to how these temp files are created, and in all likelihood the leaking of these files is wanted, and certainly very helpful for debugging lto issues, that's for sure. It is just not helpful that they need to be looked up in the /tmp folder, even if you want to debug something with lto. The short story is... They are created here: if (parallel) { makefile = make_temp_file (".mk"); mstream = fopen (makefile, "w"); and here: /* Note: we assume argv contains at least one element; this is checked above. */ response_file = make_temp_file (""); f = fopen (response_file, "w"); And in a few other places as well, it depends a bit if -o is used or not (i.e. linker_output != NULL or not). and not removed here: if (response_file && !save_temps) { unlink (response_file); response_file = NULL; } and here: do_wait (new_argv[0], pex); maybe_unlink (makefile); makefile = NULL; the code with the response_file is executed both in lto-wrapper and collect2, but in collect2 only when if is invoked from lto-wrapper, triggered by the @file argument list. Therefore I figured that the best possible solution is just let lto-wrapper create a temp-file for those problem cases, and use TMPDIR to have all make_temp_file that follow use that to folder to place the those response files and other stuff in there. So that is what I split out from the previous patch, which focused on collect2. Bootstrapped and reg-tested on x86_64-pc-linux-gnu. Is it OK for trunk? Thanks Bernd.
From d6dc826c63dc881fe41dbf0c3a461008afdef8b3 Mon Sep 17 00:00:00 2001 From: Bernd Edlinger <bernd.edlin...@hotmail.de> Date: Mon, 17 Feb 2020 17:40:07 +0100 Subject: [PATCH] Fix -save-temp leaking lto files in /tmp When linking with -flto and -save-temps, various temporary files are created in /tmp. They would normally be deleted without -save-temps, but are retained for debugging purposes, which is good. So this just creates a folder named as output-file.lto_tmpdir, which makes this feature even more useful, as the temporary files do not linger in the /tmp directoy but instead are more easy to locate this way. 2020-02-20 Bernd Edlinger <bernd.edlin...@hotmail.de> * lto-wrapper.c (run_gcc): Create an lto tmpdir and use it when -save-temps is used. --- gcc/lto-wrapper.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index fe8f292..fdc9565 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -1423,6 +1423,17 @@ run_gcc (unsigned argc, char *argv[]) fputc ('\n', stderr); } + if (save_temps) + { + char *tmpdir = concat (linker_output ? linker_output : "a.out", + ".lto_tmpdir", NULL); + /* Make directory if necessary, but expect no race here. */ + if (access (tmpdir, F_OK) == 0 + || mkdir (tmpdir, S_IRWXU | S_IRWXG | S_IRWXO) == 0) + setenv ("TMPDIR", tmpdir, 1); + free (tmpdir); + } + if (linker_output_rel) no_partition = true; -- 1.9.1