OSDN Git Service

* config/avr/avr.c (avr_replace_prefix): Remove.
authorgjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Jan 2012 11:00:23 +0000 (11:00 +0000)
committergjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Jan 2012 11:00:23 +0000 (11:00 +0000)
(avr_asm_named_section): Use ACONCAT instead of avr_replace_prefix.
(avr_asm_function_rodata_section): Ditto.
(avr_asm_select_section): Ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182904 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/avr/avr.c

index 1dd2964..edaad12 100644 (file)
@@ -1,3 +1,10 @@
+2012-01-05  Georg-Johann Lay  <avr@gjlay.de>
+
+       * config/avr/avr.c (avr_replace_prefix): Remove.
+       (avr_asm_named_section): Use ACONCAT instead of avr_replace_prefix.
+       (avr_asm_function_rodata_section): Ditto.
+       (avr_asm_select_section): Ditto.
+
 2012-01-05  Marcus Shawcroft  <marcus.shawcroft@arm.com>
 
        * reload.c (find_reloads): Adjust LABEL_NUSES on REG_LABEL_OPERAND
index 4830632..a62835c 100644 (file)
@@ -301,31 +301,6 @@ bool avr_need_copy_data_p = false;
 
 \f
 
-/* Custom function to replace string prefix.
-
-   Return a ggc-allocated string with strlen (OLD_PREFIX) characters removed
-   from the start of OLD_STR and then prepended with NEW_PREFIX.  */
-
-static inline const char*
-avr_replace_prefix (const char *old_str,
-                    const char *old_prefix, const char *new_prefix)
-{
-  char *new_str;
-  size_t len = strlen (old_str) + strlen (new_prefix) - strlen (old_prefix);
-
-  gcc_assert (strlen (old_prefix) <= strlen (old_str));
-
-  /* Unfortunately, ggc_alloc_string returns a const char* and thus cannot be
-     used here.  */
-     
-  new_str = (char*) ggc_alloc_atomic (1 + len);
-
-  strcat (stpcpy (new_str, new_prefix), old_str + strlen (old_prefix));
-  
-  return (const char*) new_str;
-}
-
-
 /* Custom function to count number of set bits.  */
 
 static inline int
@@ -7196,9 +7171,8 @@ avr_asm_function_rodata_section (tree decl)
 
           if (STR_PREFIX_P (name, old_prefix))
             {
-              const char *rname = avr_replace_prefix (name,
-                                                      old_prefix, new_prefix);
-
+              const char *rname = ACONCAT ((new_prefix,
+                                            name + strlen (old_prefix), NULL));
               flags &= ~SECTION_CODE;
               flags |= AVR_HAVE_JMP_CALL ? 0 : SECTION_CODE;
               
@@ -7223,15 +7197,16 @@ avr_asm_named_section (const char *name, unsigned int flags, tree decl)
       int segment = avr_addrspace[as].segment % avr_current_arch->n_segments;
       const char *old_prefix = ".rodata";
       const char *new_prefix = progmem_section_prefix[segment];
-      const char *sname = new_prefix;
       
       if (STR_PREFIX_P (name, old_prefix))
         {
-          sname = avr_replace_prefix (name, old_prefix, new_prefix);
+          const char *sname = ACONCAT ((new_prefix,
+                                        name + strlen (old_prefix), NULL));
+          default_elf_asm_named_section (sname, flags, decl);
+          return;
         }
 
-      default_elf_asm_named_section (sname, flags, decl);
-
+      default_elf_asm_named_section (new_prefix, flags, decl);
       return;
     }
   
@@ -7326,9 +7301,8 @@ avr_asm_select_section (tree decl, int reloc, unsigned HOST_WIDE_INT align)
 
           if (STR_PREFIX_P (name, old_prefix))
             {
-              const char *sname = avr_replace_prefix (name,
-                                                      old_prefix, new_prefix);
-
+              const char *sname = ACONCAT ((new_prefix,
+                                            name + strlen (old_prefix), NULL));
               return get_section (sname, sect->common.flags, sect->named.decl);
             }
         }