darwin.c (machopic_select_section): Use decl_readonly_section to do most of the work.
authorGeoffrey Keating <geoffk@apple.com>
Wed, 16 Jul 2003 18:18:00 +0000 (18:18 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Wed, 16 Jul 2003 18:18:00 +0000 (18:18 +0000)
* config/darwin.c (machopic_select_section): Use decl_readonly_section
to do most of the work.

From-SVN: r69468

gcc/ChangeLog
gcc/config/darwin.c

index 8b1b57f..9525598 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-16  Geoffrey Keating  <geoffk@apple.com>
+
+       * config/darwin.c (machopic_select_section): Use decl_readonly_section
+       to do most of the work.
+
 2003-07-16  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * config/mmix/mmix-protos.h: Convert prototypes to ISO C90.
index c17fc74..d57c293 100644 (file)
@@ -1157,18 +1157,22 @@ machopic_select_section (exp, reloc, align)
      int reloc;
      unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED;
 {
-  if (TREE_CODE (exp) == STRING_CST)
-    {
-      if (flag_writable_strings)
-       data_section ();
-      else if ((size_t) TREE_STRING_LENGTH (exp) !=
-              strlen (TREE_STRING_POINTER (exp)) + 1)
-       readonly_data_section ();
-      else
-       cstring_section ();
-    }
-  else if (TREE_CODE (exp) == INTEGER_CST
-          || TREE_CODE (exp) == REAL_CST)
+  void (*base_function)(void);
+  
+  if (decl_readonly_section_1 (exp, reloc, MACHOPIC_INDIRECT))
+    base_function = readonly_data_section;
+  else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))
+    base_function = const_data_section;
+  else
+    base_function = data_section;
+  
+  if (TREE_CODE (exp) == STRING_CST
+      && ((size_t) TREE_STRING_LENGTH (exp) 
+         == strlen (TREE_STRING_POINTER (exp)) + 1)
+      && ! flag_writable_strings)
+    cstring_section ();
+  else if ((TREE_CODE (exp) == INTEGER_CST || TREE_CODE (exp) == REAL_CST)
+          && flag_merge_constants)
     {
       tree size = TYPE_SIZE (TREE_TYPE (exp));
 
@@ -1181,7 +1185,7 @@ machopic_select_section (exp, reloc, align)
               TREE_INT_CST_HIGH (size) == 0)
        literal8_section ();
       else
-       readonly_data_section ();
+       base_function ();
     }
   else if (TREE_CODE (exp) == CONSTRUCTOR
           && TREE_TYPE (exp)
@@ -1195,16 +1199,8 @@ machopic_select_section (exp, reloc, align)
        objc_constant_string_object_section ();
       else if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString"))
        objc_string_object_section ();
-      else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))
-       {
-         
-         if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc))
-           const_data_section ();
-         else
-           readonly_data_section ();
-       }
       else
-       data_section ();
+       base_function ();
     }
   else if (TREE_CODE (exp) == VAR_DECL &&
           DECL_NAME (exp) &&
@@ -1258,28 +1254,11 @@ machopic_select_section (exp, reloc, align)
        objc_cat_cls_meth_section ();
       else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))
        objc_protocol_section ();
-      else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))
-              && !TREE_SIDE_EFFECTS (exp))
-       {
-         
-         if (MACHOPIC_INDIRECT && reloc)
-           const_data_section ();
-         else
-           readonly_data_section ();
-       }
-      else
-       data_section ();
-    }
-  else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))
-    {
-     
-      if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc))
-       const_data_section ();
       else
-       readonly_data_section ();
+       base_function ();
     }
   else
-    data_section ();
+    base_function ();
 }
 
 /* This can be called with address expressions as "rtx".