On Thu, Jun 23, 2016 at 9:11 PM, Davide Italiano <dccitali...@gmail.com> wrote: > + HJ who wrote the code for the option originally. > > On Thu, Jun 23, 2016 at 9:01 PM, Davide Italiano <dccitali...@gmail.com> > wrote: >> LLVM currently ships with a new ELF linker http://lld.llvm.org/. >> I experiment a lot with gcc and lld so it would be nice if >> -fuse-ld=lld is supported (considering the linker is now mature enough >> to link large C/C++ applications). >> >> Also, IMHO, -fuse-ld should be a generic facility which accept other >> linkers (as long as they follow the convention ld.<arg>), and should >> also support absolute path, e.g. -fuse-ld=/usr/local/bin/ld.mylinker. >> Probably outside of the scope of this patch, but I thought worth >> mentioning. >> >> Thanks, >>
Hi, can anybody take a look? Thanks, -- Davide >> -- >> Davide >> >> From 323c23d79c91d7dcee2f29b9ced8c1c00703d346 Mon Sep 17 00:00:00 2001 >> From: Davide Italiano <dccitali...@gmail.com> >> Date: Thu, 23 Jun 2016 20:51:53 -0700 >> Subject: [PATCH] Driver: Add support for -fuse-ld=lld. >> >> * collect2.c (main): Support -fuse-ld=lld. >> >> * common.opt: Add fuse-ld=lld >> >> * doc/invoke.texi: Document -fuse-ld=lld >> >> * opts.c: Ignore -fuse-ld=lld >> --- >> gcc/collect2.c | 11 ++++++++--- >> gcc/common.opt | 4 ++++ >> gcc/doc/invoke.texi | 4 ++++ >> gcc/opts.c | 1 + >> 4 files changed, 17 insertions(+), 3 deletions(-) >> >> diff --git a/gcc/collect2.c b/gcc/collect2.c >> index bffac80..6a8387c 100644 >> --- a/gcc/collect2.c >> +++ b/gcc/collect2.c >> @@ -831,6 +831,7 @@ main (int argc, char **argv) >> USE_PLUGIN_LD, >> USE_GOLD_LD, >> USE_BFD_LD, >> + USE_LLD_LD, >> USE_LD_MAX >> } selected_linker = USE_DEFAULT_LD; >> static const char *const ld_suffixes[USE_LD_MAX] = >> @@ -838,7 +839,8 @@ main (int argc, char **argv) >> "ld", >> PLUGIN_LD_SUFFIX, >> "ld.gold", >> - "ld.bfd" >> + "ld.bfd", >> + "ld.lld" >> }; >> static const char *const real_ld_suffix = "real-ld"; >> static const char *const collect_ld_suffix = "collect-ld"; >> @@ -1004,6 +1006,8 @@ main (int argc, char **argv) >> selected_linker = USE_BFD_LD; >> else if (strcmp (argv[i], "-fuse-ld=gold") == 0) >> selected_linker = USE_GOLD_LD; >> + else if (strcmp (argv[i], "-fuse-ld=lld") == 0) >> + selected_linker = USE_LLD_LD; >> >> #ifdef COLLECT_EXPORT_LIST >> /* These flags are position independent, although their order >> @@ -1093,7 +1097,8 @@ main (int argc, char **argv) >> /* Maybe we know the right file to use (if not cross). */ >> ld_file_name = 0; >> #ifdef DEFAULT_LINKER >> - if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD) >> + if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD || >> + selected_linker == USE_LLD_LD) >> { >> char *linker_name; >> # ifdef HOST_EXECUTABLE_SUFFIX >> @@ -1307,7 +1312,7 @@ main (int argc, char **argv) >> else if (!use_collect_ld >> && strncmp (arg, "-fuse-ld=", 9) == 0) >> { >> - /* Do not pass -fuse-ld={bfd|gold} to the linker. */ >> + /* Do not pass -fuse-ld={bfd|gold|lld} to the linker. */ >> ld1--; >> ld2--; >> } >> diff --git a/gcc/common.opt b/gcc/common.opt >> index 5d90385..2a95a1f 100644 >> --- a/gcc/common.opt >> +++ b/gcc/common.opt >> @@ -2536,6 +2536,10 @@ fuse-ld=gold >> Common Driver Negative(fuse-ld=bfd) >> Use the gold linker instead of the default linker. >> >> +fuse-ld=lld >> +Common Driver Negative(fuse-ld=lld) >> +Use the lld LLVM linker instead of the default linker. >> + >> fuse-linker-plugin >> Common Undocumented Var(flag_use_linker_plugin) >> >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi >> index 2c87c53..4b8acff 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -10651,6 +10651,10 @@ Use the @command{bfd} linker instead of the >> default linker. >> @opindex fuse-ld=gold >> Use the @command{gold} linker instead of the default linker. >> >> +@item -fuse-ld=lld >> +@opindex fuse-ld=lld >> +Use the LLVM @command{lld} linker instead of the default linker. >> + >> @cindex Libraries >> @item -l@var{library} >> @itemx -l @var{library} >> diff --git a/gcc/opts.c b/gcc/opts.c >> index 7406210..f2c86f7 100644 >> --- a/gcc/opts.c >> +++ b/gcc/opts.c >> @@ -2178,6 +2178,7 @@ common_handle_option (struct gcc_options *opts, >> >> case OPT_fuse_ld_bfd: >> case OPT_fuse_ld_gold: >> + case OPT_fuse_ld_lld: >> case OPT_fuse_linker_plugin: >> /* No-op. Used by the driver and passed to us because it starts with >> f.*/ >> break; >> -- >> 2.5.5