aboutsummaryrefslogtreecommitdiff
path: root/libctf/ctf-create.c
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 /libctf/ctf-create.c
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.
Diffstat (limited to 'libctf/ctf-create.c')
-rw-r--r--libctf/ctf-create.c5
1 files changed, 5 insertions, 0 deletions
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,