From: Jeff Law Date: Sat, 19 Mar 1994 15:08:12 +0000 (+0000) Subject: * som.c (som_begin_writing): Account for alignment needs of X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=00806436cdfc323bfa857e5266e01142ff911eae;p=binutils-gdb.git * som.c (som_begin_writing): Account for alignment needs of subspaces too when writing executables. Never request a negative bss size. Fixes some problems with demand paged executables, still having problems with pure executables and shared executables. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b8ea8a80465..4f1fcfc603b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +Sat Mar 19 07:06:59 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * som.c (som_begin_writing): Account for alignment needs of + subspaces too when writing executables. Never request a negative + bss size. Fixes some problems with demand paged executables, + still having problems with pure executables and shared executables. + Fri Mar 18 19:12:47 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * trad-core.c (trad_unix_core_file_p): Call bfd_zmalloc not diff --git a/bfd/som.c b/bfd/som.c index c3bef323ef1..f17e064899c 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -3001,6 +3001,27 @@ som_begin_writing (abfd) /* Only do this for the first subspace within each space. */ first_subspace = 0; } + else if (abfd->flags & EXEC_P) + { + /* Have to keep proper alignments for the subspaces + in executables too! */ + if (subsection->flags & SEC_CODE) + { + unsigned tmp = exec_header.exec_tsize; + + tmp = SOM_ALIGN (tmp, 1 << subsection->alignment_power); + current_offset += (tmp - exec_header.exec_tsize); + exec_header.exec_tsize = tmp; + } + else + { + unsigned tmp = exec_header.exec_dsize; + + tmp = SOM_ALIGN (tmp, 1 << subsection->alignment_power); + current_offset += (tmp - exec_header.exec_dsize); + exec_header.exec_dsize = tmp; + } + } subsection->target_index = total_subspaces++; /* This is real data to be loaded from the file. */ @@ -3127,6 +3148,8 @@ som_begin_writing (abfd) tmp = exec_header.exec_dsize; tmp = SOM_ALIGN (tmp, PA_PAGESIZE); exec_header.exec_bsize -= (tmp - exec_header.exec_dsize); + if (exec_header.exec_bsize < 0) + exec_header.exec_bsize = 0; exec_header.exec_dsize = tmp; bfd_seek (abfd, obj_som_file_hdr (abfd)->aux_header_location, SEEK_SET);