[PATCH 0/7] Regcache: Split out target regcache functionality

Alan Hayward Alan.Hayward@arm.com
Thu Aug 17 08:46:00 GMT 2017


This set of patches splits the existing regcache into a regcache
and a target_regcache subclass.
Doing this will simplify the interactions between a regcache and
the target, and will allow for the writable regcache copies.

A target_regcache is a regcache connected to a target. Reads and
writes of register values are passed through to the target.
A target_regcache cannot be readonly (because this doesn't make
sense).

Meanwhile, a regcache (sometime referred to as a detached regcache)
is not connected to a target. By default it is readonly, but does
not have to be. In addition to the raw registers a regcache also
caches cooked register values. Duplicating a target_regcache will
always result in a detached regcache.

Both regcache and target_regcache support the full set of raw_read,
raw_write, raw_collect, raw_supply, cooked_read, cooked_write
functions and all their variations. A user of a regache does not
need to treat the two types any differently - your regcache just
does the correct thing. For example, on a target_regcache,
raw_write will write to both the cache and the target, but on
a recache it will only write to the cache.

With this set of patches, the regcache for the current thread (as
given by get_current_regcache()), is now a target_regcache, that
will perform exactly the same functionality as the regcache in
the exisiting head.

An earlier plan for this set of patches was that the detached
regcache would not support raw_write, raw_collect, cooked_read,
cooked_write. The problem is many of the target hooks then need
updating to only accept target_regcache. Many of the implementations
of the target hooks then call back into the regcache, causing those
functions in turn to be dependant on the new classes, exploding the
size of the patch. It then become very fiddly/confusing to maintain
which type of regcache is required at any point.

If you want to look at the while series together, I’ve pushed it to:
remotes/origin/users/alahay01/targetregcache

The whole set of patches have been tested on a --enable-targets=all
build with board files unix, native-gdbserver and unittest.exp.


Thanks,
Alan.


More information about the Gdb-patches mailing list