Introduce gdbarch_num_cooked_regs

The expression

  gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch)

is used quite often to find the number of cooked registers (raw + pseudo
registers).  This patch introduces gdbarch_num_cooked_regs, which does
the equivalent.  It substantially reduces required wrapping in some
places, so should improve readability.

There is a for loop in m68hc11_frame_unwind_cache that had iterated
until (the equivalent of) gdbarch_num_cooked_regs (gdbarch) - 1.  During
review, we concluded that this is most likely an off-by-one mistake, so
I replaced it with gdbarch_num_cooked_regs (gdbarch).

gdb/ChangeLog:

	* gdbarch.sh (gdbarch_num_cooked_regs): New.
	* gdbarch.h: Re-generate.
	* ax-gdb.c (gen_expr): Use gdbarch_num_cooked_regs.
	* dwarf2-frame.c (dwarf2_frame_cache): Likewise.
	* eval.c (evaluate_subexp_standard): Likewise.
	* findvar.c (value_of_register): Likewise.
	(value_of_register_lazy): Likewise.
	(address_from_register): Likewise.
	* frame.c (get_frame_register_bytes): Likewise.
	* gdbarch-selftests.c (register_to_value_test): Likewise.
	* h8300-tdep.c (h8300_register_type): Likewise.
	* i386-tdep.c (i386_dbx_reg_to_regnum): Likewise.
	(i386_svr4_reg_to_regnum): Likewise.
	* infcmd.c (default_print_registers_info): Likewise.
	(registers_info): Likewise.
	(print_vector_info): Likewise.
	(default_print_float_info): Likewise.
	* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
	* mdebugread.c (mdebug_reg_to_regnum): Likewise.
	* mi/mi-main.c (mi_cmd_data_list_register_names): Likewise.
	(mi_cmd_data_list_changed_registers): Likewise.
	(mi_cmd_data_list_register_values): Likewise.
	(mi_cmd_data_write_register_values): Likewise.
	(mi_cmd_trace_frame_collected): Likewise.
	* mips-tdep.c (print_gp_register_row): Likewise.
	(mips_print_registers_info): Likewise.
	* nds32-tdep.c (nds32_gdbarch_init): Likewise.
	* regcache.c (init_regcache_descr): Likewise.
	(register_size): Likewise.
	(register_dump::dump): Likewise.
	(cooked_read_test): Likewise.
	(cooked_write_test): Likewise.
	* rs6000-tdep.c (rs6000_register_sim_regno): Likewise.
	(rs6000_gdbarch_init): Likewise.
	* stabsread.c (stab_reg_to_regnum): Likewise.
	* stack.c (info_frame_command): Likewise.
	* target-descriptions.c (tdesc_register_name): Likewise.
	* trad-frame.c (trad_frame_alloc_saved_regs): Likewise.
	* tui/tui-regs.c (tui_show_register_group): Likewise.
	* user-regs.c (user_reg_map_name_to_regnum): Likewise.
	(user_reg_map_regnum_to_name): Likewise.
	(value_of_user_reg): Likewise.
	(maintenance_print_user_registers): Likewise.
	* xtensa-tdep.c (xtensa_find_register_by_name): Likewise.
	(xtensa_register_name): Likewise.
	(xtensa_register_type): Likewise.
	(xtensa_reg_to_regnum): Likewise.
	(xtensa_pseudo_register_read): Likewise.
	(xtensa_pseudo_register_write): Likewise.
This commit is contained in:
Simon Marchi 2018-10-21 22:29:21 -04:00 committed by Simon Marchi
parent 925047fed0
commit f6efe3f842
26 changed files with 122 additions and 119 deletions

View File

