* config/tc-xtensa.c (mark_literal_frags): New function.
authorBob Wilson <bob.wilson@acm.org>
Fri, 19 Mar 2004 22:35:32 +0000 (22:35 +0000)
committerBob Wilson <bob.wilson@acm.org>
Fri, 19 Mar 2004 22:35:32 +0000 (22:35 +0000)
(xtensa_move_literals): Call mark_literal_frags for all literal
segments, including init and fini literal segments.
(xtensa_post_relax_hook): Swap use of xt_insn_sec and xt_literal_sec.

gas/ChangeLog
gas/config/tc-xtensa.c

index 33085e09087b57209149d3bcbccba6a57c85c05f..6350be158669303df6223c178fa8b200e93ba13a 100644 (file)
@@ -1,3 +1,10 @@
+2004-03-19  Bob Wilson  <bob.wilson@acm.org>
+
+       * config/tc-xtensa.c (mark_literal_frags): New function.
+       (xtensa_move_literals): Call mark_literal_frags for all literal
+       segments, including init and fini literal segments.
+       (xtensa_post_relax_hook): Swap use of xt_insn_sec and xt_literal_sec.
+
 2004-03-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        * tc-hppa.c (cons_fix_new_hppa): Check for PC relative base type.
index c0116009034720c4aaadd150194e6b3d94503168..8f101dbccc1c9d3ce326dca8d4db6284de007aaa 100644 (file)
@@ -638,6 +638,8 @@ static void xtensa_move_seg_list_to_beginning
   PARAMS ((seg_list *));
 static void xtensa_move_literals
   PARAMS ((void));
+static void mark_literal_frags
+  PARAMS ((seg_list *));
 static void xtensa_reorder_seg_list
   PARAMS ((seg_list *, segT));
 static void xtensa_reorder_segments
@@ -7485,21 +7487,9 @@ xtensa_move_literals ()
   fixS *fix, *next_fix, **fix_splice;
   sym_list *lit;
 
-  /* As clunky as this is, we can't rely on frag_var
-     and frag_variant to get called in all situations.  */
-
-  segment = literal_head->next;
-  while (segment)
-    {
-      frchain_from = seg_info (segment->seg)->frchainP;
-      search_frag = frchain_from->frch_root;
-      while (search_frag) 
-       {
-         search_frag->tc_frag_data.is_literal = TRUE;
-         search_frag = search_frag->fr_next;
-       }
-      segment = segment->next;
-    }
+  mark_literal_frags (literal_head->next);
+  mark_literal_frags (init_literal_head->next);
+  mark_literal_frags (fini_literal_head->next);
 
   if (use_literal_section)
     return;
@@ -7603,6 +7593,31 @@ xtensa_move_literals ()
 }
 
 
+/* Walk over all the frags for segments in a list and mark them as
+   containing literals.  As clunky as this is, we can't rely on frag_var
+   and frag_variant to get called in all situations.  */
+
+static void
+mark_literal_frags (segment)
+     seg_list *segment;
+{
+  frchainS *frchain_from;
+  fragS *search_frag;
+
+  while (segment)
+    {
+      frchain_from = seg_info (segment->seg)->frchainP;
+      search_frag = frchain_from->frch_root;
+      while (search_frag) 
+       {
+         search_frag->tc_frag_data.is_literal = TRUE;
+         search_frag = search_frag->fr_next;
+       }
+      segment = segment->next;
+    }
+}
+
+
 static void
 xtensa_reorder_seg_list (head, after)
      seg_list *head;
@@ -7872,11 +7887,11 @@ xtensa_post_relax_hook ()
 
   xtensa_create_property_segments (get_frag_is_insn,
                                   XTENSA_INSN_SEC_NAME,
-                                  xt_literal_sec);
+                                  xt_insn_sec);
   if (use_literal_section)
     xtensa_create_property_segments (get_frag_is_literal,
                                     XTENSA_LIT_SEC_NAME,
-                                    xt_insn_sec);
+                                    xt_literal_sec);
 }