From 7ccb0be9545330795513b699b8ec1d6770c0e755 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 17 Jun 2009 18:38:16 +0000 Subject: [PATCH] ChangeLog: * 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 | 13 ++++++ gdb/mi/mi-main.c | 83 ++++++++++++++++++--------------- gdb/testsuite/ChangeLog | 4 ++ gdb/testsuite/gdb.mi/gdb680.exp | 2 +- 4 files changed, 64 insertions(+), 38 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 41aefb5e08d..e4943294d6c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2009-06-17 Ulrich Weigand + + * 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 * tui/tui-regs.c (tui_show_register_group): Remove GDBARCH parameter; diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 13d69285f57..38297913287 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -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 = (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 [ ... ]"); @@ -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"); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index d4a35c8c1c3..877f52718d4 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-06-17 Ulrich Weigand + + * gdb.mi/gdb680.exp: Update test for error message. + 2009-06-17 Ulrich Weigand * gdb.base/annota1.exp: Allow multiple occurrences of the diff --git a/gdb/testsuite/gdb.mi/gdb680.exp b/gdb/testsuite/gdb.mi/gdb680.exp index 63b8f11151e..5af285a0d19 100644 --- a/gdb/testsuite/gdb.mi/gdb680.exp +++ b/gdb/testsuite/gdb.mi/gdb680.exp @@ -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" } -- 2.30.2