26#include <unordered_map>
72 std::vector<const reggroup *>::size_type
index;
102 static std::unordered_map<const struct reggroup *,gdbpy_ref<>>
103 gdbpy_reggroup_object_map;
107 if (gdbpy_reggroup_object_map[
reggroup] ==
nullptr)
121 return gdbpy_reggroup_object_map[
reggroup];
159 if (vec.size () <=
regnum)
160 vec.resize ((
regnum + 1),
nullptr);
164 if (vec[
regnum] ==
nullptr)
166 gdbpy_ref <register_descriptor_object> reg
192 return PyUnicode_FromString (
name);
222 const std::vector<const reggroup *> &groups
224 if (iter_obj->
index >= groups.size ())
226 PyErr_SetString (PyExc_StopIteration, _(
"No more groups"));
241 gdb_assert (
gdbarch !=
nullptr);
264 const char *group_name)
269 if (group_name == NULL || *group_name ==
'\0')
276 PyErr_SetString (PyExc_ValueError,
277 _(
"Unknown register group name."));
290 gdb_assert (grp != NULL);
318 PyErr_SetString (PyExc_StopIteration, _(
"No more registers"));
322 const char *
name =
nullptr;
329 if (
name !=
nullptr && *
name !=
'\0')
345 static const char *keywords[] = {
"name", NULL };
373 gdb_assert (pyo_reg_id != NULL);
380 if (reg_name != NULL)
383 strlen (reg_name.get ()));
386 PyErr_SetString (PyExc_ValueError,
"Bad register");
390 else if (PyLong_Check (pyo_reg_id))
400 *reg_num = (int)
value;
404 PyErr_SetString (PyExc_ValueError,
"Bad register");
407 else if (PyObject_IsInstance (pyo_reg_id,
418 PyErr_SetString (PyExc_ValueError,
419 _(
"Invalid Architecture in RegisterDescriptor"));
422 PyErr_SetString (PyExc_TypeError, _(
"Invalid type for register"));
424 gdb_assert (PyErr_Occurred ());
471 METH_VARARGS | METH_KEYWORDS,
472 "registers (name) -> gdb.RegisterDescriptor.\n\
473Return a register descriptor for the register NAME, or None if no register\n\
474with that name exists in this iterator." },
479 PyVarObject_HEAD_INIT (NULL, 0)
480 "gdb.RegisterDescriptorIterator",
499 "GDB architecture register descriptor iterator object",
511 "The name of this register.", NULL },
516 PyVarObject_HEAD_INIT (NULL, 0)
517 "gdb.RegisterDescriptor",
536 "GDB architecture register descriptor object",
549 PyVarObject_HEAD_INIT (NULL, 0)
550 "gdb.RegisterGroupsIterator",
569 "GDB register groups iterator object",
581 "The name of this register group.", NULL },
586 PyVarObject_HEAD_INIT (NULL, 0)
606 "GDB register group object",
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
int gdbarch_register_reggroup_p(struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup)
static int gdbarch_num_cooked_regs(gdbarch *arch)
static const char * register_name(int reg, const char **regs, long num_regs)
gdb::ref_ptr< T, gdbpy_ref_policy< T > > gdbpy_ref
static PyObject * gdbpy_reggroup_iter_next(PyObject *self)
PyObject * gdbpy_new_register_descriptor_iterator(struct gdbarch *gdbarch, const char *group_name)
static PyObject * gdbpy_reggroup_to_string(PyObject *self)
PyTypeObject register_descriptor_object_type
static const registry< gdbarch >::key< gdbpy_register_type > gdbpy_register_object_data
static gdbpy_ref gdbpy_get_reggroup(const reggroup *reggroup)
static PyMethodDef register_descriptor_iterator_object_methods[]
static gdb_PyGetSetDef gdbpy_reggroup_getset[]
static PyObject * gdbpy_reggroup_iter(PyObject *self)
PyTypeObject reggroup_object_type
static PyObject * gdbpy_register_descriptor_iter(PyObject *self)
static gdbpy_ref gdbpy_get_register_descriptor(struct gdbarch *gdbarch, int regnum)
static PyObject * gdbpy_register_descriptor_to_string(PyObject *self)
PyObject * gdbpy_new_reggroup_iterator(struct gdbarch *gdbarch)
std::vector< gdbpy_ref<> > gdbpy_register_type
PyTypeObject reggroup_iterator_object_type
static PyObject * register_descriptor_iter_find(PyObject *self, PyObject *args, PyObject *kw)
bool gdbpy_parse_register_id(struct gdbarch *gdbarch, PyObject *pyo_reg_id, int *reg_num)
static PyObject * gdbpy_register_descriptor_iter_next(PyObject *self)
static PyObject * gdbpy_register_descriptor_name(PyObject *self, void *closure)
static PyObject * gdbpy_reggroup_name(PyObject *self, void *closure)
PyTypeObject register_descriptor_iterator_object_type
static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION gdbpy_initialize_registers()
static gdb_PyGetSetDef gdbpy_register_descriptor_getset[]
int gdb_py_int_as_long(PyObject *obj, long *result)
gdb::unique_xmalloc_ptr< char > gdbpy_obj_to_string(PyObject *obj)
int gdb_pymodule_addobject(PyObject *module, const char *name, PyObject *object)
int gdbpy_is_string(PyObject *obj)
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
#define GDBPY_INITIALIZE_FILE(INIT,...)
static int gdb_PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, const char **keywords,...)
const reggroup * reggroup_find(struct gdbarch *gdbarch, const char *name)
const reggroup *const all_reggroup
const std::vector< const reggroup * > & gdbarch_reggroups(struct gdbarch *gdbarch)
PyObject_HEAD std::vector< constreggroup * >::size_type index
PyObject_HEAD const struct reggroup * reggroup
reggroup(const char *name, enum reggroup_type type)
const char * name() const
PyObject_HEAD const struct reggroup * reggroup
const char * user_reg_map_regnum_to_name(struct gdbarch *gdbarch, int regnum)
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)