[09/59] libctf, create: fix addition of anonymous struct/union members

Message ID 20200630233146.338613-10-nick.alcock@oracle.com
State New
Headers show
  • Deduplicating CTF linker
Related show

Commit Message

Alan Modra via Binutils June 30, 2020, 11:30 p.m.
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.

	* 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,