This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit] Add error-message parameter to get_selected_frame
- From: Andrew Cagney <cagney at gnu dot org>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 29 Oct 2004 16:28:59 -0400
- Subject: [commit] Add error-message parameter to get_selected_frame
Hello,
This adds a message parameter to get_selected_frame vis:
struct frame_info *get_selected_frame (const char *message);
When the attempt to get a selected frame fails, and there's a non-NULL
message, that message instead of an error is printed as the fail reason.
This finally lets us clean up things like:
- if (!deprecated_selected_frame)
- error ("No frame selected.");
- print_frame_local_vars (deprecated_selected_frame, 0, gdb_stdout);
+ print_frame_local_vars (get_selected_frame ("No frame selected."),
+ 0, gdb_stdout);
and:
- if (target_has_stack == 0 || deprecated_selected_frame == 0)
- error ("No stack.");
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame ("No stack."), 1, SRC_AND_LOC);
A follow-on patch will clean up more cases.
committed,
Andrew
2004-10-29 Andrew Cagney <cagney@gnu.org>
* frame.h (get_selected_frame): Add message parameter.
* frame.c (get_selected_frame): Add and use message parameter.
* stack.c (current_frame_command, return_command, locals_info)
(catch_info, args_info, up_silently_base, down_silently_base): Use
get_selected_frame with an explicit message.
* thread.c, stack.c, sh-tdep.c, sh64-tdep.c: Update.
* remote-rdp.c, remote-mips.c, remote-e7000.c: Update.
* ocd.c, mi/mi-main.c, mi/mi-cmd-stack.c: Update.
* infrun.c, inflow.c, infcmd.c, frame.c: Update.
* findvar.c, eval.c, corelow.c, bsd-kvm.c: Update.
* breakpoint.c: Update.
Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.183
diff -p -u -r1.183 breakpoint.c
--- breakpoint.c 8 Oct 2004 17:30:46 -0000 1.183
+++ breakpoint.c 29 Oct 2004 20:21:09 -0000
@@ -7644,7 +7644,7 @@ do_enable_breakpoint (struct breakpoint
{
struct frame_id saved_frame_id;
- saved_frame_id = get_frame_id (get_selected_frame ());
+ saved_frame_id = get_frame_id (get_selected_frame (NULL));
if (bpt->exp_valid_block != NULL)
{
struct frame_info *fr =
Index: bsd-kvm.c
===================================================================
RCS file: /cvs/src/src/gdb/bsd-kvm.c,v
retrieving revision 1.8
diff -p -u -r1.8 bsd-kvm.c
--- bsd-kvm.c 8 Oct 2004 20:29:46 -0000 1.8
+++ bsd-kvm.c 29 Oct 2004 20:21:09 -0000
@@ -89,7 +89,7 @@ bsd_kvm_open (char *filename, int from_t
flush_cached_frames ();
select_frame (get_current_frame ());
- print_stack_frame (get_selected_frame (), -1, 1);
+ print_stack_frame (get_selected_frame (NULL), -1, 1);
}
static void
@@ -245,7 +245,7 @@ bsd_kvm_proc_cmd (char *arg, int fromtty
flush_cached_frames ();
select_frame (get_current_frame ());
- print_stack_frame (get_selected_frame (), -1, 1);
+ print_stack_frame (get_selected_frame (NULL), -1, 1);
}
#endif
@@ -265,7 +265,7 @@ bsd_kvm_pcb_cmd (char *arg, int fromtty)
flush_cached_frames ();
select_frame (get_current_frame ());
- print_stack_frame (get_selected_frame (), -1, 1);
+ print_stack_frame (get_selected_frame (NULL), -1, 1);
}
/* Add the libkvm interface to the list of all possible targets and
Index: corelow.c
===================================================================
RCS file: /cvs/src/src/gdb/corelow.c,v
retrieving revision 1.42
diff -p -u -r1.42 corelow.c
--- corelow.c 8 Oct 2004 20:29:46 -0000 1.42
+++ corelow.c 29 Oct 2004 20:21:10 -0000
@@ -402,7 +402,7 @@ core_open (char *filename, int from_tty)
/* Now, set up the frame cache, and print the top of stack. */
flush_cached_frames ();
select_frame (get_current_frame ());
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
else
{
Index: eval.c
===================================================================
RCS file: /cvs/src/src/gdb/eval.c,v
retrieving revision 1.42
diff -p -u -r1.42 eval.c
--- eval.c 29 Aug 2004 10:12:23 -0000 1.42
+++ eval.c 29 Oct 2004 20:21:10 -0000
@@ -447,11 +447,11 @@ evaluate_subexp_standard (struct type *e
case OP_REGISTER:
{
int regno = longest_to_int (exp->elts[pc + 1].longconst);
- struct value *val = value_of_register (regno, get_selected_frame ());
+ struct value *val = value_of_register (regno, get_selected_frame (NULL));
(*pos) += 2;
if (val == NULL)
error ("Value of register %s not available.",
- frame_map_regnum_to_name (get_selected_frame (), regno));
+ frame_map_regnum_to_name (get_selected_frame (NULL), regno));
else
return val;
}
Index: frame.c
===================================================================
RCS file: /cvs/src/src/gdb/frame.c,v
retrieving revision 1.191
diff -p -u -r1.191 frame.c
--- frame.c 1 Sep 2004 14:13:33 -0000 1.191
+++ frame.c 29 Oct 2004 20:21:10 -0000
@@ -822,13 +822,19 @@ struct frame_info *deprecated_selected_f
thrown. */
struct frame_info *
-get_selected_frame (void)
+get_selected_frame (const char *message)
{
if (deprecated_selected_frame == NULL)
- /* Hey! Don't trust this. It should really be re-finding the
- last selected frame of the currently selected thread. This,
- though, is better than nothing. */
- select_frame (get_current_frame ());
+ {
+ if (message != NULL && (!target_has_registers
+ || !target_has_stack
+ || !target_has_memory))
+ error ("%s", message);
+ /* Hey! Don't trust this. It should really be re-finding the
+ last selected frame of the currently selected thread. This,
+ though, is better than nothing. */
+ select_frame (get_current_frame ());
+ }
/* There is always a frame. */
gdb_assert (deprecated_selected_frame != NULL);
return deprecated_selected_frame;
@@ -843,7 +849,7 @@ deprecated_safe_get_selected_frame (void
{
if (!target_has_registers || !target_has_stack || !target_has_memory)
return NULL;
- return get_selected_frame ();
+ return get_selected_frame (NULL);
}
/* Select frame FI (or NULL - to invalidate the current frame). */
Index: frame.h
===================================================================
RCS file: /cvs/src/src/gdb/frame.h,v
retrieving revision 1.144
diff -p -u -r1.144 frame.h
--- frame.h 8 Sep 2004 04:56:20 -0000 1.144
+++ frame.h 29 Oct 2004 20:21:10 -0000
@@ -219,13 +219,15 @@ extern void flush_cached_frames (void);
extern void reinit_frame_cache (void);
/* On demand, create the selected frame and then return it. If the
- selected frame can not be created, this function throws an error. */
+ selected frame can not be created, this function prints then throws
+ an error. When MESSAGE is non-NULL, use it for the error message,
+ otherwize use a generic error message. */
/* FIXME: cagney/2002-11-28: At present, when there is no selected
frame, this function always returns the current (inner most) frame.
It should instead, when a thread has previously had its frame
selected (but not resumed) and the frame cache invalidated, find
and then return that thread's previously selected frame. */
-extern struct frame_info *get_selected_frame (void);
+extern struct frame_info *get_selected_frame (const char *message);
/* Select a specific frame. NULL, apparently implies re-select the
inner most frame. */
Index: infcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/infcmd.c,v
retrieving revision 1.123
diff -p -u -r1.123 infcmd.c
--- infcmd.c 13 Sep 2004 18:26:28 -0000 1.123
+++ infcmd.c 29 Oct 2004 20:21:10 -0000
@@ -1242,7 +1242,7 @@ finish_command (char *arg, int from_tty)
if (from_tty)
{
printf_filtered ("Run till exit from ");
- print_stack_frame (get_selected_frame (), 1, LOCATION);
+ print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
}
/* If running asynchronously and the target support asynchronous
Index: inflow.c
===================================================================
RCS file: /cvs/src/src/gdb/inflow.c,v
retrieving revision 1.24
diff -p -u -r1.24 inflow.c
--- inflow.c 11 Aug 2004 09:00:57 -0000 1.24
+++ inflow.c 29 Oct 2004 20:21:10 -0000
@@ -594,7 +594,7 @@ kill_command (char *arg, int from_tty)
if (deprecated_selected_frame == NULL)
fputs_filtered ("No selected stack frame.\n", gdb_stdout);
else
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
bfd_cache_close_all ();
}
Index: infrun.c
===================================================================
RCS file: /cvs/src/src/gdb/infrun.c,v
retrieving revision 1.178
diff -p -u -r1.178 infrun.c
--- infrun.c 27 Sep 2004 17:58:08 -0000 1.178
+++ infrun.c 29 Oct 2004 20:21:10 -0000
@@ -3014,7 +3014,7 @@ normal_stop (void)
LOCATION: Print only location
SRC_AND_LOC: Print location and source line */
if (do_frame_printing)
- print_stack_frame (get_selected_frame (), 0, source_flag);
+ print_stack_frame (get_selected_frame (NULL), 0, source_flag);
/* Display the auto-display expressions. */
do_displays ();
Index: ocd.c
===================================================================
RCS file: /cvs/src/src/gdb/ocd.c,v
retrieving revision 1.31
diff -p -u -r1.31 ocd.c
--- ocd.c 26 Jul 2004 14:53:04 -0000 1.31
+++ ocd.c 29 Oct 2004 20:21:10 -0000
@@ -225,7 +225,7 @@ ocd_start_remote (void *dummy)
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- print_stack_frame (get_selected_frame (), 0, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
buf[0] = OCD_LOG_FILE;
buf[1] = 3; /* close existing WIGGLERS.LOG */
Index: remote-e7000.c
===================================================================
RCS file: /cvs/src/src/gdb/remote-e7000.c,v
retrieving revision 1.46
diff -p -u -r1.46 remote-e7000.c
--- remote-e7000.c 8 Oct 2004 20:29:54 -0000 1.46
+++ remote-e7000.c 29 Oct 2004 20:21:10 -0000
@@ -630,7 +630,7 @@ e7000_start_remote (void *dummy)
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- print_stack_frame (get_selected_frame (), 0, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
return 1;
}
Index: remote-mips.c
===================================================================
RCS file: /cvs/src/src/gdb/remote-mips.c,v
retrieving revision 1.52
diff -p -u -r1.52 remote-mips.c
--- remote-mips.c 8 Oct 2004 20:29:54 -0000 1.52
+++ remote-mips.c 29 Oct 2004 20:21:10 -0000
@@ -1586,7 +1586,7 @@ device is attached to the target board (
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- print_stack_frame (get_selected_frame (), 0, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
xfree (serial_port_name);
}
Index: remote-rdp.c
===================================================================
RCS file: /cvs/src/src/gdb/remote-rdp.c,v
retrieving revision 1.41
diff -p -u -r1.41 remote-rdp.c
--- remote-rdp.c 8 Oct 2004 20:29:54 -0000 1.41
+++ remote-rdp.c 29 Oct 2004 20:21:10 -0000
@@ -1181,7 +1181,7 @@ remote_rdp_open (char *args, int from_tt
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- print_stack_frame (get_selected_frame (), 0, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
}
Index: sh-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sh-tdep.c,v
retrieving revision 1.178
diff -p -u -r1.178 sh-tdep.c
--- sh-tdep.c 29 Oct 2004 14:00:56 -0000 1.178
+++ sh-tdep.c 29 Oct 2004 20:21:11 -0000
@@ -2033,7 +2033,7 @@ sh_do_fp_register (struct gdbarch *gdbar
raw_buffer = (char *) alloca (register_size (gdbarch, FP0_REGNUM));
/* Get the data in raw format. */
- if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ if (!frame_register_read (get_selected_frame (NULL), regnum, raw_buffer))
error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
/* Get the register as a number */
@@ -2071,7 +2071,7 @@ sh_do_register (struct gdbarch *gdbarch,
print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
/* Get the data in raw format. */
- if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ if (!frame_register_read (get_selected_frame (NULL), regnum, raw_buffer))
fprintf_filtered (file, "*value not available*\n");
val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
Index: sh64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sh64-tdep.c,v
retrieving revision 1.32
diff -p -u -r1.32 sh64-tdep.c
--- sh64-tdep.c 3 Sep 2004 17:13:47 -0000 1.32
+++ sh64-tdep.c 29 Oct 2004 20:21:11 -0000
@@ -2538,7 +2538,7 @@ sh_do_fp_register (struct gdbarch *gdbar
raw_buffer = (char *) alloca (register_size (gdbarch, FP0_REGNUM));
/* Get the data in raw format. */
- if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ if (!frame_register_read (get_selected_frame (NULL), regnum, raw_buffer))
error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
/* Get the register as a number */
@@ -2618,7 +2618,7 @@ sh_do_register (struct gdbarch *gdbarch,
print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
/* Get the data in raw format. */
- if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
+ if (!frame_register_read (get_selected_frame (NULL), regnum, raw_buffer))
fprintf_filtered (file, "*value not available*\n");
val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
Index: stack.c
===================================================================
RCS file: /cvs/src/src/gdb/stack.c,v
retrieving revision 1.112
diff -p -u -r1.112 stack.c
--- stack.c 3 Aug 2004 00:57:26 -0000 1.112
+++ stack.c 29 Oct 2004 20:21:11 -0000
@@ -1445,9 +1445,8 @@ print_frame_label_vars (struct frame_inf
void
locals_info (char *args, int from_tty)
{
- if (!deprecated_selected_frame)
- error ("No frame selected.");
- print_frame_local_vars (deprecated_selected_frame, 0, gdb_stdout);
+ print_frame_local_vars (get_selected_frame ("No frame selected."),
+ 0, gdb_stdout);
}
static void
@@ -1467,10 +1466,8 @@ catch_info (char *ignore, int from_tty)
else
{
/* Assume g++ compiled code -- old v 4.16 behaviour */
- if (!deprecated_selected_frame)
- error ("No frame selected.");
-
- print_frame_label_vars (deprecated_selected_frame, 0, gdb_stdout);
+ print_frame_label_vars (get_selected_frame ("No frame selected."),
+ 0, gdb_stdout);
}
}
@@ -1537,9 +1534,8 @@ print_frame_arg_vars (struct frame_info
void
args_info (char *ignore, int from_tty)
{
- if (!deprecated_selected_frame)
- error ("No frame selected.");
- print_frame_arg_vars (deprecated_selected_frame, gdb_stdout);
+ print_frame_arg_vars (get_selected_frame ("No frame selected."),
+ gdb_stdout);
}
@@ -1662,7 +1658,7 @@ void
frame_command (char *level_exp, int from_tty)
{
select_frame_command (level_exp, from_tty);
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
/* The XDB Compatibility command to print the current frame. */
@@ -1670,9 +1666,7 @@ frame_command (char *level_exp, int from
static void
current_frame_command (char *level_exp, int from_tty)
{
- if (target_has_stack == 0 || deprecated_selected_frame == 0)
- error ("No stack.");
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame ("No stack."), 1, SRC_AND_LOC);
}
/* Select the frame up one or COUNT stack levels
@@ -1687,10 +1681,7 @@ up_silently_base (char *count_exp)
count = parse_and_eval_long (count_exp);
count1 = count;
- if (target_has_stack == 0 || deprecated_selected_frame == 0)
- error ("No stack.");
-
- fi = find_relative_frame (deprecated_selected_frame, &count1);
+ fi = find_relative_frame (get_selected_frame ("No stack."), &count1);
if (count1 != 0 && count_exp == 0)
error ("Initial frame selected; you cannot go up.");
select_frame (fi);
@@ -1706,7 +1697,7 @@ static void
up_command (char *count_exp, int from_tty)
{
up_silently_base (count_exp);
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
/* Select the frame down one or COUNT stack levels
@@ -1721,10 +1712,7 @@ down_silently_base (char *count_exp)
count = -parse_and_eval_long (count_exp);
count1 = count;
- if (target_has_stack == 0 || deprecated_selected_frame == 0)
- error ("No stack.");
-
- frame = find_relative_frame (deprecated_selected_frame, &count1);
+ frame = find_relative_frame (get_selected_frame ("No stack."), &count1);
if (count1 != 0 && count_exp == 0)
{
@@ -1749,7 +1737,7 @@ static void
down_command (char *count_exp, int from_tty)
{
down_silently_base (count_exp);
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
void
@@ -1759,13 +1747,7 @@ return_command (char *retval_exp, int fr
struct value *return_value = NULL;
const char *query_prefix = "";
- /* FIXME: cagney/2003-10-20: Perform a minimal existance test on the
- target. If that fails, error out. For the moment don't rely on
- get_selected_frame as it's error message is the the singularly
- obscure "No registers". */
- if (!target_has_registers)
- error ("No selected frame.");
- thisfun = get_frame_function (get_selected_frame ());
+ thisfun = get_frame_function (get_selected_frame ("No selected frame."));
/* Compute the return value. If the computation triggers an error,
let it bail. If the return type can't be handled, set
@@ -1848,7 +1830,7 @@ If you continue, the return value that y
/* First discard all frames inner-to the selected frame (making the
selected frame current). */
{
- struct frame_id selected_id = get_frame_id (get_selected_frame ());
+ struct frame_id selected_id = get_frame_id (get_selected_frame (NULL));
while (!frame_id_eq (selected_id, get_frame_id (get_current_frame ())))
{
if (frame_id_inner (selected_id, get_frame_id (get_current_frame ())))
Index: thread.c
===================================================================
RCS file: /cvs/src/src/gdb/thread.c,v
retrieving revision 1.38
diff -p -u -r1.38 thread.c
--- thread.c 25 Aug 2004 15:18:05 -0000 1.38
+++ thread.c 29 Oct 2004 20:21:11 -0000
@@ -407,7 +407,7 @@ info_threads_command (char *arg, int fro
struct thread_info *tp;
ptid_t current_ptid;
struct frame_info *cur_frame;
- struct frame_id saved_frame_id = get_frame_id (get_selected_frame ());
+ struct frame_id saved_frame_id = get_frame_id (get_selected_frame (NULL));
char *extra_info;
prune_threads ();
@@ -428,7 +428,7 @@ info_threads_command (char *arg, int fro
puts_filtered (" ");
switch_to_thread (tp->ptid);
- print_stack_frame (get_selected_frame (), 0, LOCATION);
+ print_stack_frame (get_selected_frame (NULL), 0, LOCATION);
}
switch_to_thread (current_ptid);
@@ -442,7 +442,7 @@ info_threads_command (char *arg, int fro
{
/* Ooops, can't restore, tell user where we are. */
warning ("Couldn't restore frame in current thread, at frame 0");
- print_stack_frame (get_selected_frame (), 0, LOCATION);
+ print_stack_frame (get_selected_frame (NULL), 0, LOCATION);
}
else
{
@@ -661,7 +661,7 @@ do_captured_thread_select (struct ui_out
ui_out_text (uiout, target_tid_to_str (inferior_ptid));
ui_out_text (uiout, ")]");
- print_stack_frame (get_selected_frame (), 1, SRC_AND_LOC);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
return GDB_RC_OK;
}
Index: tracepoint.c
===================================================================
RCS file: /cvs/src/src/gdb/tracepoint.c,v
retrieving revision 1.64
diff -p -u -r1.64 tracepoint.c
--- tracepoint.c 13 Sep 2004 18:26:30 -0000 1.64
+++ tracepoint.c 29 Oct 2004 20:21:11 -0000
@@ -1949,7 +1949,7 @@ finish_tfind_command (char *msg,
else
print_what = SRC_AND_LOC;
- print_stack_frame (get_selected_frame (), 1, print_what);
+ print_stack_frame (get_selected_frame (NULL), 1, print_what);
do_displays ();
}
}
Index: mi/mi-cmd-stack.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmd-stack.c,v
retrieving revision 1.23
diff -p -u -r1.23 mi-cmd-stack.c
--- mi/mi-cmd-stack.c 28 Apr 2004 16:36:25 -0000 1.23
+++ mi/mi-cmd-stack.c 29 Oct 2004 20:21:11 -0000
@@ -139,7 +139,7 @@ mi_cmd_stack_list_locals (char *command,
if (argc != 1)
error ("mi_cmd_stack_list_locals: Usage: PRINT_VALUES");
- frame = get_selected_frame ();
+ frame = get_selected_frame (NULL);
if (strcmp (argv[0], "0") == 0
|| strcmp (argv[0], "--no-values") == 0)
Index: mi/mi-main.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-main.c,v
retrieving revision 1.65
diff -p -u -r1.65 mi-main.c
--- mi/mi-main.c 12 Sep 2004 15:00:42 -0000 1.65
+++ mi/mi-main.c 29 Oct 2004 20:21:11 -0000
@@ -181,7 +181,7 @@ mi_cmd_exec_return (char *args, int from
/* Because we have called return_command with from_tty = 0, we need
to print the frame here. */
- print_stack_frame (get_selected_frame (), 1, LOC_AND_ADDRESS);
+ print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
return MI_CMD_DONE;
}