mirror of git://gcc.gnu.org/git/gcc.git
lto: Remove link() to fix build with MinGW [PR118238]
I used link() to create cheap copies of Incremental LTO cache contents to prevent their deletion once linking is finished. This is unnecessary, since output_files are deleted in our lto-plugin and not in the linker itself. Bootstrapped/regtested on x86_64-linux. lto-wrapper now again builds on MinGW. Though so far I have not setup MinGW to be able to do full bootstrap. Ok for trunk? PR lto/118238 gcc/ChangeLog: * lto-wrapper.cc (run_gcc): Remove link() copying. lto-plugin/ChangeLog: * lto-plugin.c (cleanup_handler): Keep output_files when using Incremental LTO. (onload): Detect Incremental LTO.
This commit is contained in:
parent
d6f1961e68
commit
ed1233115c
|
@ -1571,6 +1571,8 @@ run_gcc (unsigned argc, char *argv[])
|
|||
/* Exists. */
|
||||
if (access (option->arg, W_OK) == 0)
|
||||
ltrans_cache_dir = option->arg;
|
||||
else
|
||||
fatal_error (input_location, "missing directory: %s", option->arg);
|
||||
break;
|
||||
|
||||
case OPT_flto_incremental_cache_size_:
|
||||
|
@ -2218,39 +2220,13 @@ cont:
|
|||
{
|
||||
for (i = 0; i < nr; ++i)
|
||||
{
|
||||
char *input_name = input_names[i];
|
||||
char const *output_name = output_names[i];
|
||||
|
||||
ltrans_file_cache::item* item;
|
||||
item = ltrans_cache.get_item (input_name);
|
||||
item = ltrans_cache.get_item (input_names[i]);
|
||||
|
||||
if (item && !save_temps)
|
||||
if (item)
|
||||
{
|
||||
/* Ensure LTRANS for this item finished. */
|
||||
item->lock.lock_read ();
|
||||
/* Ensure that cached compiled file is not deleted.
|
||||
Create copy. */
|
||||
|
||||
obstack_grow (&env_obstack, output_name,
|
||||
strlen (output_name) - 2);
|
||||
obstack_grow (&env_obstack, ".cache_copy.XXX.o",
|
||||
sizeof (".cache_copy.XXX.o"));
|
||||
|
||||
char* output_name_link = XOBFINISH (&env_obstack, char *);
|
||||
char* name_idx = output_name_link + strlen (output_name_link)
|
||||
- strlen ("XXX.o");
|
||||
|
||||
/* lto-wrapper can run in parallel and access
|
||||
the same partition. */
|
||||
for (int j = 0; ; j++)
|
||||
{
|
||||
gcc_assert (j < 1000);
|
||||
sprintf (name_idx, "%03d.o", j);
|
||||
|
||||
if (link (output_name, output_name_link) != EEXIST)
|
||||
break;
|
||||
}
|
||||
|
||||
output_names[i] = output_name_link;
|
||||
item->lock.unlock ();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -214,6 +214,7 @@ static char *ltrans_objects = NULL;
|
|||
|
||||
static bool debug;
|
||||
static bool save_temps;
|
||||
static bool flto_incremental;
|
||||
static bool verbose;
|
||||
static char nop;
|
||||
static char *resolution_file = NULL;
|
||||
|
@ -941,8 +942,9 @@ cleanup_handler (void)
|
|||
if (arguments_file_name)
|
||||
maybe_unlink (arguments_file_name);
|
||||
|
||||
for (i = 0; i < num_output_files; i++)
|
||||
maybe_unlink (output_files[i]);
|
||||
if (!flto_incremental)
|
||||
for (i = 0; i < num_output_files; i++)
|
||||
maybe_unlink (output_files[i]);
|
||||
|
||||
free_2 ();
|
||||
return LDPS_OK;
|
||||
|
@ -1615,6 +1617,9 @@ onload (struct ld_plugin_tv *tv)
|
|||
if (strstr (collect_gcc_options, "'-save-temps'"))
|
||||
save_temps = true;
|
||||
|
||||
if (strstr (collect_gcc_options, "'-flto-incremental="))
|
||||
flto_incremental = true;
|
||||
|
||||
if (strstr (collect_gcc_options, "'-v'")
|
||||
|| strstr (collect_gcc_options, "'--verbose'"))
|
||||
verbose = true;
|
||||
|
|
Loading…
Reference in New Issue