summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-19 21:01:06 +0000
committerdoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-19 21:01:06 +0000
commit0dc1ebca5751c076a9ea07a7e6d6e8428bdbe73b (patch)
tree8f4628b585dfd1bbf58b2333cd36b27d3654d463
parentb6c75192521f22b4adc19304469c351cd2620012 (diff)
downloadgcc-0dc1ebca5751c076a9ea07a7e6d6e8428bdbe73b.tar.gz
2013-06-19 Matthias Klose <doko@ubuntu.com>
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@200219 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/collect2.c38
-rw-r--r--gcc/file-find.c10
-rw-r--r--gcc/file-find.h2
-rw-r--r--gcc/gcc-ar.c6
5 files changed, 37 insertions, 28 deletions
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 <doko@ubuntu.com>
+
+ 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 <sellcey@mips.com>
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],