summaryrefslogtreecommitdiff
path: root/gcc/collect2.c
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2013-12-19 18:11:42 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2013-12-19 10:11:42 -0800
commitb78e932d513b7d3373bc5e1aab456dda737d07d0 (patch)
tree9cd489829df0a7b71a7ba27da9b9f1ec45d2f759 /gcc/collect2.c
parent582e2e430089a54069f3e38eb8a2bacd36c42af5 (diff)
Improve -fuse-ld=[bfd|gold] check
PR driver/59321 * collect2.c (main): Check -fuse-ld=[bfd|gold] when DEFAULT_LINKER is defined. * common.opt (fuse-ld=bfd): Add Driver. (fuse-ld=gold): Likewise. * gcc.c (use_ld): New variable. (driver_handle_option): Set use_ld for OPT_fuse_ld_bfd and OPT_fuse_ld_gold. (main): Check -fuse-ld=[bfd|gold] for -print-prog-name=ld. From-SVN: r206129
Diffstat (limited to 'gcc/collect2.c')
-rw-r--r--gcc/collect2.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/gcc/collect2.c b/gcc/collect2.c
index 95f817d307a..1d8ea4f9173 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -1121,7 +1121,35 @@ main (int argc, char **argv)
/* Maybe we know the right file to use (if not cross). */
ld_file_name = 0;
#ifdef DEFAULT_LINKER
- if (access (DEFAULT_LINKER, X_OK) == 0)
+ if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD)
+ {
+ char *linker_name;
+# ifdef HOST_EXECUTABLE_SUFFIX
+ int len = (sizeof (DEFAULT_LINKER)
+ - sizeof (HOST_EXECUTABLE_SUFFIX));
+ linker_name = NULL;
+ if (len > 0)
+ {
+ char *default_linker = xstrdup (DEFAULT_LINKER);
+ /* Strip HOST_EXECUTABLE_SUFFIX if DEFAULT_LINKER contains
+ HOST_EXECUTABLE_SUFFIX. */
+ if (! strcmp (&default_linker[len], HOST_EXECUTABLE_SUFFIX))
+ {
+ default_linker[len] = '\0';
+ linker_name = concat (default_linker,
+ &ld_suffixes[selected_linker][2],
+ HOST_EXECUTABLE_SUFFIX, NULL);
+ }
+ }
+ if (linker_name == NULL)
+# endif
+ linker_name = concat (DEFAULT_LINKER,
+ &ld_suffixes[selected_linker][2],
+ NULL);
+ if (access (linker_name, X_OK) == 0)
+ ld_file_name = linker_name;
+ }
+ if (ld_file_name == 0 && access (DEFAULT_LINKER, X_OK) == 0)
ld_file_name = DEFAULT_LINKER;
if (ld_file_name == 0)
#endif