Commit 8ead2223 by Kai Tietz Committed by Kai Tietz

re PR lto/47241 (lto not work on mingw32, reporting 'ld.exe: could not unlink output file')

2011-02-10  Kai Tietz  <kai.tietz@onevision.com>

        PR lto/47241
        * lto.c (lto_read_section_data): Free
        fd_name in failure case.
        For mingw targets don't hash file-descriptor.
        (read_cgraph_and_symbols): Close current_lto_file
        in failure case.

From-SVN: r169999
parent 06c969bd
2011-02-10 Kai Tietz <kai.tietz@onevision.com>
PR lto/47241
* lto.c (lto_read_section_data): Free
fd_name in failure case.
For mingw targets don't hash file-descriptor.
(read_cgraph_and_symbols): Close current_lto_file
in failure case.
2011-01-11 Jan Hubicka <jh@suse.cz> 2011-01-11 Jan Hubicka <jh@suse.cz>
PR lto/45721 PR lto/45721
......
...@@ -590,10 +590,10 @@ lto_read_section_data (struct lto_file_decl_data *file_data, ...@@ -590,10 +590,10 @@ lto_read_section_data (struct lto_file_decl_data *file_data,
} }
if (fd == -1) if (fd == -1)
{ {
fd_name = xstrdup (file_data->file_name);
fd = open (file_data->file_name, O_RDONLY|O_BINARY); fd = open (file_data->file_name, O_RDONLY|O_BINARY);
if (fd == -1) if (fd == -1)
return NULL; return NULL;
fd_name = xstrdup (file_data->file_name);
} }
#if LTO_MMAP_IO #if LTO_MMAP_IO
...@@ -619,9 +619,17 @@ lto_read_section_data (struct lto_file_decl_data *file_data, ...@@ -619,9 +619,17 @@ lto_read_section_data (struct lto_file_decl_data *file_data,
|| read (fd, result, len) != (ssize_t) len) || read (fd, result, len) != (ssize_t) len)
{ {
free (result); free (result);
return NULL; result = NULL;
} }
#ifdef __MINGW32__
/* Native windows doesn't supports delayed unlink on opened file. So
we close file here again. This produces higher I/O load, but at least
it prevents to have dangling file handles preventing unlink. */
free (fd_name);
fd_name = NULL;
close (fd);
fd = -1;
#endif
return result; return result;
#endif #endif
} }
...@@ -2147,7 +2155,11 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames) ...@@ -2147,7 +2155,11 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
file_data = lto_file_read (current_lto_file, resolution, &count); file_data = lto_file_read (current_lto_file, resolution, &count);
if (!file_data) if (!file_data)
break; {
lto_obj_file_close (current_lto_file);
current_lto_file = NULL;
break;
}
decl_data[last_file_ix++] = file_data; decl_data[last_file_ix++] = file_data;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment