* NEWS: Mention "regs" deprecated for m68hc11 too.

* m68hc11-tdep.c (_initialize_m68hc11_tdep): Deprecate "regs" command.
	(m68hc11_print_register): New function to print out one register.
	(m68hc11_print_registers_info): New function to print registers.
	(show_regs): Deprecate and use the above.
	(m68hc11_gdbarch_init): Install the print_registers_info.
This commit is contained in:
Stephane Carrez 2003-07-24 19:59:33 +00:00
parent 3b2fc2ea68
commit e286caf282
3 changed files with 170 additions and 50 deletions

View File

@ -1,3 +1,13 @@
2003-07-24 Stephane Carrez <stcarrez@nerim.fr>
* NEWS: Mention "regs" deprecated for m68hc11 too.
* m68hc11-tdep.c (_initialize_m68hc11_tdep): Deprecate "regs" command.
(m68hc11_print_register): New function to print out one register.
(m68hc11_print_registers_info): New function to print registers.
(show_regs): Deprecate and use the above.
(m68hc11_gdbarch_init): Install the print_registers_info.
2003-07-24 Jeff Johnston <jjohnstn@redhat.com> 2003-07-24 Jeff Johnston <jjohnstn@redhat.com>
* ia64-linux-nat.c (ia64_linux_stopped_by_watchpoint): Verify * ia64-linux-nat.c (ia64_linux_stopped_by_watchpoint): Verify

View File

@ -16,7 +16,7 @@ The "detach" command will now resume the application, as documented. To
disconnect from gdbserver and leave it stopped, use the new "disconnect" disconnect from gdbserver and leave it stopped, use the new "disconnect"
command. command.
* d10v `regs' command deprecated * d10v, m68hc11 `regs' command deprecated
The `info registers' command has been updated so that it displays the The `info registers' command has been updated so that it displays the
registers using a format identical to the old `regs' command. registers using a format identical to the old `regs' command.

View File

