[PATCH] Convert XCOFF ASM_DECLARE_FUNCTION_NAME to function
David Edelsohn
dje.gcc@gmail.com
Tue Jun 24 18:45:00 GMT 2014
In preparation to fix the alias issues on AIX, this patch changes
ASM_DECLARE_FUNCTION_NAME from a macro to a function.
Bootstrap on powerpc-ibm-aix7.1.0.0 in progress.
* config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Remove definition
and call...
* config/rs6000/rs6000.c (rs6000_xcoff_declare_function_name): New
function.
* config/rs6000/rs6000-protos.h (rs6000_xcoff_declare_function_name):
Declare.
Thanks, David
-------------- next part --------------
* config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Remove definition
and call...
* config/rs6000/rs6000.c (rs6000_xcoff_declare_function_name): New
function.
* config/rs6000/rs6000-protos.h (rs6000_xcoff_declare_function_name):
Declare.
Index: rs6000-protos.h
===================================================================
--- rs6000-protos.h (revision 211938)
+++ rs6000-protos.h (working copy)
@@ -164,6 +164,7 @@
extern rtx rs6000_va_arg (tree, tree);
extern int function_ok_for_sibcall (tree);
extern int rs6000_reg_parm_stack_space (tree, bool);
+extern void rs6000_xcoff_declare_function_name (FILE *, const char *, tree);
extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
extern bool rs6000_elf_in_small_data_p (const_tree);
#ifdef ARGS_SIZE_RTX
Index: rs6000.c
===================================================================
--- rs6000.c (revision 211938)
+++ rs6000.c (working copy)
@@ -29452,6 +29452,71 @@
asm_out_file);
}
+/* This macro produces the initial definition of a function name.
+ On the RS/6000, we need to place an extra '.' in the function name and
+ output the function descriptor.
+ Dollar signs are converted to underscores.
+
+ The csect for the function will have already been created when
+ text_section was selected. We do have to go back to that csect, however.
+
+ The third and fourth parameters to the .function pseudo-op (16 and 044)
+ are placeholders which no longer have any use. */
+
+void
+rs6000_xcoff_declare_function_name (FILE *file, const char *name, tree decl)
+{
+ char *buffer = (char *) alloca (strlen (name) + 1);
+ char *p;
+ int dollar_inside = 0;
+ strcpy (buffer, name);
+ p = strchr (buffer, '$');
+ while (p) {
+ *p = '_';
+ dollar_inside++;
+ p = strchr (p + 1, '$');
+ }
+ if (TREE_PUBLIC (decl))
+ {
+ if (!RS6000_WEAK || !DECL_WEAK (decl))
+ {
+ if (dollar_inside) {
+ fprintf(file, "\t.rename .%s,\".%s\"\n", buffer, name);
+ fprintf(file, "\t.rename %s,\"%s\"\n", buffer, name);
+ }
+ fputs ("\t.globl .", file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ putc ('\n', file);
+ }
+ }
+ else
+ {
+ if (dollar_inside) {
+ fprintf(file, "\t.rename .%s,\".%s\"\n", buffer, name);
+ fprintf(file, "\t.rename %s,\"%s\"\n", buffer, name);
+ }
+ fputs ("\t.lglobl .", file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ putc ('\n', file);
+ }
+ fputs ("\t.csect ", file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ fputs (TARGET_32BIT ? "[DS]\n" : "[DS],3\n", file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ fputs (":\n", file);
+ fputs (TARGET_32BIT ? "\t.long ." : "\t.llong .", file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ fputs (", TOC[tc0], 0\n", file);
+ in_section = NULL;
+ switch_to_section (function_section (decl));
+ putc ('.', file);
+ RS6000_OUTPUT_BASENAME (file, buffer);
+ fputs (":\n", file);
+ if (write_symbols != NO_DEBUG && !DECL_IGNORED_P (decl))
+ xcoffout_declare_function (file, decl, buffer);
+ return;
+}
+
#ifdef HAVE_AS_TLS
static void
rs6000_xcoff_encode_section_info (tree decl, rtx rtl, int first)
Index: xcoff.h
===================================================================
--- xcoff.h (revision 211938)
+++ xcoff.h (working copy)
@@ -134,68 +134,12 @@
#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
-/* This macro produces the initial definition of a function name.
- On the RS/6000, we need to place an extra '.' in the function name and
- output the function descriptor.
- Dollar signs are converted to underscores.
+/* This macro produces the initial definition of a function name. */
- The csect for the function will have already been created when
- text_section was selected. We do have to go back to that csect, however.
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+ rs6000_xcoff_declare_function_name ((FILE), (NAME), (DECL))
- The third and fourth parameters to the .function pseudo-op (16 and 044)
- are placeholders which no longer have any use. */
-
-#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
-{ char *buffer = (char *) alloca (strlen (NAME) + 1); \
- char *p; \
- int dollar_inside = 0; \
- strcpy (buffer, NAME); \
- p = strchr (buffer, '$'); \
- while (p) { \
- *p = '_'; \
- dollar_inside++; \
- p = strchr (p + 1, '$'); \
- } \
- if (TREE_PUBLIC (DECL)) \
- { \
- if (!RS6000_WEAK || !DECL_WEAK (decl)) \
- { \
- if (dollar_inside) { \
- fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
- fprintf(FILE, "\t.rename %s,\"%s\"\n", buffer, NAME); \
- } \
- fputs ("\t.globl .", FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- putc ('\n', FILE); \
- } \
- } \
- else \
- { \
- if (dollar_inside) { \
- fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
- fprintf(FILE, "\t.rename %s,\"%s\"\n", buffer, NAME); \
- } \
- fputs ("\t.lglobl .", FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- putc ('\n', FILE); \
- } \
- fputs ("\t.csect ", FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- fputs (TARGET_32BIT ? "[DS]\n" : "[DS],3\n", FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- fputs (":\n", FILE); \
- fputs (TARGET_32BIT ? "\t.long ." : "\t.llong .", FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- fputs (", TOC[tc0], 0\n", FILE); \
- in_section = NULL; \
- switch_to_section (function_section (DECL)); \
- putc ('.', FILE); \
- RS6000_OUTPUT_BASENAME (FILE, buffer); \
- fputs (":\n", FILE); \
- if (write_symbols != NO_DEBUG && !DECL_IGNORED_P (DECL)) \
- xcoffout_declare_function (FILE, DECL, buffer); \
-}
-
/* Output a reference to SYM on FILE. */
#define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
More information about the Gcc-patches
mailing list