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.
+2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-link.c (ctf_link_one_variable): Check the dst_type for
+ conflicts, not the source type.
+
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
* ctf-impl.h (ctf_file_t): Improve comments.
}
/* Already present? Nothing to do. */
- if (dvd && dvd->dvd_type == type)
+ if (dvd && dvd->dvd_type == dst_type)
return 0;
}
}