+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
 
              /* 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.  */
       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);