[PATCH 09/59] libctf, create: fix addition of anonymous struct/union members
Nick Alcock
nick.alcock@oracle.com
Tue Jun 30 23:30:56 GMT 2020
A Solaris-era bug causes us to check the offsets of types with no names
against the first such type when ctf_add_type()ing members to a struct
or union. Members with no names (i.e. anonymous struct/union members)
can appear as many times as you like in a struct/union, so this check
should be skipped in this case.
libctf/
* ctf-create.c (membcmp) Skip nameless members.
---
libctf/ctf-create.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/libctf/ctf-create.c b/libctf/ctf-create.c
index 848e725ef24..5cbcfe0a702 100644
--- a/libctf/ctf-create.c
+++ b/libctf/ctf-create.c
@@ -1602,6 +1602,11 @@ membcmp (const char *name, ctf_id_t type _libctf_unused_, unsigned long offset,
ctf_bundle_t *ctb = arg;
ctf_membinfo_t ctm;
+ /* Don't check nameless members (e.g. anonymous structs/unions) against each
+ other. */
+ if (name[0] == 0)
+ return 0;
+
if (ctf_member_info (ctb->ctb_file, ctb->ctb_type, name, &ctm) < 0)
{
ctf_dprintf ("Conflict due to member %s iteration error: %s.\n", name,
--
2.27.0.247.g3dff7de930
More information about the Binutils
mailing list