aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Edelsohn <dje@gcc.gnu.org>2015-02-16 10:33:09 -0500
committerDavid Edelsohn <dje@gcc.gnu.org>2015-02-16 10:33:09 -0500
commit403697abae1166766b3e4681487a5dfcfef2ce52 (patch)
tree2dfbc0d9d2411f592462292e7384b57ff0438d0c /gcc
parent266c722fafc54178f854179003260053b11d00a3 (diff)
downloadgcc-403697abae1166766b3e4681487a5dfcfef2ce52.zip
gcc-403697abae1166766b3e4681487a5dfcfef2ce52.tar.gz
gcc-403697abae1166766b3e4681487a5dfcfef2ce52.tar.bz2
[multiple changes]
2015-02-16 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com> David Edelsohn <dje.gcc@gmail.com> PR target/65058 * config/rs6000/rs6000.c (rs6000_output_symbol_ref): Append storage mapping class to external variable or function reference. * config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Do not append storage mapping class. 2015-02-16 David Eelsohn <dje.gcc@gmail.com> PR target/53348 * config/rs6000/rs6000.c (rs6000_declare_alias): Only use ASM_WEAKEN_DECL if defined. From-SVN: r220737
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/config/rs6000/rs6000.c16
-rw-r--r--gcc/config/rs6000/xcoff.h9
3 files changed, 31 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e049c99..04ac119 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,18 @@
+2015-02-16 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
+ David Edelsohn <dje.gcc@gmail.com>
+
+ PR target/65058
+ * config/rs6000/rs6000.c (rs6000_output_symbol_ref): Append storage
+ mapping class to external variable or function reference.
+ * config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Do not append storage
+ mapping class.
+
+2015-02-16 David Eelsohn <dje.gcc@gmail.com>
+
+ PR target/53348
+ * config/rs6000/rs6000.c (rs6000_declare_alias): Only use
+ ASM_WEAKEN_DECL if defined.
+
2015-02-16 Richard Biener <rguenther@suse.de>
PR lto/65015
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 86ef0fe..e482547 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -26030,6 +26030,20 @@ rs6000_output_symbol_ref (FILE *file, rtx x)
section. */
const char *name = XSTR (x, 0);
+ tree decl = SYMBOL_REF_DECL (x);
+ if (decl /* sync condition with assemble_external () */
+ && DECL_P (decl) && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl)
+ && (TREE_CODE (decl) == VAR_DECL
+ || TREE_CODE (decl) == FUNCTION_DECL)
+ && name[strlen (name) - 1] != ']')
+ {
+ name = concat (name,
+ (TREE_CODE (decl) == FUNCTION_DECL
+ ? "[DS]" : "[UA]"),
+ NULL);
+ XSTR (x, 0) = name;
+ }
+
if (VTABLE_NAME_P (name))
{
RS6000_OUTPUT_BASENAME (file, name);
@@ -30081,8 +30095,10 @@ rs6000_declare_alias (struct symtab_node *n, void *d)
RS6000_OUTPUT_BASENAME (data->file, buffer);
putc ('\n', data->file);
}
+#ifdef ASM_WEAKEN_DECL
else if (DECL_WEAK (n->decl) && !data->function_descriptor)
ASM_WEAKEN_DECL (data->file, n->decl, name, NULL);
+#endif
}
else
{
diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h
index 6dc1207..db024fc 100644
--- a/gcc/config/rs6000/xcoff.h
+++ b/gcc/config/rs6000/xcoff.h
@@ -170,15 +170,6 @@
putc ('\n', FILE); \
fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
} \
- if ((TREE_CODE (DECL) == VAR_DECL \
- || TREE_CODE (DECL) == FUNCTION_DECL) \
- && (NAME)[strlen (NAME) - 1] != ']') \
- { \
- XSTR (_symref, 0) = concat (XSTR (_symref, 0), \
- (TREE_CODE (DECL) == FUNCTION_DECL \
- ? "[DS]" : "[RW]"), \
- NULL); \
- } \
}
/* This is how to output a reference to a user-level label named NAME.