> In preparation to fix the alias issues on AIX, this patch changes
> ASM_DECLARE_FUNCTION_NAME from a macro to a function.

Thanks, David!
We will also need to introduce ASM_DECLARE_OBJECT_NAME  to handle the aliases
of variables.  I can look into that probably later this week (it is last week
of my teaching and I need to do the finals)

Honza
> 
> 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

>       * 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) \

Reply via email to