2002-10-31 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Thu, 31 Oct 2002 19:49:34 +0000 (19:49 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 31 Oct 2002 19:49:34 +0000 (19:49 +0000)
* 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.

gdb/ChangeLog
gdb/config/h8500/tm-h8500.h
gdb/h8500-tdep.c

index 0e2e4b9657c77ace8c39fc41f8f7b7917a101045..1a9f0509e44c93773213fbf17ec4a2b6f9b55734 100644 (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.
index 30acdbe05bf945bea83f4ebbd11bfc195aee92ca..50fccfcd894147b200fbf7fd82fc302dbfd2ece8 100644 (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;
 
index 0696c4ea5403e725cc33886650c70231cbd68b81..0bfae7a762436e01df7afb9a3d61065aa3bbbcb2 100644 (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)
 {