@ -1,3 +1,55 @@
2018-10-21 Simon Marchi <simon.marchi@ericsson.com>
* gdbarch.sh (gdbarch_num_cooked_regs): New.
* gdbarch.h: Re-generate.
* ax-gdb.c (gen_expr): Use gdbarch_num_cooked_regs.
* dwarf2-frame.c (dwarf2_frame_cache): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* findvar.c (value_of_register): Likewise.
(value_of_register_lazy): Likewise.
(address_from_register): Likewise.
* frame.c (get_frame_register_bytes): Likewise.
* gdbarch-selftests.c (register_to_value_test): Likewise.
* h8300-tdep.c (h8300_register_type): Likewise.
* i386-tdep.c (i386_dbx_reg_to_regnum): Likewise.
(i386_svr4_reg_to_regnum): Likewise.
* infcmd.c (default_print_registers_info): Likewise.
(registers_info): Likewise.
(print_vector_info): Likewise.
(default_print_float_info): Likewise.
* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
* mdebugread.c (mdebug_reg_to_regnum): Likewise.
* mi/mi-main.c (mi_cmd_data_list_register_names): Likewise.
(mi_cmd_data_list_changed_registers): Likewise.
(mi_cmd_data_list_register_values): Likewise.
(mi_cmd_data_write_register_values): Likewise.
(mi_cmd_trace_frame_collected): Likewise.
* mips-tdep.c (print_gp_register_row): Likewise.
(mips_print_registers_info): Likewise.
* nds32-tdep.c (nds32_gdbarch_init): Likewise.
* regcache.c (init_regcache_descr): Likewise.
(register_size): Likewise.
(register_dump::dump): Likewise.
(cooked_read_test): Likewise.
(cooked_write_test): Likewise.
* rs6000-tdep.c (rs6000_register_sim_regno): Likewise.
(rs6000_gdbarch_init): Likewise.
* stabsread.c (stab_reg_to_regnum): Likewise.
* stack.c (info_frame_command): Likewise.
* target-descriptions.c (tdesc_register_name): Likewise.
* trad-frame.c (trad_frame_alloc_saved_regs): Likewise.
* tui/tui-regs.c (tui_show_register_group): Likewise.
* user-regs.c (user_reg_map_name_to_regnum): Likewise.
(user_reg_map_regnum_to_name): Likewise.
(value_of_user_reg): Likewise.
(maintenance_print_user_registers): Likewise.
* xtensa-tdep.c (xtensa_find_register_by_name): Likewise.
(xtensa_register_name): Likewise.
(xtensa_register_type): Likewise.
(xtensa_reg_to_regnum): Likewise.
(xtensa_pseudo_register_read): Likewise.
(xtensa_pseudo_register_write): Likewise.
2018-10-21 Simon Marchi <simon.marchi@polymtl.ca> 2018-10-21 Simon Marchi <simon.marchi@polymtl.ca>
* amd64-tdep.c (amd64_pseudo_register_read_value): Use * amd64-tdep.c (amd64_pseudo_register_read_value): Use

View File

@ -2036,8 +2036,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
_("Register $%s not available"), name); _("Register $%s not available"), name);
/* No support for tracing user registers yet. */ /* No support for tracing user registers yet. */
if (reg >= gdbarch_num_regs (ax->gdbarch) if (reg >= gdbarch_num_cooked_regs (ax->gdbarch))
+ gdbarch_num_pseudo_regs (ax->gdbarch))
error (_("'%s' is a user-register; " error (_("'%s' is a user-register; "
"GDB cannot yet trace user-register contents."), "GDB cannot yet trace user-register contents."),
name); name);

View File

