aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-02 20:38:17 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 17:57:28 +0100
commitf47ca3113561ba3189b892a1a956ba6bd0fdb773 (patch)
tree0e38f55d2ef581bf51477c725fb0d83c51bd7a0a
parentab769488e75272c3cbea4626a346fd0c336b2de6 (diff)
downloadbinutils-f47ca3113561ba3189b892a1a956ba6bd0fdb773.zip
binutils-f47ca3113561ba3189b892a1a956ba6bd0fdb773.tar.gz
binutils-f47ca3113561ba3189b892a1a956ba6bd0fdb773.tar.bz2
libctf, create: fix addition of anonymous struct/union members
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.
-rw-r--r--libctf/ChangeLog4
-rw-r--r--libctf/ctf-create.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index acff0b1..671df68 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,9 @@
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+ * ctf-create.c (membcmp) Skip nameless members.
+
+2020-07-22 Nick Alcock <nick.alcock@oracle.com>
+
* ctf-create.c (ctf_add_member_offset): Support names of ""
as if they were the null pointer.
diff --git a/libctf/ctf-create.c b/libctf/ctf-create.c
index 848e725..5cbcfe0 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,