aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2003-07-16 18:18:00 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2003-07-16 18:18:00 +0000
commit3d7964d5db11a8bafa2d4a99517eabb742229385 (patch)
tree8ebaeaf6f7be53ebd5d47b06df1e606381121834
parente6a8c803751354c48acd705e495e6e9cbe940784 (diff)
downloadgcc-3d7964d5db11a8bafa2d4a99517eabb742229385.zip
gcc-3d7964d5db11a8bafa2d4a99517eabb742229385.tar.gz
gcc-3d7964d5db11a8bafa2d4a99517eabb742229385.tar.bz2
darwin.c (machopic_select_section): Use decl_readonly_section to do most of the work.
* config/darwin.c (machopic_select_section): Use decl_readonly_section to do most of the work. From-SVN: r69468
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/darwin.c61
2 files changed, 25 insertions, 41 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8b1b57f..9525598 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index c17fc74..d57c293 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -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".