This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: rs6000 -fdata-sections


On Thu, Dec 06, 2001 at 07:47:52AM +1030, Alan Modra wrote:
> On Wed, Dec 05, 2001 at 11:24:59AM -0800, Geoff Keating wrote:
> > 
> > > From: Alan Modra <amodra@bigpond.net.au>
> > > 
> > > I'll take the liberty of interpreting your request regarding "readonly"
> > > loosely.  How's this?
> > 
> > Not OK; I meant that the word 'readonly' provides important
> > documentation about the meaning of the condition being tested, please
> > don't remove it.
> 
> Negating the logic, which is clearer, and using "readwrite" as a
> temporary somehow conveys less information than using "readonly"?

Forgot to attach the revised patch.

Index: gcc/config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.251
diff -u -p -r1.251 rs6000.c
--- rs6000.c	2001/12/04 23:23:19	1.251
+++ rs6000.c	2001/12/05 21:23:17
@@ -9451,9 +9451,6 @@ rs6000_unique_section (decl, reloc)
      tree decl;
      int reloc;
 {
-  int size = int_size_in_bytes (TREE_TYPE (decl));
-  int needs_sdata;
-  int readonly;
   int len;
   int sec;
   const char *name;
@@ -9462,40 +9459,54 @@ rs6000_unique_section (decl, reloc)
 
   static const char *const prefixes[7][2] =
   {
-    { ".text.",   ".gnu.linkonce.t." },
     { ".rodata.", ".gnu.linkonce.r." },
     { ".sdata2.", ".gnu.linkonce.s2." },
     { ".data.",   ".gnu.linkonce.d." },
     { ".sdata.",  ".gnu.linkonce.s." },
     { ".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)
-    readonly = ! flag_writable_strings;
-  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)));
+
+  if (TREE_CODE (decl) == FUNCTION_DECL)
+    sec = 6;
   else
-    readonly = 1;
-  if (needs_sdata && rs6000_sdata != SDATA_EABI)
-    readonly = 0;
-
-  sec = ((TREE_CODE (decl) == FUNCTION_DECL ? 0 : 1)
-	 + (readonly ? 0 : 2) 
-	 + (needs_sdata ? 1 : 0)
-	 + (DECL_INITIAL (decl) == 0
-	    || DECL_INITIAL (decl) == error_mark_node) ? 4 : 0);
+    {
+      int readonly;
+      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;
+
+      if (needs_sdata)
+	{
+	  /* .sdata2 is only for EABI.  */
+	  if (sec == 0 && rs6000_sdata != SDATA_EABI)
+	    sec = 2;
+	  sec += 1;
+	}
+    }
 
   STRIP_NAME_ENCODING (name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
   prefix = prefixes[sec][DECL_ONE_ONLY (decl)];


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]