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
next prev 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