Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Sanimir Agovic <sanimir.agovic@intel.com>
Cc: tromey@redhat.com, palves@redhat.com, xdje42@gmail.com,
	gdb-patches@sourceware.org, keven.boell@intel.com
Subject: Re: [PATCH v4 01/13] vla: introduce new bound type abstraction adapt uses
Date: Wed, 18 Dec 2013 03:24:00 -0000	[thread overview]
Message-ID: <20131218032427.GD3493@adacore.com> (raw)
In-Reply-To: <1387282678-3847-2-git-send-email-sanimir.agovic@intel.com>

> The rational behind this patch is to get started to implement the feature
> described in dwarf4 standard (2.19) Static and Dynamic Values of Attributes.
> It adds new BOUND_PROP to store either a constant, exprloc, or reference to
> describe an upper-/lower bound of a subrange. Other than that no new features
> are introduce.
> 
> 2013-10-18  Sanimir Agovic  <sanimir.agovic@intel.com>
>             Keven Boell  <keven.boell@intel.com>
> 
> 	* dwarf2read.c (read_subrange_type): Use struct bound_prop for
> 	declaring high/low bounds and change uses accordingly. Call
> 	create_range_type_1 instead of create_range_type.
> 	* gdbtypes.c (create_range_type_1): New function.
> 	(create_range_type): Convert bounds into struct bound_prop and pass
> 	them to create_range_type_1.
> 	* gdbtypes.h (struct bound_prop): New struct.
> 	(create_range_type_1): New function prototype.
> 	(struct range_bounds): Use struct bound_prop instead of LONGEST for
> 	high/low bounds. Remove low_undefined/high_undefined and adapt all uses.
> 	(TYPE_LOW_BOUND,TYPE_HIGH_BOUND): Adapt macros to refer to the static
> 	part of the bound.
> 	* parse.c (follow_types): Set high bound kind to BOUND_UNDEFINED.

Just a suggestion, which you may choose to ignore.

I think that the _1 suffix is usually used when the function performs
the private portion of a more public routine.  But in this case,
create_range_type_1 is meant to be a public routine, and the _1
suffix is not very explicit.  IMO, what would be ideal would be to
rename the current create_range_type into "create_static_range_type",
and then make create_range_type_1 the new create_range_type. I checked
the GDB tree, and there aren't that many calls to update. If people
prefer, I can even take care of that myself once the patche series
has gone in. Otherwise, another compromise solution is to rename
create_range_type_1 to create_range_type_full (for instance).

> +/* Used to store a dynamic property.  */
> +
> +struct dynamic_prop
> +{
> +  /* Determine which field of the union dynamic_prop.data is used.  */
> +  enum
> +  {
> +    PROP_UNDEFINED,
> +    PROP_CONST,
> +    PROP_LOCEXPR,
> +    PROP_LOCLIST
> +  } kind;
> +
> +  /* Storage for dynamic or static value.  */
> +  union data
> +  {
> +    LONGEST const_val;
> +    void *baton;
> +  } data;

Would you mind documenting each enumeration and union field?

> +#define TYPE_LOW_BOUND(range_type) \
> +  TYPE_RANGE_DATA(range_type)->low.data.const_val
> +#define TYPE_HIGH_BOUND(range_type) \
> +  TYPE_RANGE_DATA(range_type)->high.data.const_val
>  #define TYPE_LOW_BOUND_UNDEFINED(range_type) \
> -   TYPE_RANGE_DATA(range_type)->low_undefined
> +  (TYPE_RANGE_DATA(range_type)->low.kind == PROP_UNDEFINED)
>  #define TYPE_HIGH_BOUND_UNDEFINED(range_type) \
> -   TYPE_RANGE_DATA(range_type)->high_undefined
> +  (TYPE_RANGE_DATA(range_type)->high.kind == PROP_UNDEFINED)
> +#define TYPE_HIGH_BOUND_KIND(range_type) \
> +  TYPE_RANGE_DATA(range_type)->high.kind
> +#define TYPE_LOW_BOUND_KIND(range_type) \
> +  TYPE_RANGE_DATA(range_type)->low.kind

For the record, I considered the idea of adding asserts in there,
in order to get an internal error instead of an odd bug when accessing
the wrong field. But this requires us making these macros read-only
accessors, rather than read-write. A quick experiment showed that
some units are using them to write some fields, and so we would need
to audit that first. It's a desirable change on its own, IMO, regardless
of whether we thinking adding the assert is desirable or not, but I don't
want to put the burden on this patch series, which seems already quite
sizeable on its own already.

-- 
Joel


  reply	other threads:[~2013-12-18  3:24 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-17 12:18 [PATCH v4 00/13] C99 variable length array support Sanimir Agovic
2013-12-17 12:18 ` [PATCH v4 02/13] type: add c99 " Sanimir Agovic
2014-01-15 21:07   ` Tom Tromey
2014-01-16 17:01     ` Agovic, Sanimir
2013-12-17 12:18 ` [PATCH v4 01/13] vla: introduce new bound type abstraction adapt uses Sanimir Agovic
2013-12-18  3:24   ` Joel Brobecker [this message]
2013-12-18 15:59     ` Agovic, Sanimir
2014-01-15 21:39       ` Tom Tromey
2014-01-16  2:45         ` Joel Brobecker
2014-01-16 17:03         ` Agovic, Sanimir
2014-01-16 17:39           ` Tom Tromey
2013-12-17 12:18 ` [PATCH v4 04/13] vla: enable sizeof operator for indirection Sanimir Agovic
2014-01-15 21:28   ` Tom Tromey
2014-01-16 17:02     ` Agovic, Sanimir
2013-12-17 12:18 ` [PATCH v4 05/13] vla: update type from newly created value Sanimir Agovic
2013-12-18  3:44   ` Joel Brobecker
2013-12-17 12:18 ` [PATCH v4 07/13] vla: support for DW_AT_count Sanimir Agovic
2013-12-17 12:18 ` [PATCH v4 06/13] vla: print "variable length" for unresolved dynamic bounds Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 13/13] test: add mi vla test Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 12/13] test: basic c99 vla tests for C primitives Sanimir Agovic
2014-01-15 21:39   ` Tom Tromey
2014-01-16 17:02     ` Agovic, Sanimir
2014-01-16 17:33       ` Tom Tromey
2014-01-17 13:36         ` Agovic, Sanimir
2014-01-20  5:47           ` Tom Tromey
2014-01-20  9:32             ` Agovic, Sanimir
2013-12-17 12:19 ` [PATCH v4 11/13] test: evaluate pointers to C99 vla correctly Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 10/13] test: multi-dimensional c99 vla Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 08/13] vla: resolve dynamic bounds if value contents is a constant byte-sequence Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 09/13] test: cover subranges with present DW_AT_count attribute Sanimir Agovic
2013-12-17 12:19 ` [PATCH v4 03/13] vla: enable sizeof operator to work with variable length arrays Sanimir Agovic
2014-01-15 21:24   ` Tom Tromey
2013-12-18  3:01 ` [PATCH v4 00/13] C99 variable length array support Joel Brobecker
2014-01-15 21:41 ` Tom Tromey
2014-01-16 17:05   ` Agovic, Sanimir
2014-01-16 22:11     ` Tom Tromey

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=20131218032427.GD3493@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=keven.boell@intel.com \
    --cc=palves@redhat.com \
    --cc=sanimir.agovic@intel.com \
    --cc=tromey@redhat.com \
    --cc=xdje42@gmail.com \
    /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