Set vma and lma for segment when using the BFD_ASSEMBLER for COFF format files.
authorNick Clifton <nickc@redhat.com>
Thu, 29 Jun 2000 22:51:58 +0000 (22:51 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 29 Jun 2000 22:51:58 +0000 (22:51 +0000)
gas/ChangeLog
gas/write.c

index aa8f650b2633e0c7554b3a0e749547ad960abb90..a0398577f5c16bb7e1bd6cd28064e4e996541dbf 100644 (file)
@@ -1,3 +1,8 @@
+2000-06-29 Mark Elbrecht <snowball3@bigfoot.com>
+
+       * write.c (set_segment_vma): New: Set vma and lma for a segment.
+       (write_object_file) [BFD_ASSEMBLER && OBJ_COFF && !TE_PE]: Use it.
+
 2000-06-27  Aldy Hernandez  <aldyh@redhat.com>
 
        * config/tc-mips.c (mips_ip): handle "(foo-.-4)" type of
index 5a5c45b83aef144108d31dd4e8e857abf8f760fa..1f11f357f52b24766725ddae01f6b9db0b1b1f5d 100644 (file)
@@ -132,6 +132,9 @@ static void cvt_frag_to_fill PARAMS ((object_headers *, segT, fragS *));
 static void remove_subsegs PARAMS ((frchainS *, int, fragS **, fragS **));
 static void relax_and_size_all_segments PARAMS ((void));
 #endif
+#if defined (BFD_ASSEMBLER) && defined (OBJ_COFF) && !defined (TE_PE)
+static void set_segment_vma PARAMS ((bfd *, asection *, PTR));
+#endif
 
 /*
  *                     fix_new()
@@ -1348,6 +1351,20 @@ set_symtab ()
 }
 #endif
 
+#if defined (BFD_ASSEMBLER) && defined (OBJ_COFF) && !defined (TE_PE)
+static void
+set_segment_vma (abfd, sec, xxx)
+     bfd *abfd;
+     asection *sec;
+     PTR xxx ATTRIBUTE_UNUSED;
+{
+  static bfd_vma addr = 0;
+  
+  bfd_set_section_vma (abfd, sec, addr);
+  addr += bfd_section_size (abfd, sec);
+}
+#endif /* BFD_ASSEMBLER && OBJ_COFF && !TE_PE */
+
 /* Finish the subsegments.  After every sub-segment, we fake an
    ".align ...".  This conforms to BSD4.2 brane-damage.  We then fake
    ".fill 0" because that is the kind of frag that requires least
@@ -1480,6 +1497,13 @@ write_object_file ()
   relax_and_size_all_segments ();
 #endif /* BFD_ASSEMBLER */
 
+#if defined (BFD_ASSEMBLER) && defined (OBJ_COFF) && !defined (TE_PE)
+  /* Now that the segments have their final sizes, run through the
+     sections and set their vma and lma. The !BFD_ASSEMBLER case takes
+     care of this in write_object_file in config/obj-coff.c.  */
+  bfd_map_over_sections (stdoutput, set_segment_vma, (char *) 0);
+#endif
+
 #ifndef BFD_ASSEMBLER
   /*
    *