From fa23f0f49a6179dcc7252e660ad60f1cf87665f2 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Mon, 3 May 2010 16:04:32 +0000 Subject: [PATCH] bfd/ 2010-05-03 Tristan Gingold * vms-lib.c (vms_lib_bopen): Fix the size threshold to read selective_search flag. Add comments. * vms-alpha.c (alpha_vms_bfd_final_link): Create the DMT section before output_has_begun is set. --- bfd/ChangeLog | 9 +++++++++ bfd/vms-alpha.c | 31 +++++++++++++++++++------------ bfd/vms-lib.c | 4 +++- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6ebbe7f..13c242d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,13 @@ 2010-05-03 Tristan Gingold + * vms-lib.c (vms_lib_bopen): Fix the size threshold to read + selective_search flag. + Add comments. + * vms-alpha.c (alpha_vms_bfd_final_link): Create the DMT section + before output_has_begun is set. + +2010-05-03 Tristan Gingold + * vms-alpha.c: Add comments. (struct vms_private_data_struct): Remove image_autoextend field. (dst_check_allocation): Removed. @@ -11,6 +19,7 @@ Write the dmt section. (evax_bfd_print_image): Also print the dst size in hexa. Fix typo. (alpha_vms_read_sections_content): Do not set image_autoextend. + (alpha_vms_bfd_final_link): Generate the dst. 2010-05-03 Tristan Gingold diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index 92d0693..5ae54c2 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -8364,6 +8364,7 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info) bfd_vma base_addr; bfd_vma last_addr; asection *dst; + asection *dmt; bfd_get_outsymbols (abfd) = NULL; bfd_get_symcount (abfd) = 0; @@ -8478,6 +8479,21 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info) alpha_vms_link_hash (info)->fixup = fixupsec; alpha_vms_link_hash (info)->base_addr = base_addr; + /* Create the DMT section, if necessary. */ + dst = PRIV (dst_section); + if (dst != NULL && dst->size == 0) + dst = NULL; + if (dst != NULL) + { + dmt = bfd_make_section_anyway_with_flags + (info->output_bfd, "$DMT$", + SEC_DEBUGGING | SEC_HAS_CONTENTS | SEC_LINKER_CREATED); + if (dmt == NULL) + return FALSE; + } + else + dmt = NULL; + /* Read all sections from the inputs. */ for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) { @@ -8491,7 +8507,8 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; } - /* Handle all the link order information for the sections. */ + /* Handle all the link order information for the sections. + Note: past this point, it is not possible to create new sections. */ for (o = abfd->sections; o != NULL; o = o->next) { for (p = o->map_head.link_order; p != NULL; p = p->next) @@ -8518,21 +8535,11 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; /* Compute the DMT. */ - dst = PRIV (dst_section); - if (dst != NULL && dst->size == 0) - dst = NULL; - if (dst != NULL) + if (dmt != NULL) { - asection *dmt; int pass; unsigned char *contents = NULL; - dmt = bfd_make_section_anyway_with_flags - (info->output_bfd, "$DMT$", - SEC_DEBUGGING | SEC_HAS_CONTENTS | SEC_LINKER_CREATED); - if (dmt == NULL) - return FALSE; - /* In pass 1, compute the size. In pass 2, write the DMT contents. */ for (pass = 0; pass < 2; pass++) { diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c index bbef19c..0b45a13 100644 --- a/bfd/vms-lib.c +++ b/bfd/vms-lib.c @@ -577,6 +577,7 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum vms_lib_kind kind) off = bfd_getl16 (sbm->next); if (off != 0) { + /* Read the 'next' array. */ sbmdesc->next = (unsigned short *)bfd_alloc (abfd, sbm_len * sizeof (unsigned short)); buf1 = data + off; @@ -585,6 +586,7 @@ _bfd_vms_lib_archive_p (bfd *abfd, enum vms_lib_kind kind) } else { + /* There is no next array if there is only one submap. */ BFD_ASSERT (tdata->nbr_dcxsbm == 1); sbmdesc->next = NULL; } @@ -1200,7 +1202,7 @@ vms_lib_bopen (bfd *el, file_ptr filepos) /* Check id. */ if (mhd->id != MHD__C_MHDID) return FALSE; - if (len >= sizeof (struct vms_mhd)) + if (len >= MHD__C_MHDLEN + 1) el->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0; el->mtime = vms_rawtime_to_time_t (mhd->datim); el->mtime_set = TRUE; -- 2.7.4