On Tue, Dec 28, 2021 at 5:10 AM Martin Liška <mli...@suse.cz> wrote:
>
> Hello.
>
> The mold linker is getting quite popular and I think we should support it:
> https://github.com/rui314/mold
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?
> Thanks,
> Martin
>
> ---
>   gcc/collect2.c | 10 +++++++---
>   gcc/common.opt |  4 ++++
>   gcc/gcc.c      |  4 ++++
>   gcc/opts.c     |  1 +
>   4 files changed, 16 insertions(+), 3 deletions(-)

Missing invoke.texi change.

> diff --git a/gcc/collect2.c b/gcc/collect2.c
> index d47fe3f9195..b322527847c 100644
> --- a/gcc/collect2.c
> +++ b/gcc/collect2.c
> @@ -776,6 +776,7 @@ main (int argc, char **argv)
>         USE_GOLD_LD,
>         USE_BFD_LD,
>         USE_LLD_LD,
> +      USE_MOLD_LD,
>         USE_LD_MAX
>       } selected_linker = USE_DEFAULT_LD;
>     static const char *const ld_suffixes[USE_LD_MAX] =
> @@ -784,7 +785,8 @@ main (int argc, char **argv)
>         PLUGIN_LD_SUFFIX,
>         "ld.gold",
>         "ld.bfd",
> -      "ld.lld"
> +      "ld.lld",
> +      "ld.mold"
>       };
>     static const char *const real_ld_suffix = "real-ld";
>     static const char *const collect_ld_suffix = "collect-ld";
> @@ -957,6 +959,8 @@ main (int argc, char **argv)
>           selected_linker = USE_GOLD_LD;
>         else if (strcmp (argv[i], "-fuse-ld=lld") == 0)
>           selected_linker = USE_LLD_LD;
> +       else if (strcmp (argv[i], "-fuse-ld=mold") == 0)
> +         selected_linker = USE_MOLD_LD;
>         else if (startswith (argv[i], "-o"))
>           {
>             /* Parse the output filename if it's given so that we can make
> @@ -1048,7 +1052,7 @@ main (int argc, char **argv)
>     ld_file_name = 0;
>   #ifdef DEFAULT_LINKER
>     if (selected_linker == USE_BFD_LD || selected_linker == USE_GOLD_LD ||
> -      selected_linker == USE_LLD_LD)
> +      selected_linker == USE_LLD_LD || selected_linker == USE_MOLD_LD)
>       {
>         char *linker_name;
>   # ifdef HOST_EXECUTABLE_SUFFIX
> @@ -1283,7 +1287,7 @@ main (int argc, char **argv)
>               else if (!use_collect_ld
>                        && startswith (arg, "-fuse-ld="))
>                 {
> -                 /* Do not pass -fuse-ld={bfd|gold|lld} to the linker. */
> +                 /* Do not pass -fuse-ld={bfd|gold|lld|mold} to the linker. 
> */
>                   ld1--;
>                   ld2--;
>                 }
> diff --git a/gcc/common.opt b/gcc/common.opt
> index 2ed818d6057..dba3fa886f9 100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -3046,6 +3046,10 @@ fuse-ld=lld
>   Common Driver Negative(fuse-ld=lld)
>   Use the lld LLVM linker instead of the default linker.
>
> +fuse-ld=mold
> +Common Driver Negative(fuse-ld=mold)
> +Use the Modern linker (MOLD) linker instead of the default linker.
> +
>   fuse-linker-plugin
>   Common Undocumented Var(flag_use_linker_plugin)
>
> diff --git a/gcc/gcc.c b/gcc/gcc.c
> index b75b50b87b2..06e18a75b52 100644
> --- a/gcc/gcc.c
> +++ b/gcc/gcc.c
> @@ -4282,6 +4282,10 @@ driver_handle_option (struct gcc_options *opts,
>          use_ld = ".gold";
>          break;
>
> +    case OPT_fuse_ld_mold:
> +       use_ld = ".mold";
> +       break;
> +
>       case OPT_fcompare_debug_second:
>         compare_debug_second = 1;
>         break;
> diff --git a/gcc/opts.c b/gcc/opts.c
> index cdd6463e49b..60f1cf045c9 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -3094,6 +3094,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_ld_mold:
>       case OPT_fuse_linker_plugin:
>         /* No-op. Used by the driver and passed to us because it starts with 
> f.*/
>         break;
> --
> 2.34.1
>


-- 
H.J.

Reply via email to