diff options
author | Nick Alcock <nick.alcock@oracle.com> | 2020-06-02 20:38:17 +0100 |
---|---|---|
committer | Nick Alcock <nick.alcock@oracle.com> | 2020-07-22 17:57:28 +0100 |
commit | f47ca3113561ba3189b892a1a956ba6bd0fdb773 (patch) | |
tree | 0e38f55d2ef581bf51477c725fb0d83c51bd7a0a /libctf/ctf-create.c | |
parent | ab769488e75272c3cbea4626a346fd0c336b2de6 (diff) | |
download | binutils-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.c | 5 |
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, |