2002-10-31 Andrew Cagney <cagney@redhat.com>

* h8500-tdep.c (h8500_print_registers_info): New static function,
	clone of infcmd.c's default_print_registers_info.
	(h8500_do_registers_info): New funtion.
	(h8500_print_register_hook): Rename print_register_hook, make
	static.

	* config/h8500/tm-h8500.h: Update copyright.
	(DEPRECATED_DO_REGISTERS_INFO): Define.
	(h8500_do_registers_info: Declare.
	(PRINT_REGISTER_HOOK): Delete macro.
	(print_register_hook): Delete function.
This commit is contained in:
Andrew Cagney
2002-10-31 19:49:34 +00:00
parent 0bdd672b8c
commit c5646e1120
3 changed files with 133 additions and 6 deletions

View File

@ -1,3 +1,17 @@
2002-10-31 Andrew Cagney <cagney@redhat.com>
* h8500-tdep.c (h8500_print_registers_info): New static function,
clone of infcmd.c's default_print_registers_info.
(h8500_do_registers_info): New funtion.
(h8500_print_register_hook): Rename print_register_hook, make
static.
* config/h8500/tm-h8500.h: Update copyright.
(DEPRECATED_DO_REGISTERS_INFO): Define.
(h8500_do_registers_info: Declare.
(PRINT_REGISTER_HOOK): Delete macro.
(print_register_hook): Delete function.
2002-10-31 Andrew Cagney <cagney@redhat.com>
* z8k-tdep.c (z8k_print_register_hook): Make static.

View File

@ -1,6 +1,7 @@
/* Parameters for execution on a H8/500 series machine.
Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002 Free
Software Foundation, Inc.
This file is part of GDB.
@ -253,8 +254,9 @@ extern CORE_ADDR h8500_addr_bits_remove (CORE_ADDR);
#define read_memory_short(x) (read_memory_integer(x,2) & 0xffff)
#define PRINT_REGISTER_HOOK(regno) print_register_hook(regno)
extern void print_register_hook (int);
extern void h8500_do_registers_info (int regnum, int all);
#define DEPRECATED_DO_REGISTERS_INFO(REGNUM,ALL) \
h8500_do_registers_info (REGNUM, ALL)
extern int minimum_mode;

View File

@ -175,8 +175,8 @@ h8500_pop_frame (void)
}
}
void
print_register_hook (int regno)
static void
h8500_print_register_hook (int regno)
{
if (regno == CCR_REGNUM)
{
@ -221,6 +221,117 @@ print_register_hook (int regno)
}
}
static void
h8500_print_registers_info (struct gdbarch *gdbarch,
struct ui_file *file,
struct frame_info *frame,
int regnum, int print_all)
{
int i;
const int numregs = NUM_REGS + NUM_PSEUDO_REGS;
char *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
char *virtual_buffer = alloca (MAX_REGISTER_VIRTUAL_SIZE);
for (i = 0; i < numregs; i++)
{
/* Decide between printing all regs, non-float / vector regs, or
specific reg. */
if (regnum == -1)
{
if (!print_all)
{
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
continue;
if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)))
continue;
}
}
else
{
if (i != regnum)
continue;
}
/* If the register name is empty, it is undefined for this
processor, so don't display anything. */
if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
continue;
fputs_filtered (REGISTER_NAME (i), file);
print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), file);
/* Get the data in raw format. */
if (! frame_register_read (frame, i, raw_buffer))
{
fprintf_filtered (file, "*value not available*\n");
continue;
}
/* FIXME: cagney/2002-08-03: This code shouldn't be necessary.
The function frame_register_read() should have returned the
pre-cooked register so no conversion is necessary. */
/* Convert raw data to virtual format if necessary. */
if (REGISTER_CONVERTIBLE (i))
{
REGISTER_CONVERT_TO_VIRTUAL (i, REGISTER_VIRTUAL_TYPE (i),
raw_buffer, virtual_buffer);
}
else
{
memcpy (virtual_buffer, raw_buffer,
REGISTER_VIRTUAL_SIZE (i));
}
/* If virtual format is floating, print it that way, and in raw
hex. */
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
{
int j;
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
file, 0, 1, 0, Val_pretty_default);
fprintf_filtered (file, "\t(raw 0x");
for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
{
int idx;
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
idx = j;
else
idx = REGISTER_RAW_SIZE (i) - 1 - j;
fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[idx]);
}
fprintf_filtered (file, ")");
}
else
{
/* Print the register in hex. */
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
file, 'x', 1, 0, Val_pretty_default);
/* If not a vector register, print it also according to its
natural format. */
if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)) == 0)
{
fprintf_filtered (file, "\t");
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
file, 0, 1, 0, Val_pretty_default);
}
}
/* Some h8500 specific info. */
h8500_print_register_hook (i);
fprintf_filtered (file, "\n");
}
}
void
h8500_do_registers_info (int regnum, int all)
{
h8500_print_registers_info (current_gdbarch, gdb_stdout, selected_frame,
regnum, all);
}
int
h8500_register_size (int regno)
{