X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Freggroups.h;h=e4d97637e3d1e3dd234d1afeb9652f4b460a9a27;hb=def2803789208a617c429b5dcf2026decb25ce0c;hp=50f0274fd728889a84349fda633c789ce019b1cc;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=binutils-gdb.git diff --git a/gdb/reggroups.h b/gdb/reggroups.h index 50f0274fd72..e4d97637e3d 100644 --- a/gdb/reggroups.h +++ b/gdb/reggroups.h @@ -1,6 +1,6 @@ /* Register groupings for GDB, the GNU debugger. - Copyright (C) 2002-2013 Free Software Foundation, Inc. + Copyright (C) 2002-2023 Free Software Foundation, Inc. Contributed by Red Hat. @@ -23,40 +23,79 @@ #define REGGROUPS_H struct gdbarch; -struct reggroup; -enum reggroup_type { USER_REGGROUP, INTERNAL_REGGROUP }; +/* The different register group types. */ +enum reggroup_type { + /* Used for any register group that should be visible to the user. + Architecture specific register groups, as well as most of the default + groups will have this type. */ + USER_REGGROUP, + + /* Used for a few groups that GDB uses while managing machine state. + These groups are mostly hidden from the user. */ + INTERNAL_REGGROUP +}; + +/* Individual register group. */ + +struct reggroup +{ + /* Create a new register group object. The NAME is not owned by the new + reggroup object, so must outlive the object. */ + reggroup (const char *name, enum reggroup_type type) + : m_name (name), + m_type (type) + { /* Nothing. */ } + + /* Return the name for this register group. */ + const char *name () const + { return m_name; } + + /* Return the type of this register group. */ + enum reggroup_type type () const + { return m_type; } + +private: + /* The name of this register group. */ + const char *m_name; + + /* The type of this register group. */ + enum reggroup_type m_type; +}; /* Pre-defined, user visible, register groups. */ -extern struct reggroup *const general_reggroup; -extern struct reggroup *const float_reggroup; -extern struct reggroup *const system_reggroup; -extern struct reggroup *const vector_reggroup; -extern struct reggroup *const all_reggroup; +extern const reggroup *const general_reggroup; +extern const reggroup *const float_reggroup; +extern const reggroup *const system_reggroup; +extern const reggroup *const vector_reggroup; +extern const reggroup *const all_reggroup; /* Pre-defined, internal, register groups. */ -extern struct reggroup *const save_reggroup; -extern struct reggroup *const restore_reggroup; +extern const reggroup *const save_reggroup; +extern const reggroup *const restore_reggroup; /* Create a new local register group. */ -extern struct reggroup *reggroup_new (const char *name, - enum reggroup_type type); +extern const reggroup *reggroup_new (const char *name, + enum reggroup_type type); -/* Add a register group (with attribute values) to the pre-defined list. */ -extern void reggroup_add (struct gdbarch *gdbarch, struct reggroup *group); +/* Create a new register group allocated onto the gdbarch obstack. */ +extern const reggroup *reggroup_gdbarch_new (struct gdbarch *gdbarch, + const char *name, + enum reggroup_type type); -/* Register group attributes. */ -extern const char *reggroup_name (struct reggroup *reggroup); -extern enum reggroup_type reggroup_type (struct reggroup *reggroup); +/* Add register group GROUP to the list of register groups for GDBARCH. */ +extern void reggroup_add (struct gdbarch *gdbarch, const reggroup *group); -/* Interator for the architecture's register groups. Pass in NULL, - returns the first group. Pass in a group, returns the next group, - or NULL when the last group is reached. */ -extern struct reggroup *reggroup_next (struct gdbarch *gdbarch, - struct reggroup *last); +/* Return the list of all register groups for GDBARCH. */ +extern const std::vector & + gdbarch_reggroups (struct gdbarch *gdbarch); + +/* Find a reggroup by name. */ +extern const reggroup *reggroup_find (struct gdbarch *gdbarch, + const char *name); /* Is REGNUM a member of REGGROUP? */ extern int default_register_reggroup_p (struct gdbarch *gdbarch, int regnum, - struct reggroup *reggroup); + const struct reggroup *reggroup); #endif