This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH PR target/65058] AIX: missing extern decorations "[DS]" for functions and "[RW]" for variables
- From: Michael Haubenwallner <michael dot haubenwallner at ssi-schaefer dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: David Edelsohn <dje dot gcc at gmail dot com>
- Date: Fri, 13 Feb 2015 23:02:15 +0100
- Subject: [PATCH PR target/65058] AIX: missing extern decorations "[DS]" for functions and "[RW]" for variables
- Authentication-results: sourceware.org; auth=none
Hi David,
this is the patch I'm currently testing with gcc-4.8.4 for
http://gcc.gnu.org/PR65058
Thanks!
/haubi/
>From 0f5003fb25608cdae53445777e6a13fec3fbfffc Mon Sep 17 00:00:00 2001
From: Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Date: Fri, 13 Feb 2015 19:26:27 +0100
Subject: [PATCH 1/5] Fix decorating referenced externals for xcoff.
2015-02-13 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
PR target/65058
* config/rs6000/rs6000.c: (rs6000_output_symbol_ref) Decorate
referenced external variable or function accordingly.
* config/rs6000/xcoff.h: (ASM_OUTPUT_EXTERNAL) Stop decorating
referenced variable or function.
---
gcc/config/rs6000/rs6000.c | 13 +++++++++++++
gcc/config/rs6000/xcoff.h | 9 ---------
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 86ef0fe..15dd25f 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -26030,6 +26030,19 @@ 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]" : "[RW]"),
+ NULL);
+ XSTR (x, 0) = name;
+ } \
if (VTABLE_NAME_P (name))
{
RS6000_OUTPUT_BASENAME (file, name);
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.
--
2.0.5