Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On Fri, 25 Jan 2019, Jonathan Wakely wrote: > This patch was committed to trunk (r265940), but HJ's review comments > were never addressed (and look correct to me): > https://clicktime.symantec.com/3QJw9yc7Scra74WXzR3yBDR6H2?u=https%3A%2F%2Fgcc.gnu.org%2Fml%2Fgcc-patches%2F2016-07%2Fmsg00146.html > > The multi-line condition should be split before the || operator not > after it, and the negation of -fuse-ld=lld is not -fuse-ld-lld. Hi, This small cosmetic patch should address it. I don't know how much spaces should be used to indent the second and third lines in the if condition, this of course can be changed if it doesn't follow the gcc guidelines. Cheers, Romain 2019-02-04 Romain Geissler * collect2.c (main): Use one condition per line when checking for selected_linker. * common.opt (-fuse-ld=gold, -fuse-ld=lld): Adjust negative driver option. >From ff9489bad0eda7b1a551ba454300022def0c8c77 Mon Sep 17 00:00:00 2001 From: Romain Geissler Date: Mon, 4 Feb 2019 11:49:41 + Subject: [PATCH] Cosmetic changes for -fuse-ld=lld patch. --- gcc/collect2.c | 5 +++-- gcc/common.opt | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/collect2.c b/gcc/collect2.c index da956bfd984..96e449962e9 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1127,8 +1127,9 @@ 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 || - selected_linker == USE_LLD_LD) + if (selected_linker == USE_BFD_LD + || selected_linker == USE_GOLD_LD + || selected_linker == USE_LLD_LD) { char *linker_name; # ifdef HOST_EXECUTABLE_SUFFIX diff --git a/gcc/common.opt b/gcc/common.opt index 295cb1f55e1..03d8bc36260 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2792,11 +2792,11 @@ Common Driver Negative(fuse-ld=gold) Use the bfd linker instead of the default linker. fuse-ld=gold -Common Driver Negative(fuse-ld=bfd) +Common Driver Negative(fuse-ld=lld) Use the gold linker instead of the default linker. fuse-ld=lld -Common Driver Negative(fuse-ld=lld) +Common Driver Negative(fuse-ld=bfd) Use the lld LLVM linker instead of the default linker. fuse-linker-plugin -- 2.17.1
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On 29/01/19 14:12 -0500, Marek Polacek wrote: On Tue, Jan 29, 2019 at 07:07:31PM +, Romain GEISSLER wrote: > Le 29 janv. 2019 à 20:03, Marek Polacek a écrit : > > On Fri, Jan 25, 2019 at 03:06:41PM +, Jonathan Wakely wrote: > > Indeed. Romain, are you going to submit a followup patch to address this? > > Marek Hi, I submitted the original patch because it was not written by me but by Davide, and I thought that modifying myself would require me to sign a FSF copyright assignment (which is Ok for me, but my employer needs to sign too and right now it is not done). So if the followup patch can be committed without assignment, I can do it right now. If not, I will need to get my company legal team to figure out the assignment and it can take weeks. Do you think it would be obvious enough not to require an assignment ? Thanks for the quick response. I believe a formatting fix and a trivial 1- or 2-line change can be committed without that assignment. Agreed.
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On Tue, Jan 29, 2019 at 07:07:31PM +, Romain GEISSLER wrote: > > Le 29 janv. 2019 à 20:03, Marek Polacek a écrit : > > > > On Fri, Jan 25, 2019 at 03:06:41PM +, Jonathan Wakely wrote: > > > > Indeed. Romain, are you going to submit a followup patch to address this? > > > > Marek > > Hi, > > I submitted the original patch because it was not written by me but by > Davide, and I thought that modifying myself would require me to sign a FSF > copyright assignment (which is Ok for me, but my employer needs to sign too > and right now it is not done). > > So if the followup patch can be committed without assignment, I can do it > right now. If not, I will need to get my company legal team to figure out the > assignment and it can take weeks. Do you think it would be obvious enough not > to require an assignment ? Thanks for the quick response. I believe a formatting fix and a trivial 1- or 2-line change can be committed without that assignment. Marek
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
> Le 29 janv. 2019 à 20:03, Marek Polacek a écrit : > > On Fri, Jan 25, 2019 at 03:06:41PM +, Jonathan Wakely wrote: > > Indeed. Romain, are you going to submit a followup patch to address this? > > Marek Hi, I submitted the original patch because it was not written by me but by Davide, and I thought that modifying myself would require me to sign a FSF copyright assignment (which is Ok for me, but my employer needs to sign too and right now it is not done). So if the followup patch can be committed without assignment, I can do it right now. If not, I will need to get my company legal team to figure out the assignment and it can take weeks. Do you think it would be obvious enough not to require an assignment ? Cheers, Romain
Re: [Driver] Add support for -fuse-ld=lld
On Fri, Jan 25, 2019 at 03:06:41PM +, Jonathan Wakely wrote: > On 20/10/18 12:18 +0200, Romain Geissler 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 ? > > This patch was committed to trunk (r265940), but HJ's review comments > were never addressed (and look correct to me): > https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00146.html > > The multi-line condition should be split before the || operator not > after it, and the negation of -fuse-ld=lld is not -fuse-ld-lld. Indeed. Romain, are you going to submit a followup patch to address this? Marek
Re: [Driver] Add support for -fuse-ld=lld
On Sat, Jan 26, 2019 at 04:34:59PM -0600, Segher Boessenkool wrote: > On Thu, Jun 23, 2016 at 09:01:30PM -0700, Davide Italiano 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.), 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. > > This can never work correctly. > > The many HAVE_LD_* flags are set for the linker you are configured > against. Now normally GNU ld and Gold will be built from the same tree, > so they will be at least mostly compatible. But for some other linker > that cannot ever work. If you can choose a random linker at runtime then > the linker features the compiler is built for will almost certainly not > match those that linker has. > > You can built with --with-ld=/some/path/to/your/lld, and *that* should > work fine. But -fuse-ld=/smth/random will result in randomness. Yes, and please do note (distros!!) that --with-ld will result in -B also not being able to specify a linker. That's a pain if you want to run the binutils ld testsuite. You'll get something like: ERROR: ERROR: Your compiler driver ignores -B when choosing ld. ERROR: You will not be testing the new ld in many of the following tests. ERROR: It seems you will be testing /usr/bin/x86_64-w64-mingw32-ld instead. ERROR: -- Alan Modra Australia Development Lab, IBM
Re: [Driver] Add support for -fuse-ld=lld
On Thu, Jun 23, 2016 at 09:01:30PM -0700, Davide Italiano 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.), 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. This can never work correctly. The many HAVE_LD_* flags are set for the linker you are configured against. Now normally GNU ld and Gold will be built from the same tree, so they will be at least mostly compatible. But for some other linker that cannot ever work. If you can choose a random linker at runtime then the linker features the compiler is built for will almost certainly not match those that linker has. You can built with --with-ld=/some/path/to/your/lld, and *that* should work fine. But -fuse-ld=/smth/random will result in randomness. Segher
Re: [Driver] Add support for -fuse-ld=lld
On 20/10/18 12:18 +0200, Romain Geissler 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 ? This patch was committed to trunk (r265940), but HJ's review comments were never addressed (and look correct to me): https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00146.html The multi-line condition should be split before the || operator not after it, and the negation of -fuse-ld=lld is not -fuse-ld-lld.
Re: [Driver] Add support for -fuse-ld=lld
On 10/20/18 4:18 AM, Romain Geissler 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 > 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 THanks. Installed. JEff
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On Thu, 8 Nov 2018, Richard Biener wrote: The patch is OK. Thanks, Richard. Thanks. Can you please apply it as I don't have any commit rights ? The patch can be found in https://gcc.gnu.org/ml/gcc-patches/2018-10/msg01240.html Here is a valid gcc/ChangeLog correctly formated where I am referrencing the original author of the patch (not me). Cheers, Romain 2018-11-08 Davide Italiano * 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
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On Thu, Nov 8, 2018 at 12:00 PM Romain Geissler wrote: > > On Tue, 6 Nov 2018, H.J. Lu wrote: > > > On Sat, Oct 20, 2018 at 3:19 AM Romain Geissler > > wrote: > > > > > > I would like to raise again the question of supporting -fuse-ld=lld. > > > > > > > LGTM. But I can't approve it. > > > > -- > > H.J. > > Hi, > > Is there any gcc reviewer that could comment whether or not this small > feature is welcome in gcc ? The patch is OK. Thanks, Richard. > Cheers, > Romain
Re: [EXT] Re: [Driver] Add support for -fuse-ld=lld
On Tue, 6 Nov 2018, H.J. Lu wrote: > On Sat, Oct 20, 2018 at 3:19 AM Romain Geissler > wrote: > > > > I would like to raise again the question of supporting -fuse-ld=lld. > > > > LGTM. But I can't approve it. > > -- > H.J. Hi, Is there any gcc reviewer that could comment whether or not this small feature is welcome in gcc ? Cheers, Romain
Re: [Driver] Add support for -fuse-ld=lld
On Sat, Oct 20, 2018 at 3:19 AM Romain Geissler 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 > 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
Re: [Driver] Add support for -fuse-ld=lld
Ping^2 > Le 27 oct. 2018 à 11:33, Romain GEISSLER a > écrit : > > Ping > >> Le 20 oct. 2018 à 12:18, Romain Geissler a >> écrit : >> >> 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 >> 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. >> + >>
Re: [Driver] Add support for -fuse-ld=lld
Ping > Le 20 oct. 2018 à 12:18, Romain Geissler a > écrit : > > 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 > 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 @
[Driver] Add support for -fuse-ld=lld
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 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;
Re: [Driver] Add support for -fuse-ld=lld
On Mon, Jul 04, 2016 at 09:36:52PM +0200, Markus Trippelsdorf wrote: > On 2016.07.04 at 10:08 -0700, H.J. Lu wrote: > > On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano> > wrote: > > > On Thu, Jun 23, 2016 at 9:11 PM, Davide Italiano > > > wrote: > > >> + HJ who wrote the code for the option originally. > > >> > > >> On Thu, Jun 23, 2016 at 9:01 PM, Davide Italiano > > >> 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.), 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. > > > > > > Hi, can anybody take a look? > > > > lld isn't compatible with GCC: > > > > https://llvm.org/bugs/show_bug.cgi?id=28414 > > Besides the technical issues, this also raises the question if it is > right to support lld at all. Because this project was obviously started > to replace the GNU linkers (ld.bfd and gold) in the long run. Technically it seems like it would be useful to support -fuse-ld= so you can say easily test gcc with a ld.bfd you just built. > So I see no reason why it should be supported in GCC. > > (And who needs a buggy new ELF linker anyway?) I'm not particularly thrilled by a new linker, but presumably the bugs will get fixed, and it does link libxul.so and presumably other things but I don't have data, and that is certainly useful. Trev
Re: [Driver] Add support for -fuse-ld=lld
On Jul 4, 2016, at 12:36 PM, Markus Trippelsdorfwrote: > > On 2016.07.04 at 10:08 -0700, H.J. Lu wrote: >> On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano >> wrote: >>> On Thu, Jun 23, 2016 at 9:11 PM, Davide Italiano >>> wrote: + HJ who wrote the code for the option originally. On Thu, Jun 23, 2016 at 9:01 PM, Davide Italiano 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.), 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. >>> >>> Hi, can anybody take a look? >> >> lld isn't compatible with GCC: >> >> https://llvm.org/bugs/show_bug.cgi?id=28414 > > Besides the technical issues, this also raises the question if it is > right to support lld at all. Because this project was obviously started > to replace the GNU linkers (ld.bfd and gold) in the long run. > So I see no reason why it should be supported in GCC. > > (And who needs a buggy new ELF linker anyway?) So, this is off-topic for the list, gnu.misc.discuss is a better forum for such things, if you want. The GNU tools have no prohibition with working with system libraries that are non-free, nor non-free tools, such as ar, nm, ld and as or even simulators. Contributions for interoperability with other tools will be considered. gcc has always been widely compatible and interoperable with more than just Linux systems.
Re: [Driver] Add support for -fuse-ld=lld
On Mon, Jul 4, 2016 at 9:12 AM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano <dccitali...@gmail.com> wrote: >> 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.), 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, > > lld won't build on Fedora 24/x86-64 with GCC 6: > > [ 39%] Building CXX object > tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o > /export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp: In > member function ‘void > lld::elf::GnuHashTableSection::addSymbols(std::vector<std::pair<lld::elf::SymbolBody*, > long unsigned int> >&)’: > /export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp:585:8: > error: inconsistent deduction for ‘auto’: ‘auto’ and then > ‘__gnu_cxx::__normal_iterator<std::pair<lld::elf::SymbolBody*, long > unsigned int>*, std::vector<std::pair<lld::elf::SymbolBody*, long > unsigned int> > >’ > tools/lld/ELF/CMakeFiles/lldELF.dir/build.make:302: recipe for target > 'tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o' failed > gmake[4]: *** [tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o] > Error 1 > > Can you fix it? >> -- >> 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). */ >>
Re: [Driver] Add support for -fuse-ld=lld
On Mon, Jul 4, 2016 at 12:36 PM, Markus Trippelsdorfwrote: > On 2016.07.04 at 10:08 -0700, H.J. Lu wrote: >> On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano >> wrote: >> > On Thu, Jun 23, 2016 at 9:11 PM, Davide Italiano >> > wrote: >> >> + HJ who wrote the code for the option originally. >> >> >> >> On Thu, Jun 23, 2016 at 9:01 PM, Davide Italiano >> >> 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.), 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. >> > >> > Hi, can anybody take a look? >> >> lld isn't compatible with GCC: >> >> https://llvm.org/bugs/show_bug.cgi?id=28414 > > Besides the technical issues, this also raises the question if it is > right to support lld at all. Because this project was obviously started > to replace the GNU linkers (ld.bfd and gold) in the long run. > So I see no reason why it should be supported in GCC. > > (And who needs a buggy new ELF linker anyway?) Fair enough. Consider this patch withdrawn, sorry for the noise. -- Davide
Re: [Driver] Add support for -fuse-ld=lld
On 2016.07.04 at 10:08 -0700, H.J. Lu wrote: > On Sun, Jul 3, 2016 at 9:38 PM, Davide Italianowrote: > > On Thu, Jun 23, 2016 at 9:11 PM, Davide Italiano > > wrote: > >> + HJ who wrote the code for the option originally. > >> > >> On Thu, Jun 23, 2016 at 9:01 PM, Davide Italiano > >> 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.), 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. > > > > Hi, can anybody take a look? > > lld isn't compatible with GCC: > > https://llvm.org/bugs/show_bug.cgi?id=28414 Besides the technical issues, this also raises the question if it is right to support lld at all. Because this project was obviously started to replace the GNU linkers (ld.bfd and gold) in the long run. So I see no reason why it should be supported in GCC. (And who needs a buggy new ELF linker anyway?) -- Markus
Re: [Driver] Add support for -fuse-ld=lld
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.), 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, > > -- > 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 Remove blank line between them. > --- > 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) Please make each condition on a separate line starting with ||. > { >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. > + This is wrong. It should be fuse-ld=bfd Common Driver Negative(fuse-ld=gold) Use the bfd linker instead of the default linker. fuse-ld=gold Common Driver Negative(fuse-ld=lld) Use the gold linker instead of the default linker. fuse-ld=lld Common Driver Negative(fuse-ld=bfd) 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 -- H.J.
Re: [Driver] Add support for -fuse-ld=lld
On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano <dccitali...@gmail.com> wrote: > 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.), 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? lld isn't compatible with GCC: https://llvm.org/bugs/show_bug.cgi?id=28414 > 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 lin
Re: [Driver] Add support for -fuse-ld=lld
On Sun, Jul 3, 2016 at 9:38 PM, Davide Italiano <dccitali...@gmail.com> wrote: > 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.), 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, lld won't build on Fedora 24/x86-64 with GCC 6: [ 39%] Building CXX object tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o /export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp: In member function ‘void lld::elf::GnuHashTableSection::addSymbols(std::vector<std::pair<lld::elf::SymbolBody*, long unsigned int> >&)’: /export/gnu/import/git/llvm/tools/lld/ELF/OutputSections.cpp:585:8: error: inconsistent deduction for ‘auto’: ‘auto’ and then ‘__gnu_cxx::__normal_iterator<std::pair<lld::elf::SymbolBody*, long unsigned int>*, std::vector<std::pair<lld::elf::SymbolBody*, long unsigned int> > >’ tools/lld/ELF/CMakeFiles/lldELF.dir/build.make:302: recipe for target 'tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o' failed gmake[4]: *** [tools/lld/ELF/CMakeFiles/lldELF.dir/OutputSections.cpp.o] Error 1 Can you fix it? H.J. > -- > 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_
Re: [Driver] Add support for -fuse-ld=lld
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.), 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
Re: [Driver] Add support for -fuse-ld=lld
+ 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.), 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, > > -- > 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
[Driver] Add support for -fuse-ld=lld
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.), 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, -- 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 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,