From ea412e04e5d92431db4b2048143535505cc33455 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 18 Feb 2001 22:04:08 +0000 Subject: [PATCH] 2001-02-18 H.J. Lu * elflink.h (elf_link_input_bfd): Ignore invalid section symbol index. --- bfd/ChangeLog | 5 +++++ bfd/elflink.h | 29 +++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c07c5e51d2e..945af2ad61b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2001-02-18 H.J. Lu + + * elflink.h (elf_link_input_bfd): Ignore invalid section symbol + index. + 2001-02-18 Kazu Hirata * vms-misc.c: Fix formatting. diff --git a/bfd/elflink.h b/bfd/elflink.h index 5cbbcbbe6c9..8605c736ce6 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -5515,14 +5515,24 @@ elf_link_input_bfd (finfo, input_bfd) } } + name = NULL; if (isym->st_shndx == SHN_UNDEF) - isec = bfd_und_section_ptr; + { + isec = bfd_und_section_ptr; + name = isec->name; + } else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE) isec = section_from_elf_index (input_bfd, isym->st_shndx); else if (isym->st_shndx == SHN_ABS) - isec = bfd_abs_section_ptr; + { + isec = bfd_abs_section_ptr; + name = isec->name; + } else if (isym->st_shndx == SHN_COMMON) - isec = bfd_com_section_ptr; + { + isec = bfd_com_section_ptr; + name = isec->name; + } else { /* Who knows? */ @@ -5541,7 +5551,18 @@ elf_link_input_bfd (finfo, input_bfd) /* Save away all section symbol values. */ if (isec != NULL) - isec->symbol->value = isym->st_value; + { + if (name) + { + if (isec->symbol->value != isym->st_value) + (*_bfd_error_handler) + (_("%s: invalid section symbol index 0x%x (%s) ingored"), + bfd_get_filename (input_bfd), isym->st_shndx, + name); + continue; + } + isec->symbol->value = isym->st_value; + } /* If this is a discarded link-once section symbol, update it's value to that of the kept section symbol. The -- 2.30.2