This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
Set section vma for COFF in BFD gas
- To: binutils at sourceware dot cygnus dot com
- Subject: Set section vma for COFF in BFD gas
- From: "Mark E." <snowball3 at bigfoot dot com>
- Date: Tue, 27 Jun 2000 19:55:11 -0400
Here I am again...
BFD gas does not set the section vma like !BFD gas already does for COFF targets. The
patch below eliminates this difference. I excluded PE-COFF because I have no way to
know if the change would cause breakage (from what I
I've been reading on the list, it certainly doesn't need any more help in that area).
GAS Changelog:
2000-06-27 Mark Elbrecht <snowball3@bigfoot.com>
* write.c [BFD_ASSEMBLER && OBJ_COFF && !TE_PE] (set_segment_vma): New.
Set vma and lma for a segment.
(write_object_file) [BFD_ASSEMBLER && OBJ_COFF && !TE_PE]: Use it.
(I hope I formatted that correctly.)
Index: src/gas/write.c
===================================================================
RCS file: /cvs/src/src/gas/write.c,v
retrieving revision 1.12
diff -c -p -r1.12 write.c
*** write.c 2000/04/03 12:05:31 1.12
--- write.c 2000/06/27 23:30:31
*************** static void remove_subsegs PARAMS ((frch
*** 133,138 ****
--- 133,142 ----
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()
*
*************** set_symtab ()
*** 1348,1353 ****
--- 1352,1370 ----
}
#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
*************** write_object_file ()
*** 1479,1484 ****
--- 1496,1508 ----
#else
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
/*