gas/
authorDaniel Jacobowitz <drow@false.org>
Fri, 7 Aug 2009 19:30:31 +0000 (19:30 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 7 Aug 2009 19:30:31 +0000 (19:30 +0000)
* config/tc-arm.c (marked_pr_dependency, mapstate): Delete global
variables.
(mapping_state): Use the section's mapstate.
(mapping_state_2): Likewise.  Skip special sections.
(s_arm_unwind_fnend): Use the section's marked_pr_dependency.
(arm_elf_change_section): Do not set deleted globals.
* config/tc-arm.h (struct arm_segment_info_type): Document
marked_pr_dependency.

gas/testsuite/
* gas/arm/mapping2.s: Test code after .ident.

gas/ChangeLog
gas/config/tc-arm.c
gas/config/tc-arm.h
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/mapping2.s

index caf0dbf45537e557ed40e924ee8f959d9ccd3b06..8bc0235b41f03009378001ed6ba94a59dfd124a0 100644 (file)
@@ -1,3 +1,14 @@
+2009-08-07  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config/tc-arm.c (marked_pr_dependency, mapstate): Delete global
+       variables.
+       (mapping_state): Use the section's mapstate.
+       (mapping_state_2): Likewise.  Skip special sections.
+       (s_arm_unwind_fnend): Use the section's marked_pr_dependency.
+       (arm_elf_change_section): Do not set deleted globals.
+       * config/tc-arm.h (struct arm_segment_info_type): Document
+       marked_pr_dependency.
+
 2009-08-07  Michael Eager <eager@eagercon.com>
 
        * NEWS: Mention MicroBlaze support.
index c77e44e4a15023125d65b93a7d68aea0f6d4008e..20b7f2a276325c9c60019cc6df2d3150e44c63e5 100644 (file)
@@ -77,11 +77,6 @@ static struct
   unsigned       sp_restored:1;
 } unwind;
 
-/* Bit N indicates that an R_ARM_NONE relocation has been output for
-   __aeabi_unwind_cpp_prN already if set. This enables dependencies to be
-   emitted only once per section, to save unnecessary bloat.  */
-static unsigned int marked_pr_dependency = 0;
-
 #endif /* OBJ_ELF */
 
 /* Results from operand parsing worker functions.  */
@@ -2432,8 +2427,6 @@ s_unreq (int a ATTRIBUTE_UNUSED)
    Note that previously, $a and $t has type STT_FUNC (BSF_OBJECT flag),
    and $d has type STT_OBJECT (BSF_OBJECT flag). Now all three are untyped.  */
 
-static enum mstate mapstate = MAP_UNDEFINED;
-
 /* Create a new mapping symbol for the transition to STATE.  */
 
 static void
@@ -2532,6 +2525,8 @@ static void mapping_state_2 (enum mstate state, int max_chars);
 void
 mapping_state (enum mstate state)
 {
+  enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
+
 #define TRANSITION(from, to) (mapstate == (from) && state == (to))
 
   if (mapstate == state)
@@ -2565,12 +2560,16 @@ mapping_state (enum mstate state)
 static void
 mapping_state_2 (enum mstate state, int max_chars)
 {
+  enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
+
+  if (!SEG_NORMAL (now_seg))
+    return;
+
   if (mapstate == state)
     /* The mapping symbol has already been emitted.
        There is nothing else to do.  */
     return;
 
-  mapstate = state;
   seg_info (now_seg)->tc_segment_info_data.mapstate = state;
   make_mapping_symbol (state, (valueT) frag_now_fix () - max_chars, frag_now);
 }
@@ -3421,6 +3420,7 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED)
   long where;
   char *ptr;
   valueT val;
+  unsigned int marked_pr_dependency;
 
   demand_empty_rest_of_line ();
 
@@ -3450,6 +3450,8 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED)
 
   /* Indicate dependency on EHABI-defined personality routines to the
      linker, if it hasn't been done already.  */
+  marked_pr_dependency
+    = seg_info (now_seg)->tc_segment_info_data.marked_pr_dependency;
   if (unwind.personality_index >= 0 && unwind.personality_index < 3
       && !(marked_pr_dependency & (1 << unwind.personality_index)))
     {
@@ -3461,9 +3463,8 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED)
        };
       symbolS *pr = symbol_find_or_make (name[unwind.personality_index]);
       fix_new (frag_now, where, 0, pr, 0, 1, BFD_RELOC_NONE);
-      marked_pr_dependency |= 1 << unwind.personality_index;
       seg_info (now_seg)->tc_segment_info_data.marked_pr_dependency
-       = marked_pr_dependency;
+       |= 1 << unwind.personality_index;
     }
 
   if (val)
@@ -18557,19 +18558,10 @@ arm_init_frag (fragS * fragP, int max_chars)
 void
 arm_elf_change_section (void)
 {
-  segment_info_type *seginfo;
-
   /* Link an unlinked unwind index table section to the .text section. */
   if (elf_section_type (now_seg) == SHT_ARM_EXIDX
       && elf_linked_to_section (now_seg) == NULL)
     elf_linked_to_section (now_seg) = text_section;
-
-  if (!SEG_NORMAL (now_seg))
-    return;
-
-  seginfo = seg_info (now_seg);
-  marked_pr_dependency = seginfo->tc_segment_info_data.marked_pr_dependency;
-  mapstate = seginfo->tc_segment_info_data.mapstate;
 }
 
 int
index d3867704efe14d0453f5ef1b47519ade61bf7f2b..2a85afd46b892f65feeaaee1c3508dd385f0b821 100644 (file)
@@ -272,7 +272,12 @@ void mapping_state (enum mstate);
 struct arm_segment_info_type
 {
   enum mstate mapstate;
+
+  /* Bit N indicates that an R_ARM_NONE relocation has been output for
+     __aeabi_unwind_cpp_prN already if set. This enables dependencies to be
+     emitted only once per section, to save unnecessary bloat.  */
   unsigned int marked_pr_dependency;
+
   struct current_it current_it;
 };
 
index 9839fe004ff09ebf925c19fac1074b0b6e32713b..116493c2564aa89db905331b528849c7c9cffc2e 100644 (file)
@@ -1,3 +1,7 @@
+2009-08-07  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * gas/arm/mapping2.s: Test code after .ident.
+
 2009-08-05  Chao-ying Fu  <fu@mips.com>
 
        * gas/mips/jal-svr4pic.d, gas/mips/jal-xgot.d,
index adcadc4919c07b6e29a73d0233abe881c85ab2e5..2629c55e39186574dc7139c36b71758196187211 100644 (file)
@@ -17,3 +17,4 @@ foo:
         .size   main, .-main
         .ident  ""
 
+       nop