summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-11 08:14:54 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-11 08:14:54 +0000
commit07b8a4124a8bc7ffadb491bade270db8497a9783 (patch)
tree9758313b56edfd190549a5e205c9576068fe786e
parentf4b56643a351a482689a8084946768818fbf1a56 (diff)
downloadgcc-07b8a4124a8bc7ffadb491bade270db8497a9783.tar.gz
Introduce TARGET_SUPPORTS_ALIASES
2017-08-11 Martin Liska <mliska@suse.cz> * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with TARGET_SUPPORTS_ALIASES. 2017-08-11 Martin Liska <mliska@suse.cz> * 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 <mliska@suse.cz> * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251048 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/asan.c4
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-opts.c22
-rw-r--r--gcc/cgraph.c7
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/decl2.c25
-rw-r--r--gcc/cp/optimize.c6
-rw-r--r--gcc/defaults.h9
-rw-r--r--gcc/ipa-visibility.c15
-rw-r--r--gcc/symtab.c6
-rw-r--r--gcc/varpool.c6
12 files changed, 76 insertions, 49 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48e94f7754e..a926516ed77 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
2017-08-11 Martin Liska <mliska@suse.cz>
+ * 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 <mliska@suse.cz>
+
PR ipa/81213
* config/i386/i386.c (make_resolver_func): Do complete
refactoring of the function.
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 <mliska@suse.cz>
+
+ * c-opts.c (c_common_post_options): Replace ASM_OUTPUT_DEF with
+ TARGET_SUPPORTS_ALIASES.
+
2017-08-10 David Malcolm <dmalcolm@redhat.com>
* 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 <mliska@suse.cz>
+
+ * 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 <jason@redhat.com>
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;