Ping^2
> Le 27 oct. 2018 à 11:33, Romain GEISSLER <romain.geiss...@amadeus.com> a
> écrit :
>
> Ping
>
>> Le 20 oct. 2018 à 12:18, Romain Geissler <romain.geiss...@amadeus.com> 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 <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;
>