From 93e77363ac0014fe3dbc29b2f0b346b5cea36bd7 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Fri, 25 Apr 2025 21:06:46 +0100 Subject: [PATCH] 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.) --- libctf/ctf-link.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libctf/ctf-link.c b/libctf/ctf-link.c index 65fd75fc80a..cd97e123ed1 100644 --- a/libctf/ctf-link.c +++ b/libctf/ctf-link.c @@ -552,6 +552,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++; } -- 2.47.3