+2019-07-28 Alan Modra <amodra@gmail.com>
+
+ PR 24857
+ PR 24339
+ * elflink.c (elf_link_add_object_symbols): Report an informative
+ error on finding local symbols with index equal or greater than
+ symbol table sh_info. Correct comment. Allow such symbols in
+ dynamic objects. Abort on NULL section for symbol.
+
2019-07-26 Alan Modra <amodra@gmail.com>
* elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field.
bfd_boolean common;
bfd_boolean discarded;
unsigned int old_alignment;
+ unsigned int shindex;
bfd *old_bfd;
bfd_boolean matched;
continue;
/* If we aren't prepared to handle locals within the globals
- then we'll likely segfault on a NULL section. */
+ then we'll likely segfault on a NULL symbol hash if the
+ symbol is ever referenced in relocations. */
+ shindex = elf_elfheader (abfd)->e_shstrndx;
+ name = bfd_elf_string_from_elf_section (abfd, shindex, hdr->sh_name);
+ _bfd_error_handler (_("%pB: %s local symbol at index %lu"
+ " (>= sh_info of %lu)"),
+ abfd, name, (long) (isym - isymbuf + extsymoff),
+ (long) extsymoff);
+
+ /* Dynamic object relocations are not processed by ld, so
+ ld won't run into the problem mentioned above. */
+ if (dynamic)
+ continue;
bfd_set_error (bfd_error_bad_value);
goto error_free_vers;
/* Sanity check that all possibilities were handled. */
if (sec == NULL)
- {
- bfd_set_error (bfd_error_bad_value);
- goto error_free_vers;
- }
+ abort ();
/* Silently discard TLS symbols from --just-syms. There's
no way to combine a static TLS block with a new TLS block