ChangeLog:
authorUlrich Weigand <uweigand@de.ibm.com>
Wed, 17 Jun 2009 18:38:16 +0000 (18:38 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Wed, 17 Jun 2009 18:38:16 +0000 (18:38 +0000)
* mi/mi-main.c (mi_cmd_data_list_register_names): Use selected
frame architecture instead of current_gdbarch.
(mi_cmd_data_list_changed_registers): Likewise.
(mi_cmd_data_list_register_values): Likewise.  Pass selected
frame to get_register.
(get_register): Add FRAME argument, use it as frame to retrieve
registers from (instead of selected frame).  Use frame architecture
instead of current_gdbarch.
(mi_cmd_data_write_register_values): Use current regcache
architecture instead of current_gdbarch.

testsuite/ChangeLog:

* gdb.mi/gdb680.exp: Update test for error message.

gdb/ChangeLog
gdb/mi/mi-main.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/gdb680.exp

index 41aefb5e08d3c58fd3d568e154dcace95d1926fe..e4943294d6cc40de15afeff509523f8085f84185 100644 (file)
@@ -1,3 +1,16 @@
+2009-06-17  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * mi/mi-main.c (mi_cmd_data_list_register_names): Use selected
+       frame architecture instead of current_gdbarch.
+       (mi_cmd_data_list_changed_registers): Likewise.
+       (mi_cmd_data_list_register_values): Likewise.  Pass selected
+       frame to get_register.
+       (get_register): Add FRAME argument, use it as frame to retrieve
+       registers from (instead of selected frame).  Use frame architecture
+       instead of current_gdbarch.
+       (mi_cmd_data_write_register_values): Use current regcache
+       architecture instead of current_gdbarch.
+
 2009-06-17  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * tui/tui-regs.c (tui_show_register_group): Remove GDBARCH parameter;
index 13d69285f57d2d3b76b00af7000b9caa23196d72..38297913287741cfb6fefc53795d43deeb197bee 100644 (file)
@@ -91,7 +91,7 @@ static void mi_execute_async_cli_command (char *cli_command,
                                                        char **argv, int argc);
 static int register_changed_p (int regnum, struct regcache *,
                               struct regcache *);
-static void get_register (int regnum, int format);
+static void get_register (struct frame_info *, int regnum, int format);
 
 /* Command implementations.  FIXME: Is this libgdb?  No.  This is the MI
    layer that calls libgdb.  Any operation used in the below should be
@@ -446,6 +446,8 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
 void
 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
 {
+  struct frame_info *frame;
+  struct gdbarch *gdbarch;
   int regnum, numregs;
   int i;
   struct cleanup *cleanup;
@@ -456,8 +458,9 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
      In this case, some entries of gdbarch_register_name will change depending
      upon the particular processor being debugged.  */
 
-  numregs = gdbarch_num_regs (current_gdbarch)
-           + gdbarch_num_pseudo_regs (current_gdbarch);
+  frame = get_selected_frame (NULL);
+  gdbarch = get_frame_arch (frame);
+  numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
 
   cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
 
@@ -467,13 +470,12 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
           regnum < numregs;
           regnum++)
        {
-         if (gdbarch_register_name (current_gdbarch, regnum) == NULL
-             || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
+         if (gdbarch_register_name (gdbarch, regnum) == NULL
+             || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
            ui_out_field_string (uiout, NULL, "");
          else
            ui_out_field_string (uiout, NULL,
-                                gdbarch_register_name
-                                  (current_gdbarch, regnum));
+                                gdbarch_register_name (gdbarch, regnum));
        }
     }
 
@@ -484,12 +486,12 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
       if (regnum < 0 || regnum >= numregs)
        error ("bad register number");
 
