summaryrefslogtreecommitdiff
path: root/bfd/vms-alpha.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2010-05-24 10:41:51 +0000
committerTristan Gingold <gingold@adacore.com>2010-05-24 10:41:51 +0000
commit65fba7bbf8e5f3c5f32c46f725ecb5eaa3267d2c (patch)
tree5007108934ff86f33a2de6a877daa40e0dc564a2 /bfd/vms-alpha.c
parentf5a76248392dc4e4a405b1112e0a1f3ef4620ace (diff)
downloadbinutils-redhat-65fba7bbf8e5f3c5f32c46f725ecb5eaa3267d2c.tar.gz
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.
Diffstat (limited to 'bfd/vms-alpha.c')
-rw-r--r--bfd/vms-alpha.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c
index 5c519b096f..b2f205e5c8 100644
--- a/bfd/vms-alpha.c
+++ b/bfd/vms-alpha.c
@@ -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);