From b23e50e23eee077dfbfdad40ec2d92a546fb19fe Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Mon, 15 Nov 2004 12:39:01 +0000 Subject: [PATCH] * elflink.c (elf_link_add_object_symbols): Don't assume version indices are consecutive. --- bfd/ChangeLog | 5 +++++ bfd/elflink.c | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 43d5e45ef8..8c46cd64d9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2004-11-15 Paul Brook + + * elflink.c (elf_link_add_object_symbols): Don't assume version + indices are consecutive. + 2004-11-14 Richard Sandiford * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Deal with diff --git a/bfd/elflink.c b/bfd/elflink.c index e5c9d9f13a..4f2d096773 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -3518,20 +3518,23 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (isym->st_shndx != SHN_UNDEF) { - if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info) - { - (*_bfd_error_handler) - (_("%B: %s: invalid version %u (max %d)"), - abfd, name, vernum, - elf_tdata (abfd)->dynverdef_hdr.sh_info); - bfd_set_error (bfd_error_bad_value); - goto error_free_vers; - } + if (vernum > elf_tdata (abfd)->cverdefs) + verstr = NULL; else if (vernum > 1) verstr = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; else verstr = ""; + + if (verstr == NULL) + { + (*_bfd_error_handler) + (_("%B: %s: invalid version %u (max %d)"), + abfd, name, vernum, + elf_tdata (abfd)->cverdefs); + bfd_set_error (bfd_error_bad_value); + goto error_free_vers; + } } else {