Use std::unique_ptr in reg_buffer
Using std::unique_ptr allows to remove the manual xfree in the destructor. If I understand correctly, using the () after the new operator will make sure the allocated objects will be value initialized, which for scalars means they are zero-initialized. So it should have the same behavior as XCNEWVEC. gdb/ChangeLog: * regcache.h (reg_buffer) <~reg_buffer>: Use default destructor. <m_registers, m_register_status>: Change type to std::unique_ptr. * regcache.c (reg_buffer::reg_buffer): Use new instead of XCNEWVEC.
This commit is contained in:
parent
aac0d564ce
commit
835dcf9261
3 changed files with 21 additions and 16 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2018-06-09 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
|
* regcache.h (reg_buffer) <~reg_buffer>: Use default destructor.
|
||||||
|
<m_registers, m_register_status>: Change type to
|
||||||
|
std::unique_ptr.
|
||||||
|
* regcache.c (reg_buffer::reg_buffer): Use new instead of
|
||||||
|
XCNEWVEC.
|
||||||
|
|
||||||
2018-06-09 Simon Marchi <simon.marchi@ericsson.com>
|
2018-06-09 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* common/common-regcache.h (enum register_status): Add
|
* common/common-regcache.h (enum register_status): Add
|
||||||
|
|
|
@ -185,15 +185,15 @@ reg_buffer::reg_buffer (gdbarch *gdbarch, bool has_pseudo)
|
||||||
|
|
||||||
if (has_pseudo)
|
if (has_pseudo)
|
||||||
{
|
{
|
||||||
m_registers = XCNEWVEC (gdb_byte, m_descr->sizeof_cooked_registers);
|
m_registers.reset (new gdb_byte[m_descr->sizeof_cooked_registers] ());
|
||||||
m_register_status
|
m_register_status.reset
|
||||||
= XCNEWVEC (register_status, m_descr->nr_cooked_registers);
|
(new register_status[m_descr->nr_cooked_registers] ());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_registers = XCNEWVEC (gdb_byte, m_descr->sizeof_raw_registers);
|
m_registers.reset (new gdb_byte[m_descr->sizeof_raw_registers] ());
|
||||||
m_register_status
|
m_register_status.reset
|
||||||
= XCNEWVEC (register_status, gdbarch_num_regs (gdbarch));
|
(new register_status[gdbarch_num_regs (gdbarch)] ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ private:
|
||||||
gdb_byte *
|
gdb_byte *
|
||||||
reg_buffer::register_buffer (int regnum) const
|
reg_buffer::register_buffer (int regnum) const
|
||||||
{
|
{
|
||||||
return m_registers + m_descr->register_offset[regnum];
|
return m_registers.get () + m_descr->register_offset[regnum];
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -273,8 +273,8 @@ reg_buffer::save (regcache_cooked_read_ftype *cooked_read,
|
||||||
/* It should have pseudo registers. */
|
/* It should have pseudo registers. */
|
||||||
gdb_assert (m_has_pseudo);
|
gdb_assert (m_has_pseudo);
|
||||||
/* Clear the dest. */
|
/* Clear the dest. */
|
||||||
memset (m_registers, 0, m_descr->sizeof_cooked_registers);
|
memset (m_registers.get (), 0, m_descr->sizeof_cooked_registers);
|
||||||
memset (m_register_status, REG_UNKNOWN, m_descr->nr_cooked_registers);
|
memset (m_register_status.get (), REG_UNKNOWN, m_descr->nr_cooked_registers);
|
||||||
/* Copy over any registers (identified by their membership in the
|
/* Copy over any registers (identified by their membership in the
|
||||||
save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
|
save_reggroup) and mark them as valid. The full [0 .. gdbarch_num_regs +
|
||||||
gdbarch_num_pseudo_regs) range is checked since some architectures need
|
gdbarch_num_pseudo_regs) range is checked since some architectures need
|
||||||
|
|
|
@ -153,11 +153,8 @@ public:
|
||||||
buffer. */
|
buffer. */
|
||||||
enum register_status get_register_status (int regnum) const;
|
enum register_status get_register_status (int regnum) const;
|
||||||
|
|
||||||
virtual ~reg_buffer ()
|
virtual ~reg_buffer () = default;
|
||||||
{
|
|
||||||
xfree (m_registers);
|
|
||||||
xfree (m_register_status);
|
|
||||||
}
|
|
||||||
protected:
|
protected:
|
||||||
/* Assert on the range of REGNUM. */
|
/* Assert on the range of REGNUM. */
|
||||||
void assert_regnum (int regnum) const;
|
void assert_regnum (int regnum) const;
|
||||||
|
@ -175,9 +172,9 @@ protected:
|
||||||
|
|
||||||
bool m_has_pseudo;
|
bool m_has_pseudo;
|
||||||
/* The register buffers. */
|
/* The register buffers. */
|
||||||
gdb_byte *m_registers;
|
std::unique_ptr<gdb_byte[]> m_registers;
|
||||||
/* Register cache status. */
|
/* Register cache status. */
|
||||||
register_status *m_register_status;
|
std::unique_ptr<register_status[]> m_register_status;
|
||||||
|
|
||||||
friend class regcache;
|
friend class regcache;
|
||||||
friend class detached_regcache;
|
friend class detached_regcache;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue