aboutsummaryrefslogtreecommitdiff
path: root/libctf
diff options
context:
space:
mode:
Diffstat (limited to 'libctf')
-rw-r--r--libctf/ChangeLog5
-rw-r--r--libctf/ctf-dedup.c26
2 files changed, 26 insertions, 5 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index e81db2c..e571404 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,10 @@
2020-11-20 Nick Alcock <nick.alcock@oracle.com>
+ * ctf-dedup.c (ctf_dedup_rhash_type): Null out the names of nameless
+ type kinds, just in case the input has named them.
+
+2020-11-20 Nick Alcock <nick.alcock@oracle.com>
+
* ctf-dump.c (ctf_dump_header): Dump the new flags bits and the index
section lengths.
(ctf_dump_objts): Report indexed sections. Also dump functions. Use
diff --git a/libctf/ctf-dedup.c b/libctf/ctf-dedup.c
index 3e95af0..b0be5a7 100644
--- a/libctf/ctf-dedup.c
+++ b/libctf/ctf-dedup.c
@@ -638,6 +638,27 @@ ctf_dedup_rhash_type (ctf_dict_t *fp, ctf_dict_t *input, ctf_dict_t **inputs,
&& ctf_dedup_record_origin (fp, input_num, decorated, type_id) < 0)
return NULL; /* errno is set for us. */
+#ifdef ENABLE_LIBCTF_HASH_DEBUGGING
+ ctf_dprintf ("%lu: hashing thing with ID %i/%lx (kind %i): %s.\n",
+ depth, input_num, type, kind, name ? name : "");
+#endif
+
+ /* Some type kinds don't have names: the API provides no way to set the name,
+ so the type the deduplicator outputs will be nameless even if the input
+ somehow has a name, and the name should not be mixed into the hash. */
+
+ switch (kind)
+ {
+ case CTF_K_POINTER:
+ case CTF_K_ARRAY:
+ case CTF_K_FUNCTION:
+ case CTF_K_VOLATILE:
+ case CTF_K_CONST:
+ case CTF_K_RESTRICT:
+ case CTF_K_SLICE:
+ name = NULL;
+ }
+
/* Mix in invariant stuff, transforming the type kind if needed. Note that
the vlen is *not* hashed in: the actual variable-length info is hashed in
instead, piecewise. The vlen is not part of the type, only the
@@ -647,11 +668,6 @@ ctf_dedup_rhash_type (ctf_dict_t *fp, ctf_dict_t *input, ctf_dict_t **inputs,
*other types in the same TU* with the same name: so two types can easily
have distinct nonroot flags, yet be exactly the same type.*/
-#ifdef ENABLE_LIBCTF_HASH_DEBUGGING
- ctf_dprintf ("%lu: hashing thing with ID %i/%lx (kind %i): %s.\n",
- depth, input_num, type, kind, name ? name : "");
-#endif
-
ctf_sha1_init (&hash);
if (name)
ctf_dedup_sha1_add (&hash, name, strlen (name) + 1, "name", depth);