* som.c (setup_sections): Improve estimation of space sizes in
	relocatable objects.
This commit is contained in:
Dave Anglin 2004-07-28 22:23:53 +00:00
parent 0dea24683a
commit 404ed0cf48
2 changed files with 30 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2004-07-28 Nick Clifton <nickc@redhat.com>
John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR 273
* som.c (setup_sections): Improve estimation of space sizes in
relocatable objects.
2004-07-27 Jason Thorpe <thorpej@wasabisystems.com>
* config.bfd (hppa*-*-netbsd*): Set targ_defvec to
bfd_elf32_hppa_nbsd_vec. Add bfd_elf32_hppa_linux_vec

View File

@ -1913,6 +1913,7 @@ setup_sections (abfd, file_hdr, current_offset)
struct som_subspace_dictionary_record subspace, save_subspace;
unsigned int subspace_index;
asection *space_asect;
bfd_size_type space_size = 0;
char *newname;
/* Read the space dictionary element. */
@ -2104,6 +2105,9 @@ setup_sections (abfd, file_hdr, current_offset)
subspace_asect->alignment_power = exact_log2 (subspace.alignment);
if (subspace_asect->alignment_power == (unsigned) -1)
goto error_return;
/* Keep track of the accumulated sizes of the sections. */
space_size += subspace.subspace_length;
}
/* This can happen for a .o which defines symbols in otherwise
@ -2111,11 +2115,25 @@ setup_sections (abfd, file_hdr, current_offset)
if (!save_subspace.file_loc_init_value)
space_asect->size = 0;
else
/* Setup the size for the space section based upon the info in the
last subspace of the space. */
space_asect->size = (save_subspace.subspace_start
- space_asect->vma
+ save_subspace.subspace_length);
{
if (file_hdr->a_magic != RELOC_MAGIC)
{
/* Setup the size for the space section based upon the info
in the last subspace of the space. */
space_asect->size = (save_subspace.subspace_start
- space_asect->vma
+ save_subspace.subspace_length);
}
else
{
/* The subspace_start field is not initialised in relocatable
only objects, so it cannot be used for length calculations.
Instead we use the space_size value which we have been
accumulating. This isn't an accurate estimate since it
ignores alignment and ordering issues. */
space_asect->size = space_size;
}
}
}
/* Now that we've read in all the subspace records, we need to assign
a target index to each subspace. */