From: Matthias Klose Date: Wed, 19 Jun 2013 21:01:06 +0000 (+0000) Subject: re PR driver/57651 (gcc-ar and gcc-nm don't find the lto plugin) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a09f1a766b297f1e248c86b3d2795c1501a506ef;p=gcc.git re PR driver/57651 (gcc-ar and gcc-nm don't find the lto plugin) 2013-06-19 Matthias Klose PR driver/57651 * file-find.h (find_a_file): Add a mode parameter. * file-find.c (find_a_file): Likewise. * gcc-ar.c (main): Call find_a_file with R_OK for the plugin, with X_OK for the executables. * collect2.c (main): Call find_a_file with X_OK. From-SVN: r200219 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 474a323baf2..c754159ed13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2013-06-19 Matthias Klose + + PR driver/57651 + * file-find.h (find_a_file): Add a mode parameter. + * file-find.c (find_a_file): Likewise. + * gcc-ar.c (main): Call find_a_file with R_OK for the plugin, + with X_OK for the executables. + * collect2.c (main): Call find_a_file with X_OK. + 2013-06-19 Steve Ellcey PR target/56942 diff --git a/gcc/collect2.c b/gcc/collect2.c index d3119b02249..b1eafb84b5b 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1110,55 +1110,55 @@ main (int argc, char **argv) if (ld_file_name == 0) #endif #ifdef REAL_LD_FILE_NAME - ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME); + ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME, X_OK); if (ld_file_name == 0) #endif /* Search the (target-specific) compiler dirs for ld'. */ - ld_file_name = find_a_file (&cpath, real_ld_suffix); + ld_file_name = find_a_file (&cpath, real_ld_suffix, X_OK); /* Likewise for `collect-ld'. */ if (ld_file_name == 0) { - ld_file_name = find_a_file (&cpath, collect_ld_suffix); + ld_file_name = find_a_file (&cpath, collect_ld_suffix, X_OK); use_collect_ld = ld_file_name != 0; } /* Search the compiler directories for `ld'. We have protection against recursive calls in find_a_file. */ if (ld_file_name == 0) - ld_file_name = find_a_file (&cpath, ld_suffixes[selected_linker]); + ld_file_name = find_a_file (&cpath, ld_suffixes[selected_linker], X_OK); /* Search the ordinary system bin directories for `ld' (if native linking) or `TARGET-ld' (if cross). */ if (ld_file_name == 0) - ld_file_name = find_a_file (&path, full_ld_suffixes[selected_linker]); + ld_file_name = find_a_file (&path, full_ld_suffixes[selected_linker], X_OK); #ifdef REAL_NM_FILE_NAME - nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME); + nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME, X_OK); if (nm_file_name == 0) #endif - nm_file_name = find_a_file (&cpath, gnm_suffix); + nm_file_name = find_a_file (&cpath, gnm_suffix, X_OK); if (nm_file_name == 0) - nm_file_name = find_a_file (&path, full_gnm_suffix); + nm_file_name = find_a_file (&path, full_gnm_suffix, X_OK); if (nm_file_name == 0) - nm_file_name = find_a_file (&cpath, nm_suffix); + nm_file_name = find_a_file (&cpath, nm_suffix, X_OK); if (nm_file_name == 0) - nm_file_name = find_a_file (&path, full_nm_suffix); + nm_file_name = find_a_file (&path, full_nm_suffix, X_OK); #ifdef LDD_SUFFIX - ldd_file_name = find_a_file (&cpath, ldd_suffix); + ldd_file_name = find_a_file (&cpath, ldd_suffix, X_OK); if (ldd_file_name == 0) - ldd_file_name = find_a_file (&path, full_ldd_suffix); + ldd_file_name = find_a_file (&path, full_ldd_suffix, X_OK); #endif #ifdef REAL_STRIP_FILE_NAME - strip_file_name = find_a_file (&path, REAL_STRIP_FILE_NAME); + strip_file_name = find_a_file (&path, REAL_STRIP_FILE_NAME, X_OK); if (strip_file_name == 0) #endif - strip_file_name = find_a_file (&cpath, gstrip_suffix); + strip_file_name = find_a_file (&cpath, gstrip_suffix, X_OK); if (strip_file_name == 0) - strip_file_name = find_a_file (&path, full_gstrip_suffix); + strip_file_name = find_a_file (&path, full_gstrip_suffix, X_OK); if (strip_file_name == 0) - strip_file_name = find_a_file (&cpath, strip_suffix); + strip_file_name = find_a_file (&cpath, strip_suffix, X_OK); if (strip_file_name == 0) - strip_file_name = find_a_file (&path, full_strip_suffix); + strip_file_name = find_a_file (&path, full_strip_suffix, X_OK); /* Determine the full path name of the C compiler to use. */ c_file_name = getenv ("COLLECT_GCC"); @@ -1171,12 +1171,12 @@ main (int argc, char **argv) #endif } - p = find_a_file (&cpath, c_file_name); + p = find_a_file (&cpath, c_file_name, X_OK); /* Here it should be safe to use the system search path since we should have already qualified the name of the compiler when it is needed. */ if (p == 0) - p = find_a_file (&path, c_file_name); + p = find_a_file (&path, c_file_name, X_OK); if (p) c_file_name = p; diff --git a/gcc/file-find.c b/gcc/file-find.c index 45af9380d03..bc6b4349ef5 100644 --- a/gcc/file-find.c +++ b/gcc/file-find.c @@ -31,7 +31,7 @@ find_file_set_debug(bool debug_state) } char * -find_a_file (struct path_prefix *pprefix, const char *name) +find_a_file (struct path_prefix *pprefix, const char *name, int mode) { char *temp; struct prefix_list *pl; @@ -50,7 +50,7 @@ find_a_file (struct path_prefix *pprefix, const char *name) if (IS_ABSOLUTE_PATH (name)) { - if (access (name, X_OK) == 0) + if (access (name, mode) == 0) { strcpy (temp, name); @@ -66,7 +66,7 @@ find_a_file (struct path_prefix *pprefix, const char *name) strcpy (temp, name); strcat (temp, HOST_EXECUTABLE_SUFFIX); - if (access (temp, X_OK) == 0) + if (access (temp, mode) == 0) return temp; #endif @@ -83,7 +83,7 @@ find_a_file (struct path_prefix *pprefix, const char *name) if (stat (temp, &st) >= 0 && ! S_ISDIR (st.st_mode) - && access (temp, X_OK) == 0) + && access (temp, mode) == 0) return temp; #ifdef HOST_EXECUTABLE_SUFFIX @@ -93,7 +93,7 @@ find_a_file (struct path_prefix *pprefix, const char *name) if (stat (temp, &st) >= 0 && ! S_ISDIR (st.st_mode) - && access (temp, X_OK) == 0) + && access (temp, mode) == 0) return temp; #endif } diff --git a/gcc/file-find.h b/gcc/file-find.h index 0cbf8d19d09..43a2d3f28ec 100644 --- a/gcc/file-find.h +++ b/gcc/file-find.h @@ -38,7 +38,7 @@ struct path_prefix }; extern void find_file_set_debug (bool); -extern char *find_a_file (struct path_prefix *, const char *); +extern char *find_a_file (struct path_prefix *, const char *, int); extern void add_prefix (struct path_prefix *, const char *); extern void prefix_from_env (const char *, struct path_prefix *); extern void prefix_from_string (const char *, struct path_prefix *); diff --git a/gcc/gcc-ar.c b/gcc/gcc-ar.c index e3ad54b327e..ef425c1cb30 100644 --- a/gcc/gcc-ar.c +++ b/gcc/gcc-ar.c @@ -136,7 +136,7 @@ main(int ac, char **av) setup_prefixes (av[0]); /* Find the GCC LTO plugin */ - plugin = find_a_file (&target_path, LTOPLUGINSONAME); + plugin = find_a_file (&target_path, LTOPLUGINSONAME, R_OK); if (!plugin) { fprintf (stderr, "%s: Cannot find plugin '%s'\n", av[0], LTOPLUGINSONAME); @@ -144,14 +144,14 @@ main(int ac, char **av) } /* Find the wrapped binutils program. */ - exe_name = find_a_file (&target_path, PERSONALITY); + exe_name = find_a_file (&target_path, PERSONALITY, X_OK); if (!exe_name) { const char *real_exe_name = PERSONALITY; #ifdef CROSS_DIRECTORY_STRUCTURE real_exe_name = concat (target_machine, "-", PERSONALITY, NULL); #endif - exe_name = find_a_file (&path, real_exe_name); + exe_name = find_a_file (&path, real_exe_name, X_OK); if (!exe_name) { fprintf (stderr, "%s: Cannot find binary '%s'\n", av[0],