Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Wei-min Pan <weimin.pan@oracle.com>
To: Andrew Burgess <andrew.burgess@embecosm.com>,
	       Tom de Vries <tdevries@suse.de>
Cc: gdb-patches@sourceware.org, Simon Marchi <simon.marchi@polymtl.ca>
Subject: Re: [PATCH v3] gdb: CTF support
Date: Mon, 07 Oct 2019 16:08:00 -0000	[thread overview]
Message-ID: <66ec0403-849a-476a-38fe-edc80b0eb1af@oracle.com> (raw)
In-Reply-To: <20191007120723.GO4962@embecosm.com>


On 10/7/2019 5:07 AM, Andrew Burgess wrote:
> * Tom de Vries <tdevries@suse.de> [2019-10-07 11:33:12 +0200]:
>
>> On 04-10-19 00:56, Weimin Pan wrote:
>>> +/* The routines that read and process fields/members of a C struct, union,
>>> +   or enumeration, pass lists of data member fields in an instance of a
>>> +   field_info structure. It is derived from dwarf2read.c.  */
>>> +
>>> +struct nextfield
>>> +{
>>> +  struct field field {};
>>> +};
>>> +
>>> +struct field_info
>> Hi,
>>
>> not only is field_info derived from dwarf2read.c, it uses the same name
>> for the type.  This is a C++ One-Definition-Rule violation, which causes
>> most of the test-suite to start failing for me.
>>
>> What happens is that here:
>> ...
>>    if (die->child != NULL && ! die_is_declaration (die, cu))
>>      {
>>        struct field_info fi;
>>        std::vector<struct symbol *> template_args;
>> ...
>> the constructor for field_info is called, but it calls the constructor
>> for field_info defined in ctfread.c rather than dwarf2read.c.
> Tom,
>
> Thanks for tracking this down.  I had just run into the same issue.
> I've pushed the patch below which I believe fixes this issue.
>
> Weimin,
>
> Hopefully you're happy with this fix, I guess if you'd rather see an
> alternative solution then feel free to propose one.

Hi Andrew,

Your fix looks good. Thank you for taking care of it.

Weimin

>
> Thanks,
> Andrew
>
> ---
>
>  From b2caee6aaa78106d7ae3c46dda3a84a325e43a1d Mon Sep 17 00:00:00 2001
> From: Andrew Burgess <andrew.burgess@embecosm.com>
> Date: Mon, 7 Oct 2019 12:34:51 +0100
> Subject: [PATCH] gdb: Rename structures within ctfread.c
>
> Commit:
>
>    commit 30d1f0184953478d14641c495261afd06ebfabac
>    Date:   Mon Oct 7 00:46:52 2019 +0000
>
>        gdb: CTF support
>
> Introduces some structures with names that are already in use within
> GBB, this violates C++'s one-definition rule.  Specifically the
> structures 'nextfield' and 'field_info' are now defined in
> dwarf2read.c and ctfread.c.
>
> This commit renames the new structures (in ctfread.c), adding a 'ctf_'
> prefix.  Maybe we should consider renaming the DWARF versions too in
> the future to avoid accidental conflicts.
>
> gdb/ChangeLog:
>
> 	* ctfread.c (struct nextfield): Renamed to ...
> 	(struct ctf_nextfield): ... this.
> 	(struct field_info): Renamed to ...
> 	(strut ctf_field_info): ... this.
> 	(attach_fields_to_type): Update for renamed structures.
> 	(ctf_add_member_cb): Likewise.
> 	(ctf_add_enum_member_cb): Likewise.
> 	(process_struct_members): Likewise.
> 	(process_enum_type): Likewise.
> ---
>   gdb/ChangeLog | 12 ++++++++++++
>   gdb/ctfread.c | 28 ++++++++++++++--------------
>   2 files changed, 26 insertions(+), 14 deletions(-)
>
> diff --git a/gdb/ctfread.c b/gdb/ctfread.c
> index 3e3bd89d5f1..44ccff62ae3 100644
> --- a/gdb/ctfread.c
> +++ b/gdb/ctfread.c
> @@ -98,17 +98,17 @@ typedef struct ctf_context
>   
>   /* The routines that read and process fields/members of a C struct, union,
>      or enumeration, pass lists of data member fields in an instance of a
> -   field_info structure. It is derived from dwarf2read.c.  */
> +   ctf_field_info structure. It is derived from dwarf2read.c.  */
>   
> -struct nextfield
> +struct ctf_nextfield
>   {
>     struct field field {};
>   };
>   
> -struct field_info
> +struct ctf_field_info
>   {
>     /* List of data member fields.  */
> -  std::vector<struct nextfield> fields;
> +  std::vector<struct ctf_nextfield> fields;
>   
>     /* Context.  */
>     ctf_context_t *cur_context;
> @@ -269,7 +269,7 @@ set_symbol_address (struct objfile *of, struct symbol *sym, const char *name)
>   /* Create the vector of fields, and attach it to TYPE.  */
>   
>   static void
> -attach_fields_to_type (struct field_info *fip, struct type *type)
> +attach_fields_to_type (struct ctf_field_info *fip, struct type *type)
>   {
>     int nfields = fip->fields.size ();
>   
> @@ -284,7 +284,7 @@ attach_fields_to_type (struct field_info *fip, struct type *type)
>     /* Copy the saved-up fields into the field vector.  */
>     for (int i = 0; i < nfields; ++i)
>       {
> -      struct nextfield &field = fip->fields[i];
> +      struct ctf_nextfield &field = fip->fields[i];
>         TYPE_FIELD (type, i) = field.field;
>       }
>   }
> @@ -314,7 +314,7 @@ ctf_init_float_type (struct objfile *objfile,
>   
>   /* Callback to add member NAME to a struct/union type. TID is the type
>      of struct/union member, OFFSET is the offset of member in bits,
> -   and ARG contains the field_info.  */
> +   and ARG contains the ctf_field_info.  */
>   
>   static int
>   ctf_add_member_cb (const char *name,
> @@ -322,9 +322,9 @@ ctf_add_member_cb (const char *name,
>   		   unsigned long offset,
>   		   void *arg)
>   {
> -  struct field_info *fip = (struct field_info *) arg;
> +  struct ctf_field_info *fip = (struct ctf_field_info *) arg;
>     ctf_context_t *ccp = fip->cur_context;
> -  struct nextfield new_field;
> +  struct ctf_nextfield new_field;
>     struct field *fp;
>     struct type *t;
>     uint32_t kind;
> @@ -358,13 +358,13 @@ ctf_add_member_cb (const char *name,
>   }
>   
>   /* Callback to add member NAME of EVAL to an enumeration type.
> -   ARG contains the field_info.  */
> +   ARG contains the ctf_field_info.  */
>   
>   static int
>   ctf_add_enum_member_cb (const char *name, int enum_value, void *arg)
>   {
> -  struct field_info *fip = (struct field_info *) arg;
> -  struct nextfield new_field;
> +  struct ctf_field_info *fip = (struct ctf_field_info *) arg;
> +  struct ctf_nextfield new_field;
>     struct field *fp;
>     ctf_context_t *ccp = fip->cur_context;
>   
> @@ -587,7 +587,7 @@ process_struct_members (ctf_context_t *ccp,
>   			ctf_id_t tid,
>   			struct type *type)
>   {
> -  struct field_info fi;
> +  struct ctf_field_info fi;
>   
>     fi.cur_context = ccp;
>     if (ctf_member_iter (ccp->fp, tid, ctf_add_member_cb, &fi) == CTF_ERR)
> @@ -665,7 +665,7 @@ static void
>   process_enum_type (ctf_context_t *ccp, ctf_id_t tid)
>   {
>     struct type *type;
> -  struct field_info fi;
> +  struct ctf_field_info fi;
>   
>     type = read_enum_type (ccp, tid);
>   


      parent reply	other threads:[~2019-10-07 16:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-03 22:58 Weimin Pan
2019-10-04  1:11 ` Simon Marchi
2019-10-04 21:29   ` Weimin Pan
2019-10-07  9:33 ` Tom de Vries
2019-10-07  9:44   ` Tom de Vries
2019-10-07 12:07   ` Andrew Burgess
2019-10-07 14:58     ` Simon Marchi
2019-10-07 16:08     ` Wei-min Pan [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=66ec0403-849a-476a-38fe-edc80b0eb1af@oracle.com \
    --to=weimin.pan@oracle.com \
    --cc=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox