Add referenced_from_asm and must_remain_in_tu and propagate them for
following patches.
gcc/ChangeLog:
* cgraph.h: Add flags.
* cgraphclones.cc (cgraph_node::create_clone): Propagate flags.
* lto-cgraph.cc (lto_output_node): Likewise.
(lto_output_varpool_node): Likewise.
(input_overwrite_node): Likewise.
(input_varpool_node): Likewise.
gcc/lto/ChangeLog:
* lto-symtab.cc (lto_cgraph_replace_node): Likewise.
(lto_varpool_replace_node): Likewise.
---
gcc/cgraph.h | 7 +++++++
gcc/cgraphclones.cc | 2 ++
gcc/lto-cgraph.cc | 8 ++++++++
gcc/lto/lto-symtab.cc | 4 ++++
4 files changed, 21 insertions(+)
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 278479a5510..53b8e1d0e37 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -142,6 +142,7 @@ public:
used_from_other_partition (false), in_other_partition (false),
address_taken (false), in_init_priority_hash (false),
need_lto_streaming (false), offloadable (false), ifunc_resolver (false),
+ referenced_from_asm (false), must_remain_in_tu (false),
next_sharing_asm_name (NULL),
previous_sharing_asm_name (NULL), same_comdat_group (NULL), ref_list (),
alias_target (NULL), aux (NULL),
@@ -626,6 +627,12 @@ public:
/* Set when symbol is an IFUNC resolver. */
unsigned ifunc_resolver : 1;
+ /* Set when symbols is referenced from toplevel assembly and must not be
+ renamed. */
+ unsigned referenced_from_asm : 1;
+
+ /* Set when must remain in TU partition. */
+ unsigned must_remain_in_tu : 1;
/* Declaration representing the symbol. */
tree decl;
diff --git a/gcc/cgraphclones.cc b/gcc/cgraphclones.cc
index c160e8b6985..8e42cba6666 100644
--- a/gcc/cgraphclones.cc
+++ b/gcc/cgraphclones.cc
@@ -437,6 +437,8 @@ cgraph_node::create_clone (tree new_decl, profile_count
prof_count,
new_node->unit_id = unit_id;
new_node->merged_comdat = merged_comdat;
new_node->merged_extern_inline = merged_extern_inline;
+ new_node->referenced_from_asm = referenced_from_asm;
+ new_node->must_remain_in_tu = must_remain_in_tu;
clone_info *info = clone_info::get (this);
if (param_adjustments)
diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc
index 86f676ce053..1f6a85d2e28 100644
--- a/gcc/lto-cgraph.cc
+++ b/gcc/lto-cgraph.cc
@@ -541,6 +541,8 @@ lto_output_node (struct lto_simple_output_block *ob, struct
cgraph_node *node,
bp_pack_value (&bp, in_other_partition, 1);
bp_pack_value (&bp, node->alias, 1);
bp_pack_value (&bp, node->transparent_alias, 1);
+ bp_pack_value (&bp, node->referenced_from_asm, 1);
+ bp_pack_value (&bp, node->must_remain_in_tu, 1);
bp_pack_value (&bp, node->weakref, 1);
bp_pack_value (&bp, node->symver, 1);
bp_pack_value (&bp, node->frequency, 2);
@@ -627,6 +629,8 @@ lto_output_varpool_node (struct lto_simple_output_block
*ob, varpool_node *node,
1);
bp_pack_value (&bp, node->alias, 1);
bp_pack_value (&bp, node->transparent_alias, 1);
+ bp_pack_value (&bp, node->referenced_from_asm, 1);
+ bp_pack_value (&bp, node->must_remain_in_tu, 1);
bp_pack_value (&bp, node->weakref, 1);
bp_pack_value (&bp, node->symver, 1);
bp_pack_value (&bp, node->analyzed && (!boundary_p || node->alias), 1);
@@ -1254,6 +1258,8 @@ input_overwrite_node (struct lto_file_decl_data
*file_data,
}
node->alias = bp_unpack_value (bp, 1);
node->transparent_alias = bp_unpack_value (bp, 1);
+ node->referenced_from_asm = bp_unpack_value (bp, 1);
+ node->must_remain_in_tu = bp_unpack_value (bp, 1);
node->weakref = bp_unpack_value (bp, 1);
node->symver = bp_unpack_value (bp, 1);
node->frequency = (enum node_frequency)bp_unpack_value (bp, 2);
@@ -1443,6 +1449,8 @@ input_varpool_node (struct lto_file_decl_data *file_data,
node->definition = bp_unpack_value (&bp, 1);
node->alias = bp_unpack_value (&bp, 1);
node->transparent_alias = bp_unpack_value (&bp, 1);
+ node->referenced_from_asm = bp_unpack_value (&bp, 1);
+ node->must_remain_in_tu = bp_unpack_value (&bp, 1);
node->weakref = bp_unpack_value (&bp, 1);
node->symver = bp_unpack_value (&bp, 1);
node->analyzed = bp_unpack_value (&bp, 1);
diff --git a/gcc/lto/lto-symtab.cc b/gcc/lto/lto-symtab.cc
index 8d7fc6805e9..c985cbb7781 100644
--- a/gcc/lto/lto-symtab.cc
+++ b/gcc/lto/lto-symtab.cc
@@ -76,6 +76,8 @@ lto_cgraph_replace_node (struct cgraph_node *node,
prevailing_node->merged_extern_inline = true;
prevailing_node->merged_comdat |= node->merged_comdat;
prevailing_node->merged_extern_inline |= node->merged_extern_inline;
+ prevailing_node->referenced_from_asm |= node->referenced_from_asm;
+ prevailing_node->must_remain_in_tu |= node->must_remain_in_tu;
/* Redirect all incoming edges. */
compatible_p
@@ -121,6 +123,8 @@ lto_varpool_replace_node (varpool_node *vnode,
prevailing_node->force_output = true;
if (vnode->forced_by_abi)
prevailing_node->forced_by_abi = true;
+ prevailing_node->referenced_from_asm |= vnode->referenced_from_asm;
+ prevailing_node->must_remain_in_tu |= vnode->must_remain_in_tu;
/* Be sure we can garbage collect the initializer. */
if (DECL_INITIAL (vnode->decl)
--
2.50.0