+2021-03-02 Nick Alcock <nick.alcock@oracle.com>
+
+ * elf-strtab.c (_bfd_elf_strtab_str): Skip strings with zero refcount.
+
2021-03-02 Alan Modra <amodra@gmail.com>
PR 27451
bfd_size_type *offset)
{
if (idx == 0)
- return 0;
+ return NULL;
BFD_ASSERT (idx < tab->size);
BFD_ASSERT (tab->sec_size);
+ if (tab->array[idx]->refcount == 0)
+ return NULL;
if (offset)
*offset = tab->array[idx]->u.index;
return tab->array[idx]->root.string;
+2021-03-02 Nick Alcock <nick.alcock@oracle.com>
+
+ * ldelfgen.c (ldelf_ctf_strtab_iter_cb): Skip zero-refcount strings.
+
2021-03-02 Alan Modra <amodra@gmail.com>
* testsuite/ld-powerpc/startstop.d,
if (arg->next_i == 0)
arg->next_i = 1;
- if (arg->next_i >= _bfd_elf_strtab_len (arg->strtab))
+ /* Hunt through strings until we fall off the end or find one with
+ a nonzero refcount. */
+ do
{
- arg->next_i = 0;
- return NULL;
+ if (arg->next_i >= _bfd_elf_strtab_len (arg->strtab))
+ {
+ arg->next_i = 0;
+ return NULL;
+ }
+
+ ret = _bfd_elf_strtab_str (arg->strtab, arg->next_i++, &off);
}
+ while (ret == NULL);
- ret = _bfd_elf_strtab_str (arg->strtab, arg->next_i++, &off);
*offset = off;
/* If we've overflowed, we cannot share any further strings: the CTF
+2021-03-02 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-create.c (symtypetab_density): Report the symbol name as
+ well as index in the name != object error; note the likely
+ consequences.
+ * ctf-link.c (ctf_link_shuffle_syms): Report the symbol index
+ as well as name.
+
2021-03-02 Nick Alcock <nick.alcock@oracle.com>
* ctf-link.c (ctf_link_shuffle_syms): Free ctf_dynsyms properly.
if ((flags & CTF_SYMTYPETAB_EMIT_FUNCTION)
&& sym->st_type != STT_FUNC)
{
- ctf_err_warn (fp, 1, 0, _("Symbol %x added to CTF as a function "
- "but is of type %x\n"),
- sym->st_symidx, sym->st_type);
+ ctf_err_warn (fp, 1, 0, _("symbol %s (%x) added to CTF as a "
+ "function but is of type %x. "
+ "The symbol type lookup tables "
+ "are probably corrupted"),
+ sym->st_name, sym->st_symidx, sym->st_type);
ctf_dynhash_remove (symhash, name);
continue;
}
else if (!(flags & CTF_SYMTYPETAB_EMIT_FUNCTION)
&& sym->st_type != STT_OBJECT)
{
- ctf_err_warn (fp, 1, 0, _("Symbol %x added to CTF as a data "
- "object but is of type %x\n"),
- sym->st_symidx, sym->st_type);
+ ctf_err_warn (fp, 1, 0, _("symbol %s (%x) added to CTF as a "
+ "data object but is of type %x. "
+ "The symbol type lookup tables "
+ "are probably corrupted"),
+ sym->st_name, sym->st_symidx, sym->st_type);
ctf_dynhash_remove (symhash, name);
continue;
}
for skippability here. */
if (!ctf_symtab_skippable (&did->cid_sym))
{
- ctf_dprintf ("symbol name from linker: %s\n", did->cid_sym.st_name);
+ ctf_dprintf ("symbol from linker: %s (%x)\n", did->cid_sym.st_name,
+ did->cid_sym.st_symidx);
if ((new_sym = malloc (sizeof (ctf_link_sym_t))) == NULL)
goto local_oom;