Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Yao Qi <qiyaoltc@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 00/10 v2] Remove regcache::m_readonly_p
Date: Sat, 17 Feb 2018 03:53:00 -0000	[thread overview]
Message-ID: <e11f259af1b304cea5b7722d1df07279@polymtl.ca> (raw)
In-Reply-To: <1517999572-14987-1-git-send-email-yao.qi@linaro.org>

On 2018-02-07 05:32, Yao Qi wrote:
> regcache is used in many places in gdb in different ways, so regcache
> becomes a flat and fat object.  That exposes some unnecessary APIs to
> different part, and some APIs are misused or abused:
> 
>  1) gdbarch methods pseudo_register_read, pseudo_register_read_value,
>  read_pc have a parameter 'regcache *', but these two gdbarch methods
>  only need raw_read* and cooked_read* methods.  So it is better to
>  pass a class which only has raw_read* and cooked_read* methods, and
>  other regcache methods are invisible to each gdbarch implementation.
> 
>  2) target_ops methods to_fetch_registers and to_store_registers have a
>  parameter 'regcache *', but these two target_ops methods only need
>  raw_supply and raw_collect methods, because raw registers are from 
> target
>  layer, pseudo registers are "composed" or "created" by gdbarch.
> 
>  3) jit.c uses regcache in an odd way, and record-full.c should use
>  a simple version regcache instead of an array (see patch 11)
> 
> Beside these api issues, one issue in regcache is that there is no
> type or class for readonly regcache.  We use a flag field m_readonly_p
> to indicate the regcache is readonly or not, so some regcache apis have
> assert that this regcache is or is not readonly.  The better way to do
> this is to create a new class for readonly regcache which doesn't have
> write methods at all.
> 
> This patch series fixes all of the problems above except 2) (I had a
> patch to fix 2 in my tree, but still need more time to polish it.) by
> designing a class hierarchy about regcache, like this,
> 
>                       reg_buffer
>                          ^
>                          |
>                    ------+-----
>                    ^
>                    |
>             readable_regcache
>                  ^
>                  |
>            ------+------
>            ^           ^
>            |           |
>     detached_regcache readonly_detached_regcache
>           ^
>           |
>       regcache
> 
> Class reg_buffer is a simple class, having register contents and status
> (in patch 1).  readable_regcache is an abstract class only having 
> raw_read*
> and cooked_read* methods (in patch 2).  detached_regcache is a class 
> which
> has read and write methods, but it detaches from target, IOW, the
> write doesn't go through.  Class readonly_detached_regcache is the 
> readonly
> regcache, created from regcache::save method.
> 
> This is the v2 of this patch series, v1 can be found
> https://sourceware.org/ml/gdb-patches/2017-12/msg00014.html Some
> changes compared with v1,
> 
>  - Some of the preparatory patches in v1 are already committed,
>  - Rename some classes,
>  - Pass readable_regcache to gdbarch read_pc.  We can pass 
> readable_regcache
>    to gdbarch breakpoint_kind_from_current_state as well, because this
>    gdbarch method doesn't need to write regcache.  The reason I don't
>    that is arm_breakpoint_kind_from_current_state uses a function
>    arm_get_next_pcs_ctor shared between GDB and GDBserver, and I don't
>    propagate the regcache changes to GDBserver at this moment,
> 
> This patch series is pushed to users/qiyao/regcache-split-4-2.  
> Regression
> tested on {x86_64,aarch64}-linux.

Hi Yao,

I did not spot anything fundamentally wrong in the series, though I'm 
not very proficient in this area.  I sent a few minor comments, but 
other than that I'm fine with the series.  It's hard to tell whether 
it's the right design, but I think it improves things by splitting the 
concerns in different classes rather than having one do-it-all class.

Thanks,

Simon


  parent reply	other threads:[~2018-02-17  3:53 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-07 10:33 Yao Qi
2018-02-07 10:33 ` [PATCH 08/10] " Yao Qi
2018-02-07 10:33 ` [PATCH 03/10] Remove regcache_save and regcache_cpy Yao Qi
2018-02-17  2:07   ` Simon Marchi
2018-02-07 10:33 ` [PATCH 10/10] Pass readable_regcache to gdbarch method read_pc Yao Qi
2018-02-07 10:33 ` [PATCH 09/10] Move register_dump to regcache-dump.c Yao Qi
2018-02-17  3:50   ` Simon Marchi
2018-02-21  8:27     ` Yao Qi
2018-02-21 12:57       ` Simon Marchi
2018-02-21 13:59         ` Yao Qi
2018-02-21 14:49           ` Simon Marchi
2018-02-07 10:33 ` [PATCH 07/10] No longer create readonly regcache Yao Qi
2018-02-07 10:33 ` [PATCH 05/10] Class detached_regcache Yao Qi
2018-02-17  3:15   ` Simon Marchi
2018-02-07 10:33 ` [PATCH 02/10] class readable_regcache and pass readable_regcache to gdbarch pseudo_register_read and pseudo_register_read_value Yao Qi
2018-02-07 10:33 ` [PATCH 04/10] Class readonly_detached_regcache Yao Qi
2018-02-07 10:33 ` [PATCH 01/10] Class reg_buffer Yao Qi
2018-02-17  3:53 ` Simon Marchi [this message]
2018-02-21 11:22   ` [PATCH 00/10 v2] Remove regcache::m_readonly_p Yao Qi

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=e11f259af1b304cea5b7722d1df07279@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=qiyaoltc@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