@ -926,58 +926,165 @@ m68hc11_init_extra_frame_info (int fromleaf, struct frame_info *fi)
} }
} }
/* Get and print the register from the given frame. */
static void
m68hc11_print_register (struct gdbarch *gdbarch, struct ui_file *file,
struct frame_info *frame, int regno)
{
LONGEST rval;
if (regno == HARD_PC_REGNUM || regno == HARD_SP_REGNUM
|| regno == SOFT_FP_REGNUM || regno == M68HC12_HARD_PC_REGNUM)
frame_read_unsigned_register (frame, regno, &rval);
else
frame_read_signed_register (frame, regno, &rval);
if (regno == HARD_A_REGNUM || regno == HARD_B_REGNUM
|| regno == HARD_CCR_REGNUM || regno == HARD_PAGE_REGNUM)
{
fprintf_filtered (file, "0x%02x ", (unsigned char) rval);
if (regno != HARD_CCR_REGNUM)
print_longest (file, 'd', 1, rval);
}
else
{
if (regno == HARD_PC_REGNUM && gdbarch_tdep (gdbarch)->use_page_register)
{
ULONGEST page;
frame_read_unsigned_register (frame, HARD_PAGE_REGNUM, &page);
fprintf_filtered (file, "0x%02x:%04x ", (unsigned) page,
(unsigned) rval);
}
else
{
fprintf_filtered (file, "0x%04x ", (unsigned) rval);
if (regno != HARD_PC_REGNUM && regno != HARD_SP_REGNUM
&& regno != SOFT_FP_REGNUM && regno != M68HC12_HARD_PC_REGNUM)
print_longest (file, 'd', 1, rval);
}
}
if (regno == HARD_CCR_REGNUM)
{
/* CCR register */
int C, Z, N, V;
unsigned char l = rval & 0xff;
fprintf_filtered (file, "%c%c%c%c%c%c%c%c ",
l & M6811_S_BIT ? 'S' : '-',
l & M6811_X_BIT ? 'X' : '-',
l & M6811_H_BIT ? 'H' : '-',
l & M6811_I_BIT ? 'I' : '-',
l & M6811_N_BIT ? 'N' : '-',
l & M6811_Z_BIT ? 'Z' : '-',
l & M6811_V_BIT ? 'V' : '-',
l & M6811_C_BIT ? 'C' : '-');
N = (l & M6811_N_BIT) != 0;
Z = (l & M6811_Z_BIT) != 0;
V = (l & M6811_V_BIT) != 0;
C = (l & M6811_C_BIT) != 0;
/* Print flags following the h8300 */
if ((C | Z) == 0)
fprintf_filtered (file, "u> ");
else if ((C | Z) == 1)
fprintf_filtered (file, "u<= ");
else if (C == 0)
fprintf_filtered (file, "u< ");
if (Z == 0)
fprintf_filtered (file, "!= ");
else
fprintf_filtered (file, "== ");
if ((N ^ V) == 0)
fprintf_filtered (file, ">= ");
else
fprintf_filtered (file, "< ");
if ((Z | (N ^ V)) == 0)
fprintf_filtered (file, "> ");
else
fprintf_filtered (file, "<= ");
}
}
/* Same as 'info reg' but prints the registers in a different way. */
static void
m68hc11_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
struct frame_info *frame, int regno, int cpregs)
{
if (regno >= 0)
{
const char *name = gdbarch_register_name (gdbarch, regno);
if (!name || !*name)
return;
fprintf_filtered (file, "%-10s ", name);
m68hc11_print_register (gdbarch, file, frame, regno);
fprintf_filtered (file, "\n");
}
else
{
int i, nr;
fprintf_filtered (file, "PC=");
m68hc11_print_register (gdbarch, file, frame, HARD_PC_REGNUM);
fprintf_filtered (file, " SP=");
m68hc11_print_register (gdbarch, file, frame, HARD_SP_REGNUM);
fprintf_filtered (file, " FP=");
m68hc11_print_register (gdbarch, file, frame, SOFT_FP_REGNUM);
fprintf_filtered (file, "\nCCR=");
m68hc11_print_register (gdbarch, file, frame, HARD_CCR_REGNUM);
fprintf_filtered (file, "\nD=");
m68hc11_print_register (gdbarch, file, frame, HARD_D_REGNUM);
fprintf_filtered (file, " X=");
m68hc11_print_register (gdbarch, file, frame, HARD_X_REGNUM);
fprintf_filtered (file, " Y=");
m68hc11_print_register (gdbarch, file, frame, HARD_Y_REGNUM);
if (gdbarch_tdep (gdbarch)->use_page_register)
{
fprintf_filtered (file, "\nPage=");
m68hc11_print_register (gdbarch, file, frame, HARD_PAGE_REGNUM);
}
fprintf_filtered (file, "\n");
nr = 0;
for (i = SOFT_D1_REGNUM; i < M68HC11_ALL_REGS; i++)
{
/* Skip registers which are not defined in the symbol table. */
if (soft_regs[i].name == 0)
continue;
fprintf_filtered (file, "D%d=", i - SOFT_D1_REGNUM + 1);
m68hc11_print_register (gdbarch, file, frame, i);
nr++;
if ((nr % 8) == 7)
fprintf_filtered (file, "\n");
else
fprintf_filtered (file, " ");
}
if (nr && (nr % 8) != 7)
fprintf_filtered (file, "\n");
}
}
/* Same as 'info reg' but prints the registers in a different way. */ /* Same as 'info reg' but prints the registers in a different way. */
static void static void
show_regs (char *args, int from_tty) show_regs (char *args, int from_tty)
{ {
int ccr = read_register (HARD_CCR_REGNUM); m68hc11_print_registers_info (current_gdbarch, gdb_stdout,
int i; get_current_frame (), -1, 1);
int nr;
printf_filtered ("PC=%04x SP=%04x FP=%04x CCR=%02x %c%c%c%c%c%c%c%c\n",
(int) read_register (HARD_PC_REGNUM),
(int) read_register (HARD_SP_REGNUM),
(int) read_register (SOFT_FP_REGNUM),
ccr,
ccr & M6811_S_BIT ? 'S' : '-',
ccr & M6811_X_BIT ? 'X' : '-',
ccr & M6811_H_BIT ? 'H' : '-',
ccr & M6811_I_BIT ? 'I' : '-',
ccr & M6811_N_BIT ? 'N' : '-',
ccr & M6811_Z_BIT ? 'Z' : '-',
ccr & M6811_V_BIT ? 'V' : '-',
ccr & M6811_C_BIT ? 'C' : '-');
printf_filtered ("D=%04x IX=%04x IY=%04x",
(int) read_register (HARD_D_REGNUM),
(int) read_register (HARD_X_REGNUM),
(int) read_register (HARD_Y_REGNUM));
if (USE_PAGE_REGISTER)
{
printf_filtered (" Page=%02x",
(int) read_register (HARD_PAGE_REGNUM));
}
printf_filtered ("\n");
nr = 0;
for (i = SOFT_D1_REGNUM; i < M68HC11_ALL_REGS; i++)
{
/* Skip registers which are not defined in the symbol table. */
if (soft_regs[i].name == 0)
continue;
printf_filtered ("D%d=%04x",
i - SOFT_D1_REGNUM + 1,
(int) read_register (i));
nr++;
if ((nr % 8) == 7)
printf_filtered ("\n");
else
printf_filtered (" ");
}
if (nr && (nr % 8) != 7)
printf_filtered ("\n");
} }
static CORE_ADDR static CORE_ADDR
@ -1412,6 +1519,7 @@ m68hc11_gdbarch_init (struct gdbarch_info info,
m68hc11_add_reggroups (gdbarch); m68hc11_add_reggroups (gdbarch);
set_gdbarch_register_reggroup_p (gdbarch, m68hc11_register_reggroup_p); set_gdbarch_register_reggroup_p (gdbarch, m68hc11_register_reggroup_p);
set_gdbarch_print_registers_info (gdbarch, m68hc11_print_registers_info);
/* Minsymbol frobbing. */ /* Minsymbol frobbing. */
set_gdbarch_elf_make_msymbol_special (gdbarch, set_gdbarch_elf_make_msymbol_special (gdbarch,
@ -1431,6 +1539,8 @@ _initialize_m68hc11_tdep (void)
register_gdbarch_init (bfd_arch_m68hc12, m68hc11_gdbarch_init); register_gdbarch_init (bfd_arch_m68hc12, m68hc11_gdbarch_init);
m68hc11_init_reggroups (); m68hc11_init_reggroups ();
add_com ("regs", class_vars, show_regs, "Print all registers"); deprecate_cmd (add_com ("regs", class_vars, show_regs,
"Print all registers"),
"info registers");
} }