From 19d4b1addcafc786360c31d02d5ef2b44aef3152 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Wed, 11 Mar 2020 00:01:41 +0000 Subject: [PATCH] libctf, link: fix spurious conflicts of variables in the variable section When we link a CTF variable, we check to see if it already exists in the parent dict first: if it does, and it has a type the same as the type we would populate it with, we assume we don't need to do anything: otherwise, we populate it in a per-CU child. Or that's what we should be doing. Instead, we check if the type is the same as the type in *source dict*, which is going to be a completely different value! So we end up concluding all variables are conflicting, bloating up output possibly quite a lot (variables aren't big in and of themselves, but each drags around a strtab entry, and CTF dicts in a CTF archive do not share their strtabs -- one of many problems with CTF archives as presently constituted.) Fix trivial: check the right type. libctf/ * ctf-link.c (ctf_link_one_variable): Check the dst_type for conflicts, not the source type. --- libctf/ChangeLog | 5 +++++ libctf/ctf-link.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index ba6664fa0ae..d6649986d48 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,8 @@ +2020-07-22 Nick Alcock + + * ctf-link.c (ctf_link_one_variable): Check the dst_type for + conflicts, not the source type. + 2020-07-22 Nick Alcock * ctf-impl.h (ctf_file_t): Improve comments. diff --git a/libctf/ctf-link.c b/libctf/ctf-link.c index 3c96604b36a..7b0ac386dec 100644 --- a/libctf/ctf-link.c +++ b/libctf/ctf-link.c @@ -584,7 +584,7 @@ ctf_link_one_variable (const char *name, ctf_id_t type, void *arg_) } /* Already present? Nothing to do. */ - if (dvd && dvd->dvd_type == type) + if (dvd && dvd->dvd_type == dst_type) return 0; } } -- 2.30.2