diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2001-02-18 22:04:08 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2001-02-18 22:04:08 +0000 |
commit | ea412e04e5d92431db4b2048143535505cc33455 (patch) | |
tree | 4dfc927b3eb78d7b91f221dfcdb2c595d37d0fdb /bfd/elflink.h | |
parent | 47eee8a91cf1b7f05653776c054ab3f2ad81f1ab (diff) | |
download | gdb-ea412e04e5d92431db4b2048143535505cc33455.zip gdb-ea412e04e5d92431db4b2048143535505cc33455.tar.gz gdb-ea412e04e5d92431db4b2048143535505cc33455.tar.bz2 |
2001-02-18 H.J. Lu <hjl@gnu.org>
* elflink.h (elf_link_input_bfd): Ignore invalid section symbol
index.
Diffstat (limited to 'bfd/elflink.h')
-rw-r--r-- | bfd/elflink.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/bfd/elflink.h b/bfd/elflink.h index 5cbbcbb..8605c73 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 |