mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 11:00:57 +08:00
Make -fwhole-program to work with incremental LTO linking
Update documentation of -fwhole-program which was wrongly claiming that it is useless with LTO whole it is useful for LTO without plugin and extends -fwhole-program to also work with incremental linking. This is useful when building kernel where the incremental link is de-facto fina binary and only some explicitly marked symbols needs to remain. Bootstrapped/regtested x86_64-linux, comitted. gcc/ChangeLog: 2022-12-21 Jan Hubicka <hubicka@ucw.cz> * doc/invoke.texi: Fix documentation of -fwhole-program with LTO and document behaviour for incremental linking. gcc/lto/ChangeLog: 2022-12-21 Jan Hubicka <hubicka@ucw.cz> * lto-common.cc (lto_resolution_read): With incremental linking and whole program ignore turn LDPR_PREVAILING_DEF_IRONLY to LDPR_PREVAILING_DEF_IRONLY_EXP * lto-lang.cc (lto_post_options): Do not clear flag_whole_program for incremental link
This commit is contained in:
parent
88709c4a1e
commit
39ebd3a9f5
@ -13719,9 +13719,12 @@ compiled. All public functions and variables with the exception of @code{main}
|
||||
and those merged by attribute @code{externally_visible} become static functions
|
||||
and in effect are optimized more aggressively by interprocedural optimizers.
|
||||
|
||||
This option should not be used in combination with @option{-flto}.
|
||||
Instead relying on a linker plugin should provide safer and more precise
|
||||
information.
|
||||
With @option{-flto} this option has a limited use. In most cases the
|
||||
precise list of symbols used or exported from the binary is known the
|
||||
resolution info passed to the link-time optimizer by the linker plugin. It is
|
||||
still useful if no linker plugin is used or during incremental link step when
|
||||
final code is produced (with @option{-flto}
|
||||
@option{-flinker-output=nolto-rel}).
|
||||
|
||||
@item -flto[=@var{n}]
|
||||
@opindex flto
|
||||
|
@ -2118,6 +2118,17 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
|
||||
if (strcmp (lto_resolution_str[j], r_str) == 0)
|
||||
{
|
||||
r = (enum ld_plugin_symbol_resolution) j;
|
||||
/* Incremental linking together with -fwhole-program may seem
|
||||
somewhat contradictionary (as the point of incremental linking
|
||||
is to allow re-linking with more symbols later) but it is
|
||||
used to build LTO kernel. We want to hide all symbols that
|
||||
are not explicitely marked as exported and thus turn
|
||||
LDPR_PREVAILING_DEF_IRONLY_EXP
|
||||
to LDPR_PREVAILING_DEF_IRONLY. */
|
||||
if (flag_whole_program
|
||||
&& flag_incremental_link == INCREMENTAL_LINK_NOLTO
|
||||
&& r == LDPR_PREVAILING_DEF_IRONLY_EXP)
|
||||
r = LDPR_PREVAILING_DEF_IRONLY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -901,7 +901,6 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED)
|
||||
break;
|
||||
|
||||
case LTO_LINKER_OUTPUT_NOLTOREL: /* .o: incremental link producing asm */
|
||||
flag_whole_program = 0;
|
||||
flag_incremental_link = INCREMENTAL_LINK_NOLTO;
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user