summaryrefslogtreecommitdiff
path: root/gcc/gcc-ar.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2016-07-07 14:03:39 +0200
committerMartin Liska <marxin@gcc.gnu.org>2016-07-07 12:03:39 +0000
commitf965d3dad7edb527e465d7d2811294177daee53c (patch)
tree9776d8d0e93b2015a8b4ebed34c65d2f6e684da5 /gcc/gcc-ar.c
parent019d6598357659e05640cf762b75e18953f70fe9 (diff)
Prevent LTO wrappers to process a recursive execution
* file-find.c (remove_prefix): New function. * file-find.h (remove_prefix): Declare the function. * gcc-ar.c (main): Skip a folder of the wrapper if a wrapped binary would point to the same file. From-SVN: r238089
Diffstat (limited to 'gcc/gcc-ar.c')
-rw-r--r--gcc/gcc-ar.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/gcc-ar.c b/gcc/gcc-ar.c
index 45ba3617ff3..a02dccb8000 100644
--- a/gcc/gcc-ar.c
+++ b/gcc/gcc-ar.c
@@ -194,6 +194,14 @@ main (int ac, char **av)
#ifdef CROSS_DIRECTORY_STRUCTURE
real_exe_name = concat (target_machine, "-", PERSONALITY, NULL);
#endif
+ /* Do not search original location in the same folder. */
+ char *exe_folder = lrealpath (av[0]);
+ exe_folder[strlen (exe_folder) - strlen (lbasename (exe_folder))] = '\0';
+ char *location = concat (exe_folder, PERSONALITY, NULL);
+
+ if (access (location, X_OK) == 0)
+ remove_prefix (exe_folder, &path);
+
exe_name = find_a_file (&path, real_exe_name, X_OK);
if (!exe_name)
{