diff options
author | hainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-04 08:05:52 +0000 |
---|---|---|
committer | hainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-04 08:05:52 +0000 |
commit | 2b98e22bd8af0c0d0b0e02720a508dcea3672658 (patch) | |
tree | 9b72ad775413c2a0a25e1d2594e350d5480b8620 /gcc/collect2.c | |
parent | e2efe9af04a8879ce46534dd3a19558b58fa9734 (diff) | |
download | gcc-2b98e22bd8af0c0d0b0e02720a508dcea3672658.tar.gz |
* collect2.c (may_unlink_output_file): New global.
(maybe_unlink): Honor it.
* collect2.h: Add extern for it.
* tlink.c (do_tlink): Set it to true if the link succeeded.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187148 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/collect2.c')
-rw-r--r-- | gcc/collect2.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/gcc/collect2.c b/gcc/collect2.c index a52e95a64e2..d0166a5b5af 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -237,6 +237,12 @@ static const char *target_system_root = TARGET_SYSTEM_ROOT; static const char *target_system_root = ""; #endif +/* Whether we may unlink the output file, which should be set as soon as we + know we have successfully produced it. This is typically useful to prevent + blindly attempting to unlink a read-only output that the target linker + would leave untouched. */ +bool may_unlink_output_file = false; + /* Structure to hold all the directories in which to search for files to execute. */ @@ -2095,15 +2101,22 @@ fork_execute (const char *prog, char **argv) do_wait (prog, pex); } -/* Unlink a file unless we are debugging. */ +/* Unlink FILE unless we are debugging or this is the output_file + and we may not unlink it. */ static void maybe_unlink (const char *file) { - if (!debug) - unlink_if_ordinary (file); - else - notice ("[Leaving %s]\n", file); + if (debug) + { + notice ("[Leaving %s]\n", file); + return; + } + + if (file == output_file && !may_unlink_output_file) + return; + + unlink_if_ordinary (file); } /* Call maybe_unlink on the NULL-terminated list, FILE_LIST. */ |