* config/obj-ieee.c: Remove duplicate prototypes.
[deliverable/binutils-gdb.git] / gas / config / obj-ieee.c
index 521a0d72a3fcd90f7ed2475ca9247ce8d2cd6d14..02f43393d6882304669ab9b8da8cbdfc1937359c 100644 (file)
@@ -264,7 +264,7 @@ do_relocs_for (idx)
          from = from->fx_next;
        }
 
-      /* Attatch to the section.  */
+      /* Attach to the section.  */
       section->orelocation = reloc_ptr_vector;
       section->reloc_count = nrelocs;
       section->flags |= SEC_LOAD;
@@ -292,7 +292,7 @@ do_symbols (abfd)
        {
          ptr->sy_symbol.sy.section =
            (asection *) (segment_info[ptr->sy_symbol.seg].user_stuff);
-         S_SET_VALUE (ptr, S_GET_VALUE (ptr) + ptr->sy_frag->fr_address);
+         S_SET_VALUE (ptr, S_GET_VALUE (ptr));
          if (ptr->sy_symbol.sy.flags == 0)
            ptr->sy_symbol.sy.flags = BSF_LOCAL;
        }
@@ -467,10 +467,6 @@ ok:
   input_line_pointer = p;
 }
 
-void cons ();
-void s_ignore ();
-
-void s_globl ();
 const pseudo_typeS obj_pseudo_table[] =
 {
   {"section", obj_ieee_section, 0},
@@ -493,6 +489,20 @@ obj_symbol_new_hook (symbolP)
 }
 
 #if 1
+
+#ifndef SUB_SEGMENT_ALIGN
+#ifdef HANDLE_ALIGN
+/* The last subsegment gets an alignment corresponding to the alignment
+   of the section.  This allows proper nop-filling at the end of
+   code-bearing sections.  */
+#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN)                                        \
+  (!(FRCHAIN)->frch_next || (FRCHAIN)->frch_next->frch_seg != (SEG)    \
+   ? get_recorded_alignment (SEG) : 0)
+#else
+#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 2
+#endif
+#endif
+
 extern void
 write_object_file ()
 {
@@ -512,20 +522,33 @@ write_object_file ()
   subseg_set (1, 0);
   subseg_set (2, 0);
   subseg_set (3, 0);
+
+  /* Run through all the sub-segments and align them up.  Also
+     close any open frags.  We tack a .fill onto the end of the
+     frag chain so that any .align's size can be worked by looking
+     at the next frag.  */
   for (frchain_ptr = frchain_root;
        frchain_ptr != (struct frchain *) NULL;
        frchain_ptr = frchain_ptr->frch_next)
     {
-      /* Run through all the sub-segments and align them up.  Also
-        close any open frags.  We tack a .fill onto the end of the
-        frag chain so that any .align's size can be worked by looking
-        at the next frag.  */
+      int alignment;
 
       subseg_set (frchain_ptr->frch_seg, frchain_ptr->frch_subseg);
-#ifndef SUB_SEGMENT_ALIGN
-#define SUB_SEGMENT_ALIGN(SEG) 2
+
+      alignment = SUB_SEGMENT_ALIGN (now_seg, frchain_ptr)
+
+#ifdef md_do_align
+      md_do_align (alignment, (char *) NULL, 0, 0, alignment_done);
 #endif
-      frag_align (SUB_SEGMENT_ALIGN (now_seg), 0, 0);
+      if (subseg_text_p (now_seg))
+       frag_align_code (alignment, 0);
+      else
+       frag_align (alignment, 0, 0);
+
+#ifdef md_do_align
+    alignment_done:
+#endif
+
       frag_wane (frag_now);
       frag_now->fr_fix = 0;
       know (frag_now->fr_next == NULL);
@@ -558,6 +581,9 @@ write_object_file ()
   for (i = SEG_E0; i < SEG_UNKNOWN; i++)
     relax_segment (segment_info[i].frag_root, i);
 
+  /* Relaxation has completed.  Freeze all syms.  */
+  finalize_syms = 1;
+
   /* Now the addresses of the frags are correct within the segment.  */
 
   bfd_as_write_hook ();
This page took 0.023822 seconds and 4 git commands to generate.