From: Martin Liska Date: Fri, 11 Aug 2017 08:14:54 +0000 (+0200) Subject: Introduce TARGET_SUPPORTS_ALIASES X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a8b522b483ebb8c972ecfde8779a7a6ec16aecd6;p=gcc.git Introduce TARGET_SUPPORTS_ALIASES 2017-08-11 Martin Liska * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. 2017-08-11 Martin Liska * asan.c (asan_protect_global): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. * cgraph.c (cgraph_node::create_same_body_alias): Likewise. * ipa-visibility.c (can_replace_by_local_alias): Likewise. (optimize_weakref): Likewise. * symtab.c (symtab_node::noninterposable_alias): Likewise. * varpool.c (varpool_node::create_extra_name_alias): Likewise. * defaults.h: Introduce TARGET_SUPPORTS_ALIASES. 2017-08-11 Martin Liska * decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. (handle_tls_init): Likewise. (note_mangling_alias): Likewise. Remove ATTRIBUTE_UNUSED for both arguments. * optimize.c (can_alias_cdtor): Likewise. From-SVN: r251048 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48e94f7754e..a926516ed77 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2017-08-11 Martin Liska + + * asan.c (asan_protect_global): Replace ASM_OUTPUT_DEF with + TARGET_SUPPORTS_ALIASES. + * cgraph.c (cgraph_node::create_same_body_alias): Likewise. + * ipa-visibility.c (can_replace_by_local_alias): Likewise. + (optimize_weakref): Likewise. + * symtab.c (symtab_node::noninterposable_alias): Likewise. + * varpool.c (varpool_node::create_extra_name_alias): Likewise. + * defaults.h: Introduce TARGET_SUPPORTS_ALIASES. + 2017-08-11 Martin Liska PR ipa/81213 diff --git a/gcc/asan.c b/gcc/asan.c index f83ca65ffdb..ce1e0244ec6 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -1665,10 +1665,8 @@ asan_protect_global (tree decl) if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))) return false; -#ifndef ASM_OUTPUT_DEF - if (asan_needs_local_alias (decl)) + if (!TARGET_SUPPORTS_ALIASES && asan_needs_local_alias (decl)) return false; -#endif return true; } diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index fcb4ea5169b..6d33192c5ac 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2017-08-11 Martin Liska + + * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with + TARGET_SUPPORTS_ALIASES. + 2017-08-10 David Malcolm * c-common.c (c_parse_error): Add rich_location * param, using it diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 1657e7a4390..0b13a188c1b 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -957,16 +957,18 @@ c_common_post_options (const char **pfilename) if (flag_extern_tls_init) { -#if !defined (ASM_OUTPUT_DEF) || !SUPPORTS_WEAK - /* Lazy TLS initialization for a variable in another TU requires - alias and weak reference support. */ - if (flag_extern_tls_init > 0) - sorry ("external TLS initialization functions not supported " - "on this target"); - flag_extern_tls_init = 0; -#else - flag_extern_tls_init = 1; -#endif + if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK) + { + /* Lazy TLS initialization for a variable in another TU requires + alias and weak reference support. */ + if (flag_extern_tls_init > 0) + sorry ("external TLS initialization functions not supported " + "on this target"); + + flag_extern_tls_init = 0; + } + else + flag_extern_tls_init = 1; } if (num_in_fnames > 1) diff --git a/gcc/cgraph.c b/gcc/cgraph.c index c6ab7e38ff6..69aa6c5bce2 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -584,10 +584,11 @@ cgraph_node * cgraph_node::create_same_body_alias (tree alias, tree decl) { cgraph_node *n; -#ifndef ASM_OUTPUT_DEF + /* If aliases aren't supported by the assembler, fail. */ - return NULL; -#endif + if (!TARGET_SUPPORTS_ALIASES) + return NULL; + /* Langhooks can create same body aliases of symbols not defined. Those are useless. Drop them on the floor. */ if (symtab->global_info_ready) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0115f68cde6..a8a3fccdcd1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2017-08-11 Martin Liska + + * decl2.c (get_tls_init_fn): Replace ASM_OUTPUT_DEF with + TARGET_SUPPORTS_ALIASES. + (handle_tls_init): Likewise. + (note_mangling_alias): Likewise. Remove ATTRIBUTE_UNUSED for + both arguments. + * optimize.c (can_alias_cdtor): Likewise. + 2017-08-11 Jason Merrill PR c++/81671 - nullptr_t template parameter diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 8187ab9317d..37393a1a253 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3156,11 +3156,9 @@ get_tls_init_fn (tree var) if (!flag_extern_tls_init && DECL_EXTERNAL (var)) return NULL_TREE; -#ifdef ASM_OUTPUT_DEF /* If the variable is internal, or if we can't generate aliases, call the local init function directly. */ - if (!TREE_PUBLIC (var)) -#endif + if (!TREE_PUBLIC (var) || !TARGET_SUPPORTS_ALIASES) return get_local_tls_init_fn (); tree sname = mangle_tls_init_fn (var); @@ -4241,9 +4239,8 @@ handle_tls_init (void) tree init = TREE_PURPOSE (vars); one_static_initialization_or_destruction (var, init, true); -#ifdef ASM_OUTPUT_DEF /* Output init aliases even with -fno-extern-tls-init. */ - if (TREE_PUBLIC (var)) + if (TARGET_SUPPORTS_ALIASES && TREE_PUBLIC (var)) { tree single_init_fn = get_tls_init_fn (var); if (single_init_fn == NULL_TREE) @@ -4253,7 +4250,6 @@ handle_tls_init (void) (single_init_fn, fn); gcc_assert (alias != NULL); } -#endif } finish_then_clause (if_stmt); @@ -4298,17 +4294,18 @@ generate_mangling_alias (tree decl, tree id2) implementation. */ void -note_mangling_alias (tree decl ATTRIBUTE_UNUSED, tree id2 ATTRIBUTE_UNUSED) +note_mangling_alias (tree decl, tree id2) { -#ifdef ASM_OUTPUT_DEF - if (!defer_mangling_aliases) - generate_mangling_alias (decl, id2); - else + if (TARGET_SUPPORTS_ALIASES) { - vec_safe_push (mangling_aliases, decl); - vec_safe_push (mangling_aliases, id2); + if (!defer_mangling_aliases) + generate_mangling_alias (decl, id2); + else + { + vec_safe_push (mangling_aliases, decl); + vec_safe_push (mangling_aliases, id2); + } } -#endif } /* Emit all mangling aliases that were deferred up to this point. */ diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index a1c387092d4..09ffbda7ca8 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -184,10 +184,10 @@ cdtor_comdat_group (tree complete, tree base) static bool can_alias_cdtor (tree fn) { -#ifndef ASM_OUTPUT_DEF /* If aliases aren't supported by the assembler, fail. */ - return false; -#endif + if (!TARGET_SUPPORTS_ALIASES) + return false; + /* We can't use an alias if there are virtual bases. */ if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn))) return false; diff --git a/gcc/defaults.h b/gcc/defaults.h index 7ad92d920f8..072ef6b6d17 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -863,6 +863,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif #endif +/* Decide whether target supports aliases. */ +#ifndef TARGET_SUPPORTS_ALIASES +#ifdef ASM_OUTPUT_DEF +#define TARGET_SUPPORTS_ALIASES 1 +#else +#define TARGET_SUPPORTS_ALIASES 0 +#endif +#endif + /* Select a format to encode pointers in exception handling data. We prefer those that result in fewer dynamic relocations. Assume no special support here and encode direct references. */ diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c index 998024893a5..b6bc870b11d 100644 --- a/gcc/ipa-visibility.c +++ b/gcc/ipa-visibility.c @@ -339,10 +339,10 @@ varpool_node::externally_visible_p (void) static bool can_replace_by_local_alias (symtab_node *node) { -#ifndef ASM_OUTPUT_DEF /* If aliases aren't supported, we can't do replacement. */ - return false; -#endif + if (!TARGET_SUPPORTS_ALIASES) + return false; + /* Weakrefs have a reason to be non-local. Be sure we do not replace them. */ while (node->transparent_alias && node->definition && !node->weakref) @@ -463,11 +463,6 @@ update_visibility_by_resolution_info (symtab_node * node) static void optimize_weakref (symtab_node *node) { -#ifdef ASM_OUTPUT_DEF - bool aliases_supported = true; -#else - bool aliases_supported = false; -#endif bool strip_weakref = false; bool static_alias = false; @@ -486,8 +481,8 @@ optimize_weakref (symtab_node *node) /* If we have definition of weakref's target and we know it binds locally, we can turn weakref to static alias. */ - if (target->definition && decl_binds_to_current_def_p (target->decl) - && aliases_supported) + if (TARGET_SUPPORTS_ALIASES + && target->definition && decl_binds_to_current_def_p (target->decl)) strip_weakref = static_alias = true; /* Otherwise we can turn weakref into transparent alias. This transformation may break asm statements which directly refers to symbol name and expect diff --git a/gcc/symtab.c b/gcc/symtab.c index 7e5eb7d6416..a507ace8a34 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -1765,10 +1765,10 @@ symtab_node::noninterposable_alias (void) (void *)&new_node, true); if (new_node) return new_node; -#ifndef ASM_OUTPUT_DEF + /* If aliases aren't supported by the assembler, fail. */ - return NULL; -#endif + if (!TARGET_SUPPORTS_ALIASES) + return NULL; /* Otherwise create a new one. */ new_decl = copy_node (node->decl); diff --git a/gcc/varpool.c b/gcc/varpool.c index b005f529cc0..d849fe8a7da 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -788,10 +788,10 @@ varpool_node::create_extra_name_alias (tree alias, tree decl) { varpool_node *alias_node; -#ifndef ASM_OUTPUT_DEF /* If aliases aren't supported by the assembler, fail. */ - return NULL; -#endif + if (!TARGET_SUPPORTS_ALIASES) + return NULL; + alias_node = varpool_node::create_alias (alias, decl); alias_node->cpp_implicit_alias = true;