diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2019-11-30 22:03:25 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2019-11-30 21:03:25 +0000 |
commit | d7ddfbcb7fa6e700639c9b916bf8a5ed15600950 (patch) | |
tree | 3e8ad36922e2df05cdc896aec48daa30135163d6 /gcc/symtab.c | |
parent | 65ef05d0b7fb429c5760189e638c441dc3da33f4 (diff) | |
download | gcc-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.c | 11 |
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); |