libctf: link: improve BTF child dict naming

BTF dicts don't have a cuname, which means that when the deduplicator runs
over them any child dicts that result from conflicted types found in those
CUs end up with no name either.  Detect such unnamed dicts and propagate
in the name the linker gave them at input time instead.  (There is always
*some* such name, even if it's something totally useless like "#1"; usually
it's much more useful.)
This commit is contained in:
Nick Alcock
2025-04-25 21:06:46 +01:00
parent 3aacd0f9c0
commit 02bfc04f73

View File

@@ -586,6 +586,15 @@ ctf_link_deduplicating_count_inputs (ctf_dict_t *fp, ctf_dynhash_t *cu_names,
return -1; /* errno is set for us. */
}
/* If this is an unnamed, zero-archive dict, propagate the input name into the
dict itself, for the sake of deduplicator child dict naming. */
if (one_input->clin_arc
&& ctf_archive_count (one_input->clin_arc) == 1
&& one_input->clin_arc->ctfi_dict != NULL &&
ctf_cuname (one_input->clin_arc->ctfi_dict) == NULL)
ctf_cuname_set (one_input->clin_arc->ctfi_dict, name);
count += one_count;
narcs++;
}