garbage. */
this->registers
= (unsigned char *) xmalloc (tdesc->registers_size);
- this->register_status
- = (unsigned char *) xmalloc (tdesc->reg_defs.size ());
+ size_t num_regs = tdesc->reg_defs.size ();
+ m_register_status.reset (new enum register_status[num_regs]);
reset (REG_UNKNOWN);
}
{
if (registers_owned)
free (registers);
- free (register_status);
}
#endif
of garbage. */
memset (this->registers, 0, this->tdesc->registers_size);
#ifndef IN_PROCESS_AGENT
- if (this->register_status != nullptr)
- memset (this->register_status, status, this->tdesc->reg_defs.size ());
+ for (int i = 0; i < this->tdesc->reg_defs.size (); i++)
+ set_register_status (i, status);
#endif
}
memcpy (this->registers, src->registers, src->tdesc->registers_size);
#ifndef IN_PROCESS_AGENT
- if (this->register_status != nullptr && src->register_status != nullptr)
- memcpy (this->register_status, src->register_status,
+ if (m_register_status != nullptr && src->m_register_status != nullptr)
+ memcpy (m_register_status.get (), src->m_register_status.get (),
src->tdesc->reg_defs.size ());
#endif
this->registers_fetched = src->registers_fetched;
{
#ifndef IN_PROCESS_AGENT
gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ());
- if (register_status != nullptr)
- return (enum register_status) (register_status[regnum]);
+ if (m_register_status != nullptr)
+ return m_register_status[regnum];
else
return REG_VALID;
#else
{
#ifndef IN_PROCESS_AGENT
gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ());
- if (register_status != nullptr)
- register_status[regnum] = status;
+ if (m_register_status != nullptr)
+ m_register_status[regnum] = status;
#endif
}
#define GDBSERVER_REGCACHE_H
#include "gdbsupport/common-regcache.h"
+#include <memory>
struct thread_info;
struct target_desc;
bool registers_owned = false;
unsigned char *registers = nullptr;
#ifndef IN_PROCESS_AGENT
- /* See gdbsupport/common-regcache.h. */
- unsigned char *register_status = nullptr;
-
/* Construct a regcache using the register layout described by TDESC.
The regcache dynamically allocates its register buffer. */
/* Copy the contents of SRC into this regcache. */
void copy_from (regcache *src);
+
+private:
+
+#ifndef IN_PROCESS_AGENT
+ /* See gdbsupport/common-regcache.h. */
+ std::unique_ptr<enum register_status[]> m_register_status;
+#endif
};
regcache *get_thread_regcache (thread_info *thread, bool fetch = true);