diff options
author | Jeff Law <law@redhat.com> | 1994-03-19 15:08:12 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1994-03-19 15:08:12 +0000 |
commit | 00806436cdfc323bfa857e5266e01142ff911eae (patch) | |
tree | be6943265f2c724dbe90d48134de71832f0f9d69 | |
parent | 157669175157e845aa1fa2bf52f5be07ed497005 (diff) | |
download | gdb-00806436cdfc323bfa857e5266e01142ff911eae.zip gdb-00806436cdfc323bfa857e5266e01142ff911eae.tar.gz gdb-00806436cdfc323bfa857e5266e01142ff911eae.tar.bz2 |
* 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.
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/som.c | 23 |
2 files changed, 30 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b8ea8a8..4f1fcfc 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 @@ -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); |