On Sat, Oct 20, 2018 at 3:19 AM Romain Geissler <romain.geiss...@amadeus.com> wrote: > > Hi, > > I would like to raise again the question of supporting -fuse-ld=ldd. A > patch implementing it was already submitted in > https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01722.html by Davide > Italiano. This patch still applies correctly to current trunk. I am CC-ing > the original author and re-posting it here unchanged for reference. > > I think we can consider this patch as relevant despite the goals and > licence difference of LLVM vs GNU, based on what was written by Mike Stump > in https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00157.html > > Back then, the technical problem raised by lld was reported as > https://bugs.llvm.org/show_bug.cgi?id=28414 now closed. In this bug, every > reported problems have been fixed except the last one. H.J. Lu mentions > this last problem (lld does not produces symbol versions predecessor > relationship while ld.bfd and ld.gold do, which seems to be a decision > taken on purpose and advertised as a harmless change) as being one reason > against supporting in -fuse-ld=ldd in gcc. Is it still the case today, and > if yes, why ? > > Is there any other reason why -fuse-ld=ldd shall not be supported by gcc ? > > Cheers, > Romain > > 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;
LGTM. But I can't approve it. -- H.J.