-      if (gdbarch_register_name (current_gdbarch, regnum) == NULL
-         || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
+      if (gdbarch_register_name (gdbarch, regnum) == NULL
+         || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
        ui_out_field_string (uiout, NULL, "");
       else
        ui_out_field_string (uiout, NULL,
-                            gdbarch_register_name (current_gdbarch, regnum));
+                            gdbarch_register_name (gdbarch, regnum));
     }
   do_cleanups (cleanup);
 }
@@ -499,6 +501,7 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
 {
   static struct regcache *this_regs = NULL;
   struct regcache *prev_regs;
+  struct gdbarch *gdbarch;
   int regnum, numregs, changed;
   int i;
   struct cleanup *cleanup;
@@ -517,8 +520,8 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
      In this  case, some entries of gdbarch_register_name will change depending
      upon the particular processor being debugged.  */
 
-  numregs = gdbarch_num_regs (current_gdbarch)
-           + gdbarch_num_pseudo_regs (current_gdbarch);
+  gdbarch = get_regcache_arch (this_regs);
+  numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
 
   make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
 
@@ -528,8 +531,8 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
           regnum < numregs;
           regnum++)
        {
-         if (gdbarch_register_name (current_gdbarch, regnum) == NULL
-             || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
+         if (gdbarch_register_name (gdbarch, regnum) == NULL
+             || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
            continue;
          changed = register_changed_p (regnum, prev_regs, this_regs);
          if (changed < 0)
@@ -546,8 +549,8 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
 
       if (regnum >= 0
          && regnum < numregs
-         && gdbarch_register_name (current_gdbarch, regnum) != NULL
-         && *gdbarch_register_name (current_gdbarch, regnum) != '\000')
+         && gdbarch_register_name (gdbarch, regnum) != NULL
+         && *gdbarch_register_name (gdbarch, regnum) != '\000')
        {
          changed = register_changed_p (regnum, prev_regs, this_regs);
          if (changed < 0)
@@ -597,6 +600,8 @@ register_changed_p (int regnum, struct regcache *prev_regs,
 void
 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 {
+  struct frame_info *frame;
+  struct gdbarch *gdbarch;
   int regnum, numregs, format;
   int i;
   struct cleanup *list_cleanup, *tuple_cleanup;
@@ -607,14 +612,15 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
      In this case, some entries of gdbarch_register_name will change depending
      upon the particular processor being debugged.  */
 
-  numregs = gdbarch_num_regs (current_gdbarch)
-           + gdbarch_num_pseudo_regs (current_gdbarch);
-
   if (argc == 0)
     error ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
 
   format = (int) argv[0][0];
 
+  frame = get_selected_frame (NULL);
+  gdbarch = get_frame_arch (frame);
+  numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
+
   list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
 
   if (argc == 1)           /* No args, beside the format: do all the regs.  */
@@ -623,12 +629,12 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
           regnum < numregs;
           regnum++)
        {
-         if (gdbarch_register_name (current_gdbarch, regnum) == NULL
-             || *(gdbarch_register_name (current_gdbarch, regnum)) == '\0')
+         if (gdbarch_register_name (gdbarch, regnum) == NULL
+             || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
            continue;
          tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
          ui_out_field_int (uiout, "number", regnum);
-         get_register (regnum, format);
+         get_register (frame, regnum, format);
          do_cleanups (tuple_cleanup);
        }
     }
@@ -640,12 +646,12 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 
       if (regnum >= 0
          && regnum < numregs
-         && gdbarch_register_name (current_gdbarch, regnum) != NULL
-         && *gdbarch_register_name (current_gdbarch, regnum) != '\000')
+         && gdbarch_register_name (gdbarch, regnum) != NULL
+         && *gdbarch_register_name (gdbarch, regnum) != '\000')
        {
          tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
          ui_out_field_int (uiout, "number", regnum);
-         get_register (regnum, format);
+         get_register (frame, regnum, format);
          do_cleanups (tuple_cleanup);
        }
       else
@@ -656,8 +662,9 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 
 /* Output one register's contents in the desired format.  */
 static void
-get_register (int regnum, int format)
+get_register (struct frame_info *frame, int regnum, int format)
 {
+  struct gdbarch *gdbarch = get_frame_arch (frame);
   gdb_byte buffer[MAX_REGISTER_SIZE];
   int optim;
   int realnum;
@@ -670,8 +677,7 @@ get_register (int regnum, int format)
   if (format == 'N')
     format = 0;
 
-  frame_register (get_selected_frame (NULL), regnum, &optim, &lval, &addr,
-                 &realnum, buffer);
+  frame_register (frame, regnum, &optim, &lval, &addr, &realnum, buffer);
 
   if (optim)
     error ("Optimized out");
@@ -683,10 +689,10 @@ get_register (int regnum, int format)
 
       strcpy (buf, "0x");
       ptr = buf + 2;
-      for (j = 0; j < register_size (current_gdbarch, regnum); j++)
+      for (j = 0; j < register_size (gdbarch, regnum); j++)
        {
-         int idx = gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG ? j
-         : register_size (current_gdbarch, regnum) - 1 - j;
+         int idx = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ?
+                   j : register_size (gdbarch, regnum) - 1 - j;
          sprintf (ptr, "%02x", (unsigned char) buffer[idx]);
          ptr += 2;
        }
@@ -698,7 +704,7 @@ get_register (int regnum, int format)
       struct value_print_options opts;
       get_formatted_print_options (&opts, format);
       opts.deref_ref = 1;
-      val_print (register_type (current_gdbarch, regnum), buffer, 0, 0,
+      val_print (register_type (gdbarch, regnum), buffer, 0, 0,
                 stb->stream, 0, &opts, current_language);
       ui_out_field_stream (uiout, "value", stb);
       ui_out_stream_delete (stb);
@@ -711,6 +717,8 @@ get_register (int regnum, int format)
 void
 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
 {
+  struct regcache *regcache;
+  struct gdbarch *gdbarch;
   int numregs, i;
   char format;
 
@@ -720,8 +728,9 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
      In this case, some entries of gdbarch_register_name will change depending
      upon the particular processor being debugged.  */
 
-  numregs = gdbarch_num_regs (current_gdbarch)
-           + gdbarch_num_pseudo_regs (current_gdbarch);
+  regcache = get_current_regcache ();
+  gdbarch = get_regcache_arch (regcache);
+  numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
 
   if (argc == 0)
     error ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
@@ -742,8 +751,8 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
       int regnum = atoi (argv[i]);
 
       if (regnum >= 0 && regnum < numregs
-         && gdbarch_register_name (current_gdbarch, regnum)
-         && *gdbarch_register_name (current_gdbarch, regnum))
+         && gdbarch_register_name (gdbarch, regnum)
+         && *gdbarch_register_name (gdbarch, regnum))
        {
          LONGEST value;
 
@@ -751,7 +760,7 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
          value = parse_and_eval_address (argv[i + 1]);
 
          /* Write it down.  */
-         regcache_cooked_write_signed (get_current_regcache (), regnum, value);
+         regcache_cooked_write_signed (regcache, regnum, value);
        }
       else
        error ("bad register number");
index d4a35c8c1c361ea8e4cc5891e350f83ef7eb804a..877f52718d49af0a140f9265c5eda764dbf9dfea 100644 (file)
@@ -1,3 +1,7 @@
+2009-06-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       * gdb.mi/gdb680.exp: Update test for error message.
+
 2009-06-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
        * gdb.base/annota1.exp: Allow multiple occurrences of the
index 63b8f11151e4812b7fd206cecd180893623099d1..5af285a0d19c77ec76d7fe17dda3b2b810ba5b61 100644 (file)
@@ -27,7 +27,7 @@ if [mi_gdb_start] {
 
 proc do_test {count} {
   mi_gdb_test "-data-list-register-names -1" \
-    {\^error,msg=\"bad register number\"} \
+    {\^error,msg=\"No registers.\"} \
     "-data-list-register-names -1, try $count"
 }