aboutsummaryrefslogtreecommitdiff
path: root/bfd/vms-lib.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2012-03-08 14:25:29 +0000
committerTristan Gingold <gingold@adacore.com>2012-03-08 14:25:29 +0000
commit460f1cdc3f76cb1a05107461afad73065b3867f1 (patch)
tree7a41adbaa60e407f16832887574cc707bbe13b6f /bfd/vms-lib.c
parentf3cf45d50722ee1f86e249985c37ab7ceec674f1 (diff)
downloadgdb-460f1cdc3f76cb1a05107461afad73065b3867f1.zip
gdb-460f1cdc3f76cb1a05107461afad73065b3867f1.tar.gz
gdb-460f1cdc3f76cb1a05107461afad73065b3867f1.tar.bz2
2012-03-08 Tristan Gingold <gingold@adacore.com>
* vms-lib.c (_bfd_vms_lib_write_archive_contents): Set maximum keylen according to archive kind. Set nextvbn and nextrfa lhd fields. Add comments.
Diffstat (limited to 'bfd/vms-lib.c')
-rw-r--r--bfd/vms-lib.c16
1 files changed, 12 insertions, 4 deletions
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++;