summaryrefslogtreecommitdiff
path: root/lto-plugin
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2020-05-05 12:33:11 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2020-05-05 12:42:22 +0200
commit5269b24605b17211f34dd40df2d18ba7a7f481e2 (patch)
tree8837eee81dbd7ff67d62c12f8dacc61f95c4995f /lto-plugin
parent2badc9885330b56dfabb49328c42de792bc67b1e (diff)
Silence warning in LTO mode on VxWorks
The link phase is always partial (-r) for VxWorks in kernel mode, which means that it uses incremental LTO linking by default (-flinker-output=rel). But in this mode the LTO plugin outputs a warning if one of the object files involved in the link does not contain LTO bytecode, before switching to nolto-rel mode. We do not do repeated incremental linking for VxWorks so silence the warning. lto-plugin/ * lto-plugin.c: Document -linker-output-auto-notlo-rel option. (linker_output_set): Change type to bool. (linker_output_known): Likewise. (linker_output_auto_nolto_rel): New variable. (all_symbols_read_handler): Take it into account. <LDPO_REL>: Do not issue the warning if it is set. (process_option): Process -linker-output-auto-notlo-rel. (cleanup_handler): Remove unused variable. (onload) <LDPT_LINKER_OUTPUT>: Adjust to above type change. gcc/ * gcc.c (LTO_PLUGIN_SPEC): Define if not already. (LINK_PLUGIN_SPEC): Execute LTO_PLUGIN_SPEC. * config/vxworks.h (LTO_PLUGIN_SPEC): Define.
Diffstat (limited to 'lto-plugin')
-rw-r--r--lto-plugin/ChangeLog12
-rw-r--r--lto-plugin/lto-plugin.c28
2 files changed, 30 insertions, 10 deletions
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog
index 4ffbf122ebd..9ce708dfb30 100644
--- a/lto-plugin/ChangeLog
+++ b/lto-plugin/ChangeLog
@@ -1,3 +1,15 @@
+2020-05-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * lto-plugin.c: Document -linker-output-auto-notlo-rel option.
+ (linker_output_set): Change type to bool.
+ (linker_output_known): Likewise.
+ (linker_output_auto_nolto_rel): New variable.
+ (all_symbols_read_handler): Take it into account.
+ <LDPO_REL>: Do not issue the warning if it is set.
+ (process_option): Process -linker-output-auto-notlo-rel.
+ (cleanup_handler): Remove unused variable.
+ (onload) <LDPT_LINKER_OUTPUT>: Adjust to above type change.
+
2020-04-28 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/94739
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index ca6c84a1ffd..37f4bda742a 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -32,6 +32,9 @@ along with this program; see the file COPYING3. If not see
-nop: Instead of running lto-wrapper, pass the original to the plugin. This
only works if the input files are hybrid.
-linker-output-known: Do not determine linker output
+ -linker-output-auto-notlo-rel: Switch from rel to nolto-rel mode without
+ warning. This is used on systems like VxWorks (kernel) where the link is
+ always partial and repeated incremental linking is generally not used.
-sym-style={none,win32,underscore|uscore}
-pass-through */
@@ -195,8 +198,9 @@ static bool verbose;
static char nop;
static char *resolution_file = NULL;
static enum ld_plugin_output_file_type linker_output;
-static int linker_output_set;
-static int linker_output_known;
+static bool linker_output_set;
+static bool linker_output_known;
+static bool linker_output_auto_nolto_rel;
static const char *link_output_name = NULL;
/* The version of gold being used, or -1 if not gold. The number is
@@ -709,9 +713,10 @@ use_original_files (void)
static enum ld_plugin_status
all_symbols_read_handler (void)
{
+ const unsigned num_lto_args
+ = num_claimed_files + lto_wrapper_num_args + 2
+ + !linker_output_known + !linker_output_auto_nolto_rel;
unsigned i;
- unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 2
- + !linker_output_known;
char **lto_argv;
const char *linker_output_str = NULL;
const char **lto_arg_ptr;
@@ -743,9 +748,10 @@ all_symbols_read_handler (void)
case LDPO_REL:
if (non_claimed_files)
{
- message (LDPL_WARNING, "incremental linking of LTO and non-LTO "
- "objects; using -flinker-output=nolto-rel which will "
- "bypass whole program optimization");
+ if (!linker_output_auto_nolto_rel)
+ message (LDPL_WARNING, "incremental linking of LTO and non-LTO"
+ " objects; using -flinker-output=nolto-rel which will"
+ " bypass whole program optimization");
linker_output_str = "-flinker-output=nolto-rel";
}
else
@@ -1291,8 +1297,10 @@ static void
process_option (const char *option)
{
if (strcmp (option, "-linker-output-known") == 0)
- linker_output_known = 1;
- if (strcmp (option, "-debug") == 0)
+ linker_output_known = true;
+ else if (strcmp (option, "-linker-output-auto-notlo-rel") == 0)
+ linker_output_auto_nolto_rel = true;
+ else if (strcmp (option, "-debug") == 0)
debug = true;
else if ((strcmp (option, "-v") == 0)
|| (strcmp (option, "--verbose") == 0))
@@ -1390,7 +1398,7 @@ onload (struct ld_plugin_tv *tv)
break;
case LDPT_LINKER_OUTPUT:
linker_output = (enum ld_plugin_output_file_type) p->tv_u.tv_val;
- linker_output_set = 1;
+ linker_output_set = true;
break;
case LDPT_OUTPUT_NAME:
/* We only use this to make user-friendly temp file names. */