Commit 5b8c2356 by Alan Modra Committed by Alan Modra

rs6000.c (rs6000_unique_section): Simplify and correct code selecting section.

	* config/rs6000/rs6000.c (rs6000_unique_section): Simplify and
	correct code selecting section.

From-SVN: r47714
parent 8456b95a
2001-12-06 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/rs6000.c (rs6000_unique_section): Simplify and
correct code selecting section.
Thu Dec 6 12:45:33 CET 2001 Jan Hubicka <jh@suse.cz> Thu Dec 6 12:45:33 CET 2001 Jan Hubicka <jh@suse.cz>
* final.c (count_basic_block, add_bb, add_bb_string): * final.c (count_basic_block, add_bb, add_bb_string):
......
...@@ -9746,9 +9746,6 @@ rs6000_unique_section (decl, reloc) ...@@ -9746,9 +9746,6 @@ rs6000_unique_section (decl, reloc)
tree decl; tree decl;
int reloc; int reloc;
{ {
int size = int_size_in_bytes (TREE_TYPE (decl));
int needs_sdata;
int readonly;
int len; int len;
int sec; int sec;
const char *name; const char *name;
...@@ -9757,40 +9754,54 @@ rs6000_unique_section (decl, reloc) ...@@ -9757,40 +9754,54 @@ rs6000_unique_section (decl, reloc)
static const char *const prefixes[7][2] = static const char *const prefixes[7][2] =
{ {
{ ".text.", ".gnu.linkonce.t." },
{ ".rodata.", ".gnu.linkonce.r." }, { ".rodata.", ".gnu.linkonce.r." },
{ ".sdata2.", ".gnu.linkonce.s2." }, { ".sdata2.", ".gnu.linkonce.s2." },
{ ".data.", ".gnu.linkonce.d." }, { ".data.", ".gnu.linkonce.d." },
{ ".sdata.", ".gnu.linkonce.s." }, { ".sdata.", ".gnu.linkonce.s." },
{ ".bss.", ".gnu.linkonce.b." }, { ".bss.", ".gnu.linkonce.b." },
{ ".sbss.", ".gnu.linkonce.sb." } { ".sbss.", ".gnu.linkonce.sb." },
{ ".text.", ".gnu.linkonce.t." }
}; };
needs_sdata = (TREE_CODE (decl) != FUNCTION_DECL
&& size > 0
&& size <= g_switch_value
&& rs6000_sdata != SDATA_NONE
&& (rs6000_sdata != SDATA_DATA || TREE_PUBLIC (decl)));
if (TREE_CODE (decl) == STRING_CST) if (TREE_CODE (decl) == FUNCTION_DECL)
readonly = ! flag_writable_strings; sec = 6;
else if (TREE_CODE (decl) == VAR_DECL)
readonly = (! (flag_pic && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& DECL_INITIAL (decl)
&& DECL_INITIAL (decl) != error_mark_node
&& TREE_CONSTANT (DECL_INITIAL (decl)));
else else
readonly = 1; {
if (needs_sdata && rs6000_sdata != SDATA_EABI) int readonly;
readonly = 0; int needs_sdata;
int size;
readonly = 1;
if (TREE_CODE (decl) == STRING_CST)
readonly = ! flag_writable_strings;
else if (TREE_CODE (decl) == VAR_DECL)
readonly = (! (flag_pic && reloc)
&& TREE_READONLY (decl)
&& ! TREE_SIDE_EFFECTS (decl)
&& TREE_CONSTANT (DECL_INITIAL (decl)));
size = int_size_in_bytes (TREE_TYPE (decl));
needs_sdata = (size > 0
&& size <= g_switch_value
&& rs6000_sdata != SDATA_NONE
&& (rs6000_sdata != SDATA_DATA || TREE_PUBLIC (decl)));
if (DECL_INITIAL (decl) == 0
|| DECL_INITIAL (decl) == error_mark_node)
sec = 4;
else if (! readonly)
sec = 2;
else
sec = 0;
sec = ((TREE_CODE (decl) == FUNCTION_DECL ? 0 : 1) if (needs_sdata)
+ (readonly ? 0 : 2) {
+ (needs_sdata ? 1 : 0) /* .sdata2 is only for EABI. */
+ (DECL_INITIAL (decl) == 0 if (sec == 0 && rs6000_sdata != SDATA_EABI)
|| DECL_INITIAL (decl) == error_mark_node) ? 4 : 0); sec = 2;
sec += 1;
}
}
STRIP_NAME_ENCODING (name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); STRIP_NAME_ENCODING (name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
prefix = prefixes[sec][DECL_ONE_ONLY (decl)]; prefix = prefixes[sec][DECL_ONE_ONLY (decl)];
......
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