darwin.c (darwin_make_decl_one_only): Allocate section names once per compilation...
authorMatt Austern <austern@apple.com>
Tue, 31 Aug 2004 18:06:59 +0000 (18:06 +0000)
committerMatt Austern <austern@gcc.gnu.org>
Tue, 31 Aug 2004 18:06:59 +0000 (18:06 +0000)
* config/darwin.c (darwin_make_decl_one_only): Allocate section
names once per compilation, instead of once per symbol.

From-SVN: r86836

gcc/ChangeLog
gcc/config/darwin.c

index f0331aa8f55012c2a572f84cf63f6ecfb270318f..66806edc8ecb9f663df00f145e1ca8ff11ae4e2d 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-31  Matt Austern  <austern@apple.com>
+
+       * config/darwin.c (darwin_make_decl_one_only): Allocate section
+       names once per compilation, instead of once per symbol.
+       
 2004-08-31  Paolo Bonzini  <bonzini@gnu.org>
 
        * Makefile.in (build_subdir): New substitution.
index 44c8539f9b70346674103f4f59df678d3b45e1d9..e9e509cece44f8bca4dde3eaeeba52c187b2fa64 100644 (file)
@@ -982,18 +982,27 @@ darwin_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
     SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_STATIC;
 }
 
+static GTY(()) tree textcoal_section = 0;
+static GTY(()) tree datacoal_section = 0;
+
 void
 darwin_make_decl_one_only (tree decl)
 {
-  static const char *text_section = "__TEXT,__textcoal_nt,coalesced,no_toc";
-  static const char *data_section = "__DATA,__datacoal_nt,coalesced,no_toc";
+  tree sec = 0;
+  if (textcoal_section == 0)
+    {
+      static const char *ts = "__TEXT,__textcoal_nt,coalesced,no_toc";
+      static const char *ds = "__DATA,__datacoal_nt,coalesced,no_toc";
+      textcoal_section = build_string (strlen (ts), ts);
+      datacoal_section = build_string (strlen (ds), ds);
+    }
 
-  const char *sec = TREE_CODE (decl) == FUNCTION_DECL
-    ? text_section
-    : data_section;
+  sec = TREE_CODE (decl) == FUNCTION_DECL
+    ? textcoal_section
+    : datacoal_section;
   TREE_PUBLIC (decl) = 1;
   DECL_ONE_ONLY (decl) = 1;
-  DECL_SECTION_NAME (decl) = build_string (strlen (sec), sec);
+  DECL_SECTION_NAME (decl) = sec;
 }
 
 void