aboutsummaryrefslogtreecommitdiff
path: root/gcc/symtab.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2019-11-30 22:03:25 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2019-11-30 21:03:25 +0000
commitd7ddfbcb7fa6e700639c9b916bf8a5ed15600950 (patch)
tree3e8ad36922e2df05cdc896aec48daa30135163d6 /gcc/symtab.c
parent65ef05d0b7fb429c5760189e638c441dc3da33f4 (diff)
downloadgcc-d7ddfbcb7fa6e700639c9b916bf8a5ed15600950.zip
gcc-d7ddfbcb7fa6e700639c9b916bf8a5ed15600950.tar.gz
gcc-d7ddfbcb7fa6e700639c9b916bf8a5ed15600950.tar.bz2
cgraph.h (symtab_node): Add symver flag.
2019-11-30 Jan Hubicka <hubicka@ucw.cz> * cgraph.h (symtab_node): Add symver flag. * cgraphunit.c (process_symver_attribute): New. (process_common_attributes): Use process_symver_attribute. * lto-cgraph.c (lto_output_node): Stream symver. (lto_output_varpool_node): Stream symver. (input_overwrite_node): Stream symver. (input_varpool_node): Stream symver. * output.h (do_assemble_symver): Decalre. * symtab.c (symtab_node::dump_base): Dump symver. (symtab_node::verify_base): Verify symver. (symtab_node::resolve_alias): Handle symver. * varasm.c (do_assemble_symver): New function. * varpool.c (varpool_node::assemble_aliases): Use it. * doc/extend.texi: (symver attribute): Document. * config/elfos.h (ASM_OUTPUT_SYMVER_DIRECTIVE): New. c-family/ChangeLog: 2019-11-30 Jan Hubicka <hubicka@ucw.cz> * c-attribs.c (handle_symver_attribute): New function (c_common_attributes): Add symver. From-SVN: r278878
Diffstat (limited to 'gcc/symtab.c')
-rw-r--r--gcc/symtab.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 6816bd1..f4317d0 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -848,6 +848,8 @@ symtab_node::dump_base (FILE *f)
fprintf (f, " transparent_alias");
if (weakref)
fprintf (f, " weakref");
+ if (symver)
+ fprintf (f, " symver");
if (cpp_implicit_alias)
fprintf (f, " cpp_implicit_alias");
if (alias_target)
@@ -1147,6 +1149,11 @@ symtab_node::verify_base (void)
error ("node is transparent_alias but not an alias");
error_found = true;
}
+ if (symver && !alias)
+ {
+ error ("node is symver but not alias");
+ error_found = true;
+ }
if (same_comdat_group)
{
symtab_node *n = same_comdat_group;
@@ -1782,7 +1789,9 @@ symtab_node::resolve_alias (symtab_node *target, bool transparent)
if (target->get_comdat_group ())
alias_alias->add_to_same_comdat_group (target);
}
- if (!alias_alias->transparent_alias || transparent)
+ if ((!alias_alias->transparent_alias
+ && !alias_alias->symver)
+ || transparent)
{
alias_alias->remove_all_references ();
alias_alias->create_reference (target, IPA_REF_ALIAS, NULL);