@ -972,8 +972,7 @@ static struct dwarf2_frame_cache *
dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache) dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
{ {
struct gdbarch *gdbarch = get_frame_arch (this_frame); struct gdbarch *gdbarch = get_frame_arch (this_frame);
const int num_regs = gdbarch_num_regs (gdbarch) const int num_regs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
struct dwarf2_frame_cache *cache; struct dwarf2_frame_cache *cache;
struct dwarf2_fde *fde; struct dwarf2_fde *fde;
CORE_ADDR entry_pc; CORE_ADDR entry_pc;

View File

@ -1395,8 +1395,7 @@ evaluate_subexp_standard (struct type *expect_type,
So for these registers, we fetch the register value regardless So for these registers, we fetch the register value regardless
of the evaluation mode. */ of the evaluation mode. */
if (noside == EVAL_AVOID_SIDE_EFFECTS if (noside == EVAL_AVOID_SIDE_EFFECTS
&& regno < gdbarch_num_regs (exp->gdbarch) && regno < gdbarch_num_cooked_regs (exp->gdbarch))
+ gdbarch_num_pseudo_regs (exp->gdbarch))
val = value_zero (register_type (exp->gdbarch, regno), not_lval); val = value_zero (register_type (exp->gdbarch, regno), not_lval);
else else
val = value_of_register (regno, get_selected_frame (NULL)); val = value_of_register (regno, get_selected_frame (NULL));

View File

@ -267,8 +267,7 @@ value_of_register (int regnum, struct frame_info *frame)
/* User registers lie completely outside of the range of normal /* User registers lie completely outside of the range of normal
registers. Catch them early so that the target never sees them. */ registers. Catch them early so that the target never sees them. */
if (regnum >= gdbarch_num_regs (gdbarch) if (regnum >= gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
return value_of_user_reg (regnum, frame); return value_of_user_reg (regnum, frame);
reg_val = value_of_register_lazy (frame, regnum); reg_val = value_of_register_lazy (frame, regnum);
@ -287,8 +286,7 @@ value_of_register_lazy (struct frame_info *frame, int regnum)
struct value *reg_val; struct value *reg_val;
struct frame_info *next_frame; struct frame_info *next_frame;
gdb_assert (regnum < (gdbarch_num_regs (gdbarch) gdb_assert (regnum < gdbarch_num_cooked_regs (gdbarch));
+ gdbarch_num_pseudo_regs (gdbarch)));
gdb_assert (frame != NULL); gdb_assert (frame != NULL);
@ -957,8 +955,7 @@ address_from_register (int regnum, struct frame_info *frame)
struct type *type = builtin_type (gdbarch)->builtin_data_ptr; struct type *type = builtin_type (gdbarch)->builtin_data_ptr;
struct value *value; struct value *value;
CORE_ADDR result; CORE_ADDR result;
int regnum_max_excl = (gdbarch_num_regs (gdbarch) int regnum_max_excl = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
if (regnum < 0 || regnum >= regnum_max_excl) if (regnum < 0 || regnum >= regnum_max_excl)
error (_("Invalid register #%d, expecting 0 <= # < %d"), regnum, error (_("Invalid register #%d, expecting 0 <= # < %d"), regnum,

View File

@ -1416,7 +1416,7 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
/* Ensure that we will not read beyond the end of the register file. /* Ensure that we will not read beyond the end of the register file.
This can only ever happen if the debug information is bad. */ This can only ever happen if the debug information is bad. */
maxsize = -offset; maxsize = -offset;
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
for (i = regnum; i < numregs; i++) for (i = regnum; i < numregs; i++)
{ {
int thissize = register_size (gdbarch, i); int thissize = register_size (gdbarch, i);

View File

@ -116,8 +116,7 @@ register_to_value_test (struct gdbarch *gdbarch)
= make_scoped_restore (&inferior_ptid, mock_ptid); = make_scoped_restore (&inferior_ptid, mock_ptid);
struct frame_info *frame = get_current_frame (); struct frame_info *frame = get_current_frame ();
const int num_regs = (gdbarch_num_regs (gdbarch) const int num_regs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
/* Test gdbarch methods register_to_value and value_to_register with /* Test gdbarch methods register_to_value and value_to_register with
different combinations of register numbers and types. */ different combinations of register numbers and types. */

View File

@ -1806,4 +1806,12 @@ extern unsigned int gdbarch_debug;
extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file); extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
/* Return the number of cooked registers (raw + pseudo) for ARCH. */
static inline int
gdbarch_num_cooked_regs (gdbarch *arch)
{
return gdbarch_num_regs (arch) + gdbarch_num_pseudo_regs (arch);
}
#endif #endif

View File

@ -1632,6 +1632,14 @@ extern unsigned int gdbarch_debug;
extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file); extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
/* Return the number of cooked registers (raw + pseudo) for ARCH. */
static inline int
gdbarch_num_cooked_regs (gdbarch *arch)
{
return gdbarch_num_regs (arch) + gdbarch_num_pseudo_regs (arch);
}
#endif #endif
EOF EOF
exec 1>&2 exec 1>&2

View File

@ -1128,8 +1128,7 @@ h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
static struct type * static struct type *
h8300_register_type (struct gdbarch *gdbarch, int regno) h8300_register_type (struct gdbarch *gdbarch, int regno)
{ {
if (regno < 0 || regno >= gdbarch_num_regs (gdbarch) if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
_("h8300_register_type: illegal register number %d"), _("h8300_register_type: illegal register number %d"),
regno); regno);

View File

@ -518,7 +518,7 @@ i386_dbx_reg_to_regnum (struct gdbarch *gdbarch, int reg)
} }
/* This will hopefully provoke a warning. */ /* This will hopefully provoke a warning. */
return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); return gdbarch_num_cooked_regs (gdbarch);
} }
/* Convert SVR4 DWARF register number REG to the appropriate register number /* Convert SVR4 DWARF register number REG to the appropriate register number
@ -575,7 +575,7 @@ i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
int regnum = i386_svr4_dwarf_reg_to_regnum (gdbarch, reg); int regnum = i386_svr4_dwarf_reg_to_regnum (gdbarch, reg);
if (regnum == -1) if (regnum == -1)
return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); return gdbarch_num_cooked_regs (gdbarch);
return regnum; return regnum;
} }

View File

@ -2387,8 +2387,7 @@ default_print_registers_info (struct gdbarch *gdbarch,
int regnum, int print_all) int regnum, int print_all)
{ {
int i; int i;
const int numregs = gdbarch_num_regs (gdbarch) const int numregs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
for (i = 0; i < numregs; i++) for (i = 0; i < numregs; i++)
{ {
@ -2475,8 +2474,7 @@ registers_info (const char *addr_exp, int fpregs)
/* User registers lie completely outside of the range of /* User registers lie completely outside of the range of
normal registers. Catch them early so that the target normal registers. Catch them early so that the target
never sees them. */ never sees them. */
if (regnum >= gdbarch_num_regs (gdbarch) if (regnum >= gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
{ {
struct value *regval = value_of_user_reg (regnum, frame); struct value *regval = value_of_user_reg (regnum, frame);
const char *regname = user_reg_map_regnum_to_name (gdbarch, const char *regname = user_reg_map_regnum_to_name (gdbarch,
@ -2515,8 +2513,7 @@ registers_info (const char *addr_exp, int fpregs)
int regnum; int regnum;
for (regnum = 0; for (regnum = 0;
regnum < gdbarch_num_regs (gdbarch) regnum < gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++) regnum++)
{ {
if (gdbarch_register_reggroup_p (gdbarch, regnum, group)) if (gdbarch_register_reggroup_p (gdbarch, regnum, group))
@ -2558,10 +2555,7 @@ print_vector_info (struct ui_file *file,
int regnum; int regnum;
int printed_something = 0; int printed_something = 0;
for (regnum = 0; for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
if (gdbarch_register_reggroup_p (gdbarch, regnum, vector_reggroup)) if (gdbarch_register_reggroup_p (gdbarch, regnum, vector_reggroup))
{ {
@ -3110,10 +3104,7 @@ default_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
int regnum; int regnum;
int printed_something = 0; int printed_something = 0;
for (regnum = 0; for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
if (gdbarch_register_reggroup_p (gdbarch, regnum, float_reggroup)) if (gdbarch_register_reggroup_p (gdbarch, regnum, float_reggroup))
{ {

View File

@ -854,10 +854,7 @@ m68hc11_frame_unwind_cache (struct frame_info *this_frame,
/* Adjust all the saved registers so that they contain addresses and not /* Adjust all the saved registers so that they contain addresses and not
offsets. */ offsets. */
for (i = 0; for (i = 0; i < gdbarch_num_cooked_regs (gdbarch); i++)
i < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch) - 1;
i++)
if (trad_frame_addr_p (info->saved_regs, i)) if (trad_frame_addr_p (info->saved_regs, i))
{ {
info->saved_regs[i].addr += this_base; info->saved_regs[i].addr += this_base;

View File

@ -537,13 +537,9 @@ mdebug_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
{ {
int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym)); int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
if (regno < 0 if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
|| regno >= (gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch)))
{ {
reg_value_complaint (regno, reg_value_complaint (regno, gdbarch_num_cooked_regs (gdbarch),
gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch),
SYMBOL_PRINT_NAME (sym)); SYMBOL_PRINT_NAME (sym));
regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless. */ regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless. */

View File

@ -890,7 +890,7 @@ mi_cmd_data_list_register_names (const char *command, char **argv, int argc)
debugged. */ debugged. */
gdbarch = get_current_arch (); gdbarch = get_current_arch ();
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
ui_out_emit_list list_emitter (uiout, "register-names"); ui_out_emit_list list_emitter (uiout, "register-names");
@ -949,7 +949,7 @@ mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
debugged. */ debugged. */
gdbarch = this_regs->arch (); gdbarch = this_regs->arch ();
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
ui_out_emit_list list_emitter (uiout, "changed-registers"); ui_out_emit_list list_emitter (uiout, "changed-registers");
@ -1076,7 +1076,7 @@ mi_cmd_data_list_register_values (const char *command, char **argv, int argc)
frame = get_selected_frame (NULL); frame = get_selected_frame (NULL);
gdbarch = get_frame_arch (frame); gdbarch = get_frame_arch (frame);
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
ui_out_emit_list list_emitter (uiout, "register-values"); ui_out_emit_list list_emitter (uiout, "register-values");
@ -1164,7 +1164,7 @@ mi_cmd_data_write_register_values (const char *command, char **argv, int argc)
regcache = get_current_regcache (); regcache = get_current_regcache ();
gdbarch = regcache->arch (); gdbarch = regcache->arch ();
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
if (argc == 0) if (argc == 0)
error (_("-data-write-register-values: Usage: -data-write-register-" error (_("-data-write-register-values: Usage: -data-write-register-"
@ -2638,7 +2638,7 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
frame = get_selected_frame (NULL); frame = get_selected_frame (NULL);
gdbarch = get_frame_arch (frame); gdbarch = get_frame_arch (frame);
numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); numregs = gdbarch_num_cooked_regs (gdbarch);
for (regnum = 0; regnum < numregs; regnum++) for (regnum = 0; regnum < numregs; regnum++)
{ {

View File

@ -6497,8 +6497,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
/* For GP registers, we print a separate row of names above the vals. */ /* For GP registers, we print a separate row of names above the vals. */
for (col = 0, regnum = start_regnum; for (col = 0, regnum = start_regnum;
col < ncols && regnum < gdbarch_num_regs (gdbarch) col < ncols && regnum < gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++) regnum++)
{ {
if (*gdbarch_register_name (gdbarch, regnum) == '\0') if (*gdbarch_register_name (gdbarch, regnum) == '\0')
@ -6536,8 +6535,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
/* Now print the values in hex, 4 or 8 to the row. */ /* Now print the values in hex, 4 or 8 to the row. */
for (col = 0, regnum = start_regnum; for (col = 0, regnum = start_regnum;
col < ncols && regnum < gdbarch_num_regs (gdbarch) col < ncols && regnum < gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++) regnum++)
{ {
if (*gdbarch_register_name (gdbarch, regnum) == '\0') if (*gdbarch_register_name (gdbarch, regnum) == '\0')
@ -6603,8 +6601,7 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
/* Do all (or most) registers. */ /* Do all (or most) registers. */
{ {
regnum = gdbarch_num_regs (gdbarch); regnum = gdbarch_num_regs (gdbarch);
while (regnum < gdbarch_num_regs (gdbarch) while (regnum < gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
{ {
if (mips_float_register_p (gdbarch, regnum)) if (mips_float_register_p (gdbarch, regnum))
{ {

View File

@ -2099,7 +2099,7 @@ nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Add NDS32 register aliases. To avoid search in user register name space, /* Add NDS32 register aliases. To avoid search in user register name space,
user_reg_map_name_to_regnum is not used. */ user_reg_map_name_to_regnum is not used. */
maxregs = (gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch)); maxregs = gdbarch_num_cooked_regs (gdbarch);
for (i = 0; i < ARRAY_SIZE (nds32_register_aliases); i++) for (i = 0; i < ARRAY_SIZE (nds32_register_aliases); i++)
{ {
int regnum, j; int regnum, j;

View File

@ -86,8 +86,7 @@ init_regcache_descr (struct gdbarch *gdbarch)
/* Total size of the register space. The raw registers are mapped /* Total size of the register space. The raw registers are mapped
directly onto the raw register cache while the pseudo's are directly onto the raw register cache while the pseudo's are
either mapped onto raw-registers or memory. */ either mapped onto raw-registers or memory. */
descr->nr_cooked_registers = gdbarch_num_regs (gdbarch) descr->nr_cooked_registers = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
/* Fill in a table of register types. */ /* Fill in a table of register types. */
descr->register_type descr->register_type
@ -163,9 +162,7 @@ register_size (struct gdbarch *gdbarch, int regnum)
struct regcache_descr *descr = regcache_descr (gdbarch); struct regcache_descr *descr = regcache_descr (gdbarch);
int size; int size;
gdb_assert (regnum >= 0 gdb_assert (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch));
&& regnum < (gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch)));
size = descr->sizeof_register[regnum]; size = descr->sizeof_register[regnum];
return size; return size;
} }
@ -1311,8 +1308,7 @@ register_dump::dump (ui_file *file)
long register_offset = 0; long register_offset = 0;
gdb_assert (descr->nr_cooked_registers gdb_assert (descr->nr_cooked_registers
== (gdbarch_num_regs (m_gdbarch) == gdbarch_num_cooked_regs (m_gdbarch));
+ gdbarch_num_pseudo_regs (m_gdbarch)));
for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++) for (regnum = -1; regnum < descr->nr_cooked_registers; regnum++)
{ {
@ -1637,9 +1633,7 @@ cooked_read_test (struct gdbarch *gdbarch)
mock_target.reset (); mock_target.reset ();
/* Then, read all raw and pseudo registers, and don't expect calling /* Then, read all raw and pseudo registers, and don't expect calling
to_{fetch,store}_registers. */ to_{fetch,store}_registers. */
for (int regnum = 0; for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
if (register_size (gdbarch, regnum) == 0) if (register_size (gdbarch, regnum) == 0)
continue; continue;
@ -1665,9 +1659,7 @@ cooked_read_test (struct gdbarch *gdbarch)
readonly regcache. */ readonly regcache. */
mock_target.reset (); mock_target.reset ();
for (int regnum = 0; for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
if (register_size (gdbarch, regnum) == 0) if (register_size (gdbarch, regnum) == 0)
continue; continue;
@ -1762,8 +1754,7 @@ cooked_write_test (struct gdbarch *gdbarch)
readwrite_regcache readwrite (gdbarch); readwrite_regcache readwrite (gdbarch);
const int num_regs = (gdbarch_num_regs (gdbarch) const int num_regs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
for (auto regnum = 0; regnum < num_regs; regnum++) for (auto regnum = 0; regnum < num_regs; regnum++)
{ {

View File

@ -357,9 +357,7 @@ rs6000_register_sim_regno (struct gdbarch *gdbarch, int reg)
if (tdep->sim_regno == NULL) if (tdep->sim_regno == NULL)
init_sim_regno_table (gdbarch); init_sim_regno_table (gdbarch);
gdb_assert (0 <= reg gdb_assert (0 <= reg && reg <= gdbarch_num_cooked_regs (gdbarch));
&& reg <= gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch));
sim_regno = tdep->sim_regno[reg]; sim_regno = tdep->sim_regno[reg];
if (sim_regno >= 0) if (sim_regno >= 0)
@ -6475,8 +6473,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
cur_reg += 32; cur_reg += 32;
} }
gdb_assert (gdbarch_num_regs (gdbarch) gdb_assert (gdbarch_num_cooked_regs (gdbarch) == cur_reg);
+ gdbarch_num_pseudo_regs (gdbarch) == cur_reg);
/* Register the ravenscar_arch_ops. */ /* Register the ravenscar_arch_ops. */
if (mach == bfd_mach_ppc_e500) if (mach == bfd_mach_ppc_e500)

View File

@ -616,13 +616,9 @@ stab_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
{ {
int regno = gdbarch_stab_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym)); int regno = gdbarch_stab_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
if (regno < 0 if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
|| regno >= (gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch)))
{ {
reg_value_complaint (regno, reg_value_complaint (regno, gdbarch_num_cooked_regs (gdbarch),
gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch),
SYMBOL_PRINT_NAME (sym)); SYMBOL_PRINT_NAME (sym));
regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless. */ regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless. */

View File

@ -1553,8 +1553,7 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
} }
count = 0; count = 0;
numregs = gdbarch_num_regs (gdbarch) numregs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch);
for (i = 0; i < numregs; i++) for (i = 0; i < numregs; i++)
if (i != sp_regnum if (i != sp_regnum
&& gdbarch_register_reggroup_p (gdbarch, i, all_reggroup)) && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))

View File

@ -854,12 +854,11 @@ tdesc_register_name (struct gdbarch *gdbarch, int regno)
{ {
struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
int num_regs = gdbarch_num_regs (gdbarch); int num_regs = gdbarch_num_regs (gdbarch);
int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
if (reg != NULL) if (reg != NULL)
return reg->name.c_str (); return reg->name.c_str ();
if (regno >= num_regs && regno < num_regs + num_pseudo_regs) if (regno >= num_regs && regno < gdbarch_num_cooked_regs (gdbarch))
{ {
struct tdesc_arch_data *data struct tdesc_arch_data *data
= (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data); = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);

View File

@ -48,7 +48,7 @@ struct trad_frame_saved_reg *
trad_frame_alloc_saved_regs (struct gdbarch *gdbarch) trad_frame_alloc_saved_regs (struct gdbarch *gdbarch)
{ {
int regnum; int regnum;
int numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); int numregs = gdbarch_num_cooked_regs (gdbarch);
struct trad_frame_saved_reg *this_saved_regs struct trad_frame_saved_reg *this_saved_regs
= FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg); = FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg);

View File

@ -206,10 +206,7 @@ tui_show_register_group (struct reggroup *group,
/* See how many registers must be displayed. */ /* See how many registers must be displayed. */
nr_regs = 0; nr_regs = 0;
for (regnum = 0; for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
const char *name; const char *name;
@ -253,10 +250,7 @@ tui_show_register_group (struct reggroup *group,
/* Now set the register names and values. */ /* Now set the register names and values. */
pos = 0; pos = 0;
for (regnum = 0; for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++)
regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch);
regnum++)
{ {
struct tui_gen_win_info *data_item_win; struct tui_gen_win_info *data_item_win;
struct tui_data_element *data; struct tui_data_element *data;

View File

@ -138,8 +138,7 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
specific register override the user registers. */ specific register override the user registers. */
{ {
int i; int i;
int maxregs = (gdbarch_num_regs (gdbarch) int maxregs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
for (i = 0; i < maxregs; i++) for (i = 0; i < maxregs; i++)
{ {
@ -165,8 +164,7 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
if ((len < 0 && strcmp (reg->name, name)) if ((len < 0 && strcmp (reg->name, name))
|| (len == strlen (reg->name) || (len == strlen (reg->name)
&& strncmp (reg->name, name, len) == 0)) && strncmp (reg->name, name, len) == 0))
return gdbarch_num_regs (gdbarch) return gdbarch_num_cooked_regs (gdbarch) + nr;
+ gdbarch_num_pseudo_regs (gdbarch) + nr;
} }
} }
@ -192,8 +190,7 @@ usernum_to_user_reg (struct gdbarch *gdbarch, int usernum)
const char * const char *
user_reg_map_regnum_to_name (struct gdbarch *gdbarch, int regnum) user_reg_map_regnum_to_name (struct gdbarch *gdbarch, int regnum)
{ {
int maxregs = (gdbarch_num_regs (gdbarch) int maxregs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
if (regnum < 0) if (regnum < 0)
return NULL; return NULL;
@ -213,8 +210,7 @@ struct value *
value_of_user_reg (int regnum, struct frame_info *frame) value_of_user_reg (int regnum, struct frame_info *frame)
{ {
struct gdbarch *gdbarch = get_frame_arch (frame); struct gdbarch *gdbarch = get_frame_arch (frame);
int maxregs = (gdbarch_num_regs (gdbarch) int maxregs = gdbarch_num_cooked_regs (gdbarch);
+ gdbarch_num_pseudo_regs (gdbarch));
struct user_reg *reg = usernum_to_user_reg (gdbarch, regnum - maxregs); struct user_reg *reg = usernum_to_user_reg (gdbarch, regnum - maxregs);
gdb_assert (reg != NULL); gdb_assert (reg != NULL);
@ -230,7 +226,7 @@ maintenance_print_user_registers (const char *args, int from_tty)
int regnum; int regnum;
regs = (struct gdb_user_regs *) gdbarch_data (gdbarch, user_regs_data); regs = (struct gdb_user_regs *) gdbarch_data (gdbarch, user_regs_data);
regnum = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); regnum = gdbarch_num_cooked_regs (gdbarch);
fprintf_unfiltered (gdb_stdout, " %-11s %3s\n", "Name", "Nr"); fprintf_unfiltered (gdb_stdout, " %-11s %3s\n", "Name", "Nr");
for (reg = regs->first; reg != NULL; reg = reg->next, ++regnum) for (reg = regs->first; reg != NULL; reg = reg->next, ++regnum)

View File

@ -234,9 +234,7 @@ xtensa_find_register_by_name (struct gdbarch *gdbarch, const char *name)
{ {
int i; int i;
for (i = 0; i < gdbarch_num_regs (gdbarch) for (i = 0; i < gdbarch_num_cooked_regs (gdbarch); i++)
+ gdbarch_num_pseudo_regs (gdbarch);
i++)
if (strcasecmp (gdbarch_tdep (gdbarch)->regmap[i].name, name) == 0) if (strcasecmp (gdbarch_tdep (gdbarch)->regmap[i].name, name) == 0)
return i; return i;
@ -249,8 +247,7 @@ static const char *
xtensa_register_name (struct gdbarch *gdbarch, int regnum) xtensa_register_name (struct gdbarch *gdbarch, int regnum)
{ {
/* Return the name stored in the register map. */ /* Return the name stored in the register map. */
if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch) if (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
return gdbarch_tdep (gdbarch)->regmap[regnum].name; return gdbarch_tdep (gdbarch)->regmap[regnum].name;
internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum); internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum);
@ -276,8 +273,7 @@ xtensa_register_type (struct gdbarch *gdbarch, int regnum)
return builtin_type (gdbarch)->builtin_data_ptr; return builtin_type (gdbarch)->builtin_data_ptr;
/* Return the stored type for all other registers. */ /* Return the stored type for all other registers. */
else if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch) else if (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch))
+ gdbarch_num_pseudo_regs (gdbarch))
{ {
xtensa_register_t* reg = &tdep->regmap[regnum]; xtensa_register_t* reg = &tdep->regmap[regnum];
@ -352,9 +348,7 @@ xtensa_reg_to_regnum (struct gdbarch *gdbarch, int regnum)
if (regnum >= 0 && regnum < 16) if (regnum >= 0 && regnum < 16)
return gdbarch_tdep (gdbarch)->a0_base + regnum; return gdbarch_tdep (gdbarch)->a0_base + regnum;
for (i = 0; for (i = 0; i < gdbarch_num_cooked_regs (gdbarch); i++)
i < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
i++)
if (regnum == gdbarch_tdep (gdbarch)->regmap[i].target_number) if (regnum == gdbarch_tdep (gdbarch)->regmap[i].target_number)
return i; return i;
@ -585,9 +579,7 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch,
return REG_VALID; return REG_VALID;
} }
/* Pseudo registers. */ /* Pseudo registers. */
else if (regnum >= 0 else if (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch))
&& regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch))
{ {
xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum]; xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
xtensa_register_type_t type = reg->type; xtensa_register_type_t type = reg->type;
@ -670,9 +662,7 @@ xtensa_pseudo_register_write (struct gdbarch *gdbarch,
return; return;
} }
/* Pseudo registers. */ /* Pseudo registers. */
else if (regnum >= 0 else if (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch))
&& regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch))
{ {
xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum]; xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
xtensa_register_type_t type = reg->type; xtensa_register_type_t type = reg->type;