Created
January 2, 2022 18:35
-
-
Save 00-matt/dda791a36318bafb68576b8576b1d283 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From ad964f7eaef9c03ce68a01cfdd7fde9d56524868 Mon Sep 17 00:00:00 2001 | |
From: Martin Liska <[email protected]> | |
Date: Tue, 21 Dec 2021 17:43:55 +0100 | |
Subject: [PATCH] Support ld.mold linker. | |
gcc/ChangeLog: | |
* collect2.c (main): Add ld.mold. | |
* common.opt: Add -fuse-ld=mold. | |
* doc/invoke.texi: Document it. | |
* gcc.c (driver_handle_option): Handle -fuse-ld=mold. | |
* opts.c (common_handle_option): Likewise. | |
--- | |
gcc/collect2.c | 10 +++++++--- | |
gcc/common.opt | 4 ++++ | |
gcc/doc/invoke.texi | 4 ++++ | |
gcc/gcc.c | 4 ++++ | |
gcc/opts.c | 1 + | |
5 files changed, 20 insertions(+), 3 deletions(-) | |
diff --git a/gcc/collect2.c b/gcc/collect2.c | |
index d47fe3f91959c..b322527847c70 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 (strncmp (argv[i], "-o", 2) == 0) | |
{ | |
/* 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 2ed818d6057de..dba3fa886f9c6 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/doc/invoke.texi b/gcc/doc/invoke.texi | |
index e644c63767b88..54fa75ba138ea 100644 | |
--- a/gcc/doc/invoke.texi | |
+++ b/gcc/doc/invoke.texi | |
@@ -16266,6 +16266,10 @@ Use the @command{gold} linker instead of the default linker. | |
@opindex fuse-ld=lld | |
Use the LLVM @command{lld} linker instead of the default linker. | |
+@item -fuse-ld=mold | |
+@opindex fuse-ld=mold | |
+Use the Modern Linker (@command{mold}) instead of the default linker. | |
+ | |
@cindex Libraries | |
@item -l@var{library} | |
@itemx -l @var{library} | |
diff --git a/gcc/gcc.c b/gcc/gcc.c | |
index b75b50b87b2bf..06e18a75b52cc 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 e4e47ff77b3d7..f820052307c36 100644 | |
--- a/gcc/opts.c | |
+++ b/gcc/opts.c | |
@@ -3105,6 +3105,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; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment