mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Use tag dispatch regcache ctor in regcache_dup
This patch adds a tag dispatch ctor to create read-only regcache from a write-through regcache, also this patch deletes copy ctor and assignment operator. gdb: 2017-04-28 Yao Qi <yao.qi@linaro.org> Pedro Alves <palves@redhat.com> * regcache.c (regcache::regcache): New tag dispatch ctor. (do_cooked_read): Moved above. (regcache_dup): Use the tag dispatch ctor.. * regcache.h (regcache): Declare ctor, delete copy ctor and assignment operator, remove friend regcache_dup.
This commit is contained in:
parent
b421c83cb8
commit
deb1fa3eda
@ -1,3 +1,12 @@
|
||||
2017-04-28 Yao Qi <yao.qi@linaro.org>
|
||||
Pedro Alves <palves@redhat.com>
|
||||
|
||||
* regcache.c (regcache::regcache): New tag dispatch ctor.
|
||||
(do_cooked_read): Moved above.
|
||||
(regcache_dup): Use the tag dispatch ctor..
|
||||
* regcache.h (regcache): Declare ctor, delete copy ctor and
|
||||
assignment operator, remove friend regcache_dup.
|
||||
|
||||
2017-04-28 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* regcache.c (regcache_dup): Assert !src->m_readonly_p and
|
||||
|
@ -209,6 +209,21 @@ regcache::regcache (gdbarch *gdbarch, address_space *aspace_,
|
||||
m_ptid = minus_one_ptid;
|
||||
}
|
||||
|
||||
static enum register_status
|
||||
do_cooked_read (void *src, int regnum, gdb_byte *buf)
|
||||
{
|
||||
struct regcache *regcache = (struct regcache *) src;
|
||||
|
||||
return regcache_cooked_read (regcache, regnum, buf);
|
||||
}
|
||||
|
||||
regcache::regcache (readonly_t, const regcache &src)
|
||||
: regcache (src.arch (), src.aspace (), true)
|
||||
{
|
||||
gdb_assert (!src.m_readonly_p);
|
||||
save (do_cooked_read, (void *) &src);
|
||||
}
|
||||
|
||||
gdbarch *
|
||||
regcache::arch () const
|
||||
{
|
||||
@ -371,14 +386,6 @@ regcache::restore (struct regcache *src)
|
||||
}
|
||||
}
|
||||
|
||||
static enum register_status
|
||||
do_cooked_read (void *src, int regnum, gdb_byte *buf)
|
||||
{
|
||||
struct regcache *regcache = (struct regcache *) src;
|
||||
|
||||
return regcache_cooked_read (regcache, regnum, buf);
|
||||
}
|
||||
|
||||
void
|
||||
regcache_cpy (struct regcache *dst, struct regcache *src)
|
||||
{
|
||||
@ -420,12 +427,7 @@ regcache::cpy_no_passthrough (struct regcache *src)
|
||||
struct regcache *
|
||||
regcache_dup (struct regcache *src)
|
||||
{
|
||||
struct regcache *newbuf;
|
||||
|
||||
gdb_assert (!src->m_readonly_p);
|
||||
newbuf = regcache_xmalloc (src->arch (), get_regcache_aspace (src));
|
||||
newbuf->save (do_cooked_read, src);
|
||||
return newbuf;
|
||||
return new regcache (regcache::readonly, *src);
|
||||
}
|
||||
|
||||
enum register_status
|
||||
|
@ -240,6 +240,15 @@ class regcache
|
||||
: regcache (gdbarch, aspace_, true)
|
||||
{}
|
||||
|
||||
struct readonly_t {};
|
||||
static constexpr readonly_t readonly {};
|
||||
|
||||
/* Create a readonly regcache from a non-readonly regcache. */
|
||||
regcache (readonly_t, const regcache &src);
|
||||
|
||||
regcache (const regcache &) = delete;
|
||||
void operator= (const regcache &) = delete;
|
||||
|
||||
~regcache ()
|
||||
{
|
||||
xfree (m_registers);
|
||||
@ -373,9 +382,6 @@ class regcache
|
||||
|
||||
friend void
|
||||
regcache_cpy (struct regcache *dst, struct regcache *src);
|
||||
|
||||
friend struct regcache *
|
||||
regcache_dup (struct regcache *src);
|
||||
};
|
||||
|
||||
/* Copy/duplicate the contents of a register cache. By default, the
|
||||
|
Loading…
Reference in New Issue
Block a user