mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-01 11:59:27 +08:00
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:
@ -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.
|
||||
|
@ -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;
|
||||
|
||||
|
115
gdb/h8500-tdep.c
115
gdb/h8500-tdep.c
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user