OSDN Git Service

* config/darwin.c (darwin_make_decl_one_only): Allocate section
authoraustern <austern@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2004 18:06:59 +0000 (18:06 +0000)
committeraustern <austern@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2004 18:06:59 +0000 (18:06 +0000)
names once per compilation, instead of once per symbol.

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

gcc/ChangeLog
gcc/config/darwin.c

index f0331aa..66806ed 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 44c8539..e9e509c 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