diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/write.c | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index cdf5c9e..588c39d 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-11-28 Jakub Jelinek <jakub@redhat.com> + + * write.c (subsegs_finish): For SEC_MERGE sections pad last fragment + to entsize. + 2002-11-26 DJ Delorie <dj@redhat.com. * dwarf2dbg.c (scale_addr_delta): New. diff --git a/gas/write.c b/gas/write.c index b1c27d7..40c18f8 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1409,7 +1409,25 @@ subsegs_finish () any alignment is meaningless, and, moreover, will look weird if we are generating a listing. */ if (!had_errors ()) - alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP); + { + alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP); +#ifdef BFD_ASSEMBLER + if ((bfd_get_section_flags (now_seg->owner, now_seg) & SEC_MERGE) + && now_seg->entsize) + { + unsigned int entsize = now_seg->entsize; + int entalign = 0; + + while ((entsize & 1) == 0) + { + ++entalign; + entsize >>= 1; + } + if (entalign > alignment) + alignment = entalign; + } +#endif + } if (subseg_text_p (now_seg)) frag_align_code (alignment, 0); |