Commit ed8969fa by Jim Wilson

(SELECT_SECTION): Variables go in readonly data

only if the initializer is constant.

From-SVN: r6820
parent 07aeab22
...@@ -707,7 +707,10 @@ while (0) ...@@ -707,7 +707,10 @@ while (0)
else if (TREE_CODE (DECL) != VAR_DECL) \ else if (TREE_CODE (DECL) != VAR_DECL) \
readonly_data_section (); \ readonly_data_section (); \
\ \
else if (!TREE_READONLY (DECL)) \ else if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
\ \
else \ else \
......
...@@ -255,7 +255,10 @@ dtors_section () \ ...@@ -255,7 +255,10 @@ dtors_section () \
else if (TREE_CODE (DECL) == VAR_DECL) \ else if (TREE_CODE (DECL) == VAR_DECL) \
{ \ { \
if ((0 && RELOC) /* should be (flag_pic && RELOC) */ \ if ((0 && RELOC) /* should be (flag_pic && RELOC) */ \
|| !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
else \ else \
const_section (); \ const_section (); \
......
...@@ -197,13 +197,13 @@ extern char * reg_names[]; ...@@ -197,13 +197,13 @@ extern char * reg_names[];
Redefined in sysv4.h, and luna.h. */ Redefined in sysv4.h, and luna.h. */
#define VERSION_INFO1 "88open OCS/BCS, " #define VERSION_INFO1 "88open OCS/BCS, "
#ifndef VERSION_INFO2 #ifndef VERSION_INFO2
#define VERSION_INFO2 "$Revision: 1.57 $" #define VERSION_INFO2 "$Revision: 1.58 $"
#endif #endif
#ifndef VERSION_STRING #ifndef VERSION_STRING
#define VERSION_STRING version_string #define VERSION_STRING version_string
#ifdef __STDC__ #ifdef __STDC__
#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.57 $ " __DATE__ #define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.58 $ " __DATE__
#else #else
#define TM_RCS_ID "$What$" #define TM_RCS_ID "$What$"
#endif /* __STDC__ */ #endif /* __STDC__ */
...@@ -2552,7 +2552,10 @@ sdata_section () \ ...@@ -2552,7 +2552,10 @@ sdata_section () \
if (SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0))) \ if (SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0))) \
sdata_section (); \ sdata_section (); \
else if ((flag_pic && RELOC) \ else if ((flag_pic && RELOC) \
|| !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
else \ else \
const_section (); \ const_section (); \
......
...@@ -3528,7 +3528,10 @@ rdata_section () \ ...@@ -3528,7 +3528,10 @@ rdata_section () \
else if (TREE_CODE (DECL) != VAR_DECL) \ else if (TREE_CODE (DECL) != VAR_DECL) \
rdata_section (); \ rdata_section (); \
\ \
else if (!TREE_READONLY (DECL)) \ else if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
\ \
else \ else \
......
...@@ -536,11 +536,19 @@ objc_section_init () \ ...@@ -536,11 +536,19 @@ objc_section_init () \
else \ else \
data_section (); \ data_section (); \
} \ } \
else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ else if (TREE_CODE (DECL) == VAR_DECL) \
&& !TREE_SIDE_EFFECTS (exp)) \ { \
readonly_data_section (); \ if ((flag_pic && RELOC) \
|| !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \
else \
readonly_data_section (); \
} \
else \ else \
data_section (); \ readonly_data_section (); \
} \ } \
while (0) while (0)
......
...@@ -1747,11 +1747,13 @@ toc_section () \ ...@@ -1747,11 +1747,13 @@ toc_section () \
#define SELECT_SECTION(EXP,RELOC) \ #define SELECT_SECTION(EXP,RELOC) \
{ \ { \
if ((TREE_READONLY (EXP) \ if ((TREE_CODE (EXP) == STRING_CST \
|| (TREE_CODE (EXP) == STRING_CST \ && !flag_writable_strings) \
&& !flag_writable_strings)) \ || (TREE_READONLY (EXP) && ! TREE_THIS_VOLATILE (EXP) \
&& ! TREE_THIS_VOLATILE (EXP) \ && DECL_INITIAL (EXP) \
&& ! (RELOC)) \ && (DECL_INITIAL (EXP) == error_mark_node \
|| TREE_CONSTANT (DECL_INITIAL (EXP))) \
&& ! (RELOC))) \
{ \ { \
if (TREE_PUBLIC (EXP)) \ if (TREE_PUBLIC (EXP)) \
read_only_data_section (); \ read_only_data_section (); \
......
...@@ -282,6 +282,9 @@ extern int target_flags; ...@@ -282,6 +282,9 @@ extern int target_flags;
if (TREE_CODE (T) == VAR_DECL) \ if (TREE_CODE (T) == VAR_DECL) \
{ \ { \
if (TREE_READONLY (T) && ! TREE_SIDE_EFFECTS (T) \ if (TREE_READONLY (T) && ! TREE_SIDE_EFFECTS (T) \
&& DECL_INITIAL (T) \
&& (DECL_INITIAL (T) == error_mark_node \
|| TREE_CONSTANT (DECL_INITIAL (T))) \
&& DECL_ALIGN (T) <= MAX_TEXT_ALIGN \ && DECL_ALIGN (T) <= MAX_TEXT_ALIGN \
&& ! (flag_pic && (RELOC))) \ && ! (flag_pic && (RELOC))) \
text_section (); \ text_section (); \
......
...@@ -363,7 +363,10 @@ dtors_section () \ ...@@ -363,7 +363,10 @@ dtors_section () \
else if (TREE_CODE (DECL) == VAR_DECL) \ else if (TREE_CODE (DECL) == VAR_DECL) \
{ \ { \
if ((0 && RELOC) /* should be (flag_pic && RELOC) */ \ if ((0 && RELOC) /* should be (flag_pic && RELOC) */ \
|| !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
else \ else \
const_section (); \ const_section (); \
......
...@@ -513,7 +513,10 @@ dtors_section () \ ...@@ -513,7 +513,10 @@ dtors_section () \
else if (TREE_CODE (DECL) == VAR_DECL) \ else if (TREE_CODE (DECL) == VAR_DECL) \
{ \ { \
if ((flag_pic && RELOC) \ if ((flag_pic && RELOC) \
|| !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
data_section (); \ data_section (); \
else \ else \
const_section (); \ const_section (); \
......
...@@ -253,7 +253,10 @@ const_section () \ ...@@ -253,7 +253,10 @@ const_section () \
{ \ { \
if (TREE_CODE (T) == VAR_DECL) \ if (TREE_CODE (T) == VAR_DECL) \
{ \ { \
if (TREE_READONLY (T) && ! TREE_THIS_VOLATILE (T)) \ if (TREE_READONLY (T) && ! TREE_THIS_VOLATILE (T) \
&& DECL_INITIAL (T) \
&& (DECL_INITIAL (T) == error_mark_node \
|| TREE_CONSTANT (DECL_INITIAL (T)))) \
{ \ { \
if (TREE_PUBLIC (T)) \ if (TREE_PUBLIC (T)) \
const_section (); \ const_section (); \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment