* 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.
This commit is contained in:
parent
1576691751
commit
00806436cd
2 changed files with 30 additions and 0 deletions
|
@ -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
|
||||
|
|
23
bfd/som.c
23
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);
|
||||
|
|
Loading…
Reference in a new issue