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>
|
2017-04-28 Yao Qi <yao.qi@linaro.org>
|
||||||
|
|
||||||
* regcache.c (regcache_dup): Assert !src->m_readonly_p and
|
* 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;
|
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 *
|
gdbarch *
|
||||||
regcache::arch () const
|
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
|
void
|
||||||
regcache_cpy (struct regcache *dst, struct regcache *src)
|
regcache_cpy (struct regcache *dst, struct regcache *src)
|
||||||
{
|
{
|
||||||
@ -420,12 +427,7 @@ regcache::cpy_no_passthrough (struct regcache *src)
|
|||||||
struct regcache *
|
struct regcache *
|
||||||
regcache_dup (struct regcache *src)
|
regcache_dup (struct regcache *src)
|
||||||
{
|
{
|
||||||
struct regcache *newbuf;
|
return new regcache (regcache::readonly, *src);
|
||||||
|
|
||||||
gdb_assert (!src->m_readonly_p);
|
|
||||||
newbuf = regcache_xmalloc (src->arch (), get_regcache_aspace (src));
|
|
||||||
newbuf->save (do_cooked_read, src);
|
|
||||||
return newbuf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum register_status
|
enum register_status
|
||||||
|
@ -240,6 +240,15 @@ class regcache
|
|||||||
: regcache (gdbarch, aspace_, true)
|
: 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 ()
|
~regcache ()
|
||||||
{
|
{
|
||||||
xfree (m_registers);
|
xfree (m_registers);
|
||||||
@ -373,9 +382,6 @@ class regcache
|
|||||||
|
|
||||||
friend void
|
friend void
|
||||||
regcache_cpy (struct regcache *dst, struct regcache *src);
|
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
|
/* Copy/duplicate the contents of a register cache. By default, the
|
||||||
|
Loading…
Reference in New Issue
Block a user