From 460f1cdc3f76cb1a05107461afad73065b3867f1 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 8 Mar 2012 14:25:29 +0000 Subject: [PATCH] 2012-03-08 Tristan Gingold * vms-lib.c (_bfd_vms_lib_write_archive_contents): Set maximum keylen according to archive kind. Set nextvbn and nextrfa lhd fields. Add comments. --- bfd/ChangeLog | 6 ++++++ bfd/vms-lib.c | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ce08017..2140240 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-03-08 Tristan Gingold + + * vms-lib.c (_bfd_vms_lib_write_archive_contents): Set maximum + keylen according to archive kind. Set nextvbn and nextrfa lhd + fields. Add comments. + 2012-03-07 Nick Clifton * elf-m10300.c (elf32_mn10300_link_hash_entry): Add tls_type diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c index 48d656b..cc62d11 100644 --- a/bfd/vms-lib.c +++ b/bfd/vms-lib.c @@ -2006,6 +2006,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch) unsigned int mod_idx_vbn; unsigned int sym_idx_vbn; bfd_boolean is_elfidx = tdata->kind == vms_lib_ia64; + unsigned int max_keylen = is_elfidx ? 1025 : MAX_KEYLEN; /* Count the number of modules (and do a first sanity check). */ nbr_modules = 0; @@ -2037,7 +2038,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch) current != NULL; current = current->archive_next, i++) { - int nl; + unsigned int nl; modules[i].abfd = current; modules[i].name = vms_get_module_name (current->filename, FALSE); @@ -2045,7 +2046,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch) /* FIXME: silently truncate long names ? */ nl = strlen (modules[i].name); - modules[i].namlen = (nl > MAX_KEYLEN ? MAX_KEYLEN : nl); + modules[i].namlen = (nl > max_keylen ? max_keylen : nl); } /* Create the module index. */ @@ -2236,20 +2237,27 @@ _bfd_vms_lib_write_archive_contents (bfd *arch) bfd_putl32 (nbr_modules, lhd->modcnt); bfd_putl32 (nbr_modules, lhd->modhdrs); + /* Number of blocks for index. */ + bfd_putl32 (nbr_mod_iblk + nbr_sym_iblk, lhd->idxblks); bfd_putl32 (vbn - 1, lhd->hipreal); bfd_putl32 (vbn - 1, lhd->hiprusd); + /* VBN of the next free block. */ + bfd_putl32 ((off / VMS_BLOCK_SIZE) + 1, lhd->nextvbn); + bfd_putl32 ((off / VMS_BLOCK_SIZE) + 1, lhd->nextrfa + 0); + bfd_putl16 (0, lhd->nextrfa + 4); + /* First index (modules name). */ idd_flags = IDD__FLAGS_ASCII | IDD__FLAGS_VARLENIDX | IDD__FLAGS_NOCASECMP | IDD__FLAGS_NOCASENTR; bfd_putl16 (idd_flags, idd->flags); - bfd_putl16 (MAX_KEYLEN, idd->keylen); + bfd_putl16 (max_keylen, idd->keylen); bfd_putl16 (mod_idx_vbn, idd->vbn); idd++; /* Second index (symbols name). */ bfd_putl16 (idd_flags, idd->flags); - bfd_putl16 (MAX_KEYLEN, idd->keylen); + bfd_putl16 (max_keylen, idd->keylen); bfd_putl16 (sym_idx_vbn, idd->vbn); idd++; -- 2.7.4