2010-05-24 Tristan Gingold <gingold@adacore.com>

* vms-alpha.c (struct vms_private_data_struct): Add section_max
	field.
	(_bfd_vms_slurp_egsd): Put PSC into the sections array.
	(vms_new_section_hook): Do not put section in the sections
	array.
This commit is contained in:
Tristan Gingold 2010-05-24 10:41:52 +00:00
parent 5fe88cfb86
commit c734eb83b8
2 changed files with 32 additions and 21 deletions

View File

@ -1,3 +1,11 @@
2010-05-24 Tristan Gingold <gingold@adacore.com>
* vms-alpha.c (struct vms_private_data_struct): Add section_max
field.
(_bfd_vms_slurp_egsd): Put PSC into the sections array.
(vms_new_section_hook): Do not put section in the sections
array.
2010-05-24 Tristan Gingold <gingold@adacore.com>
* vms-alpha.c (_bfd_vms_slurp_egsd): Fix indentation.

View File

@ -271,8 +271,11 @@ struct vms_private_data_struct
struct hdr_struct hdr_data; /* data from HDR/EMH record */
struct eom_struct eom_data; /* data from EOM/EEOM record */
unsigned int section_count; /* # of sections in following array */
asection **sections; /* array of GSD/EGSD sections */
/* Array of GSD sections to get the correspond BFD one. */
unsigned int section_max; /* Size of the sections array. */
unsigned int section_count; /* Number of GSD sections. */
asection **sections;
/* Array of raw symbols. */
struct vms_symbol_entry **syms;
@ -1143,6 +1146,23 @@ _bfd_vms_slurp_egsd (bfd *abfd)
section->vma = (bfd_vma)base_addr;
base_addr += section->size;
section->filepos = (unsigned int)-1;
/* Append it to the section array. */
if (PRIV (section_count) >= PRIV (section_max))
{
if (PRIV (section_max) == 0)
PRIV (section_max) = 16;
else
PRIV (section_max) *= 2;
PRIV (sections) = bfd_realloc_or_free
(PRIV (sections), PRIV (section_max) * sizeof (asection *));
if (PRIV (sections) == NULL)
return FALSE;
}
PRIV (sections)[PRIV (section_count)] = section;
PRIV (section_count)++;
#if VMS_DEBUG
vms_debug (4, "EGSD P-section %d (%s, flags %04x) ",
section->index, name, old_flags);
@ -8827,28 +8847,11 @@ vms_new_section_hook (bfd * abfd, asection *section)
{
bfd_size_type amt;
/* Count hasn't been incremented yet. */
unsigned int section_count = abfd->section_count + 1;
vms_debug2 ((1, "vms_new_section_hook (%p, [%d]%s), count %d\n",
abfd, section->index, section->name, section_count));
vms_debug2 ((1, "vms_new_section_hook (%p, [%d]%s)\n",
abfd, section->index, section->name));
bfd_set_section_alignment (abfd, section, 0);
if (section_count > PRIV (section_count))
{
amt = section_count;
amt *= sizeof (asection *);
PRIV (sections) = bfd_realloc_or_free (PRIV (sections), amt);
if (PRIV (sections) == NULL)
return FALSE;
PRIV (section_count) = section_count;
}
vms_debug2 ((6, "section_count: %d\n", PRIV (section_count)));
PRIV (sections)[section->index] = section;
vms_debug2 ((7, "%d: %s\n", section->index, section->name));
amt = sizeof (struct vms_section_data_struct);