mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-03-04 07:27:54 +00:00
Include frame information for *stopped due to CLI commands.
* ada-tasks.c (ada_normal_stop_observer): Adjust prototype. * infcmd.c (finish_command_continuation): Pass '1' for 'print_frame' parameter to the observer. * infrun.c (normal_stop): Don't print mi-specific information here. Pass 'stop_print_frame' to the 'print_frame' parameter of the observer. * mi/mi-interp.c (mi_on_normal_stop): Adjust prototype. If we need to print frame, and current uiout is not the MI one, print frame again.
This commit is contained in:
parent
faafb04710
commit
1d33d6baa4
@ -1,3 +1,17 @@
|
|||||||
|
2009-02-14 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
|
Include frame information for *stopped due to CLI commands.
|
||||||
|
|
||||||
|
* ada-tasks.c (ada_normal_stop_observer): Adjust prototype.
|
||||||
|
* infcmd.c (finish_command_continuation): Pass '1' for
|
||||||
|
'print_frame' parameter to the observer.
|
||||||
|
* infrun.c (normal_stop): Don't print mi-specific information
|
||||||
|
here. Pass 'stop_print_frame' to the 'print_frame' parameter
|
||||||
|
of the observer.
|
||||||
|
* mi/mi-interp.c (mi_on_normal_stop): Adjust prototype.
|
||||||
|
If we need to print frame, and current uiout is not the MI one,
|
||||||
|
print frame again.
|
||||||
|
|
||||||
2009-02-13 Pierre Muller <muller@ics.u-strasbg.fr>
|
2009-02-13 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
* xtensa-tdep.c (call0_analyze_prologue): Delete BSZ macro.
|
* xtensa-tdep.c (call0_analyze_prologue): Delete BSZ macro.
|
||||||
|
@ -951,7 +951,7 @@ ada_task_list_changed (void)
|
|||||||
/* The 'normal_stop' observer notification callback. */
|
/* The 'normal_stop' observer notification callback. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ada_normal_stop_observer (struct bpstats *unused_args)
|
ada_normal_stop_observer (struct bpstats *unused_args, int unused_args2)
|
||||||
{
|
{
|
||||||
/* The inferior has been resumed, and just stopped. This means that
|
/* The inferior has been resumed, and just stopped. This means that
|
||||||
our task_list needs to be recomputed before it can be used again. */
|
our task_list needs to be recomputed before it can be used again. */
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2009-02-14 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
|
* observer.texi: Add parameter 'print_frame' to normal_stop
|
||||||
|
observer.
|
||||||
|
|
||||||
2009-02-07 Eli Zaretskii <eliz@gnu.org>
|
2009-02-07 Eli Zaretskii <eliz@gnu.org>
|
||||||
|
|
||||||
* gdb.texinfo (Basic Python): Fix change from 2009-02-04.
|
* gdb.texinfo (Basic Python): Fix change from 2009-02-04.
|
||||||
|
@ -88,8 +88,11 @@ Send a notification to all @var{event} observers.
|
|||||||
|
|
||||||
The following observable events are defined:
|
The following observable events are defined:
|
||||||
|
|
||||||
@deftypefun void normal_stop (struct bpstats *@var{bs})
|
@deftypefun void normal_stop (struct bpstats *@var{bs}, int @var{print_frame})
|
||||||
The inferior has stopped for real.
|
The inferior has stopped for real. The @var{bs} argument describes
|
||||||
|
the breakpoints were are stopped at, if any. Second argument
|
||||||
|
@var{print_frame} non-zero means display the location where the
|
||||||
|
inferior has stopped.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun void target_changed (struct target_ops *@var{target})
|
@deftypefun void target_changed (struct target_ops *@var{target})
|
||||||
|
@ -1374,7 +1374,7 @@ finish_command_continuation (void *arg)
|
|||||||
next stop will be in the same thread that we started doing a
|
next stop will be in the same thread that we started doing a
|
||||||
finish on. This suppressing (or some other replacement means)
|
finish on. This suppressing (or some other replacement means)
|
||||||
should be a thread property. */
|
should be a thread property. */
|
||||||
observer_notify_normal_stop (bs);
|
observer_notify_normal_stop (bs, 1 /* print frame */);
|
||||||
suppress_stop_observer = 0;
|
suppress_stop_observer = 0;
|
||||||
delete_breakpoint (a->breakpoint);
|
delete_breakpoint (a->breakpoint);
|
||||||
}
|
}
|
||||||
|
21
gdb/infrun.c
21
gdb/infrun.c
@ -4360,22 +4360,6 @@ Further execution is probably impossible.\n"));
|
|||||||
internal_error (__FILE__, __LINE__, _("Unknown value."));
|
internal_error (__FILE__, __LINE__, _("Unknown value."));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ui_out_is_mi_like_p (uiout))
|
|
||||||
{
|
|
||||||
|
|
||||||
ui_out_field_int (uiout, "thread-id",
|
|
||||||
pid_to_thread_id (inferior_ptid));
|
|
||||||
if (non_stop)
|
|
||||||
{
|
|
||||||
struct cleanup *back_to = make_cleanup_ui_out_list_begin_end
|
|
||||||
(uiout, "stopped-threads");
|
|
||||||
ui_out_field_int (uiout, NULL,
|
|
||||||
pid_to_thread_id (inferior_ptid));
|
|
||||||
do_cleanups (back_to);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ui_out_field_string (uiout, "stopped-threads", "all");
|
|
||||||
}
|
|
||||||
/* The behavior of this routine with respect to the source
|
/* The behavior of this routine with respect to the source
|
||||||
flag is:
|
flag is:
|
||||||
SRC_LINE: Print only source line
|
SRC_LINE: Print only source line
|
||||||
@ -4430,9 +4414,10 @@ done:
|
|||||||
&& inferior_thread ()->step_multi))
|
&& inferior_thread ()->step_multi))
|
||||||
{
|
{
|
||||||
if (!ptid_equal (inferior_ptid, null_ptid))
|
if (!ptid_equal (inferior_ptid, null_ptid))
|
||||||
observer_notify_normal_stop (inferior_thread ()->stop_bpstat);
|
observer_notify_normal_stop (inferior_thread ()->stop_bpstat,
|
||||||
|
stop_print_frame);
|
||||||
else
|
else
|
||||||
observer_notify_normal_stop (NULL);
|
observer_notify_normal_stop (NULL, stop_print_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target_has_execution)
|
if (target_has_execution)
|
||||||
|
@ -51,7 +51,7 @@ static void mi1_command_loop (void);
|
|||||||
|
|
||||||
static void mi_insert_notify_hooks (void);
|
static void mi_insert_notify_hooks (void);
|
||||||
static void mi_remove_notify_hooks (void);
|
static void mi_remove_notify_hooks (void);
|
||||||
static void mi_on_normal_stop (struct bpstats *bs);
|
static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
|
||||||
|
|
||||||
static void mi_new_thread (struct thread_info *t);
|
static void mi_new_thread (struct thread_info *t);
|
||||||
static void mi_thread_exit (struct thread_info *t);
|
static void mi_thread_exit (struct thread_info *t);
|
||||||
@ -317,17 +317,46 @@ mi_inferior_exit (int pid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mi_on_normal_stop (struct bpstats *bs)
|
mi_on_normal_stop (struct bpstats *bs, int print_frame)
|
||||||
{
|
{
|
||||||
/* Since this can be called when CLI command is executing,
|
/* Since this can be called when CLI command is executing,
|
||||||
using cli interpreter, be sure to use MI uiout for output,
|
using cli interpreter, be sure to use MI uiout for output,
|
||||||
not the current one. */
|
not the current one. */
|
||||||
struct ui_out *uiout = interp_ui_out (top_level_interpreter ());
|
struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
|
||||||
struct mi_interp *mi = top_level_interpreter_data ();
|
struct mi_interp *mi = top_level_interpreter_data ();
|
||||||
|
|
||||||
|
if (print_frame)
|
||||||
|
{
|
||||||
|
if (uiout != mi_uiout)
|
||||||
|
{
|
||||||
|
/* The normal_stop function has printed frame information into
|
||||||
|
CLI uiout, or some other non-MI uiout. There's no way we
|
||||||
|
can extract proper fields from random uiout object, so we print
|
||||||
|
the frame again. In practice, this can only happen when running
|
||||||
|
a CLI command in MI. */
|
||||||
|
struct ui_out *saved_uiout = uiout;
|
||||||
|
uiout = mi_uiout;
|
||||||
|
print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
|
||||||
|
uiout = saved_uiout;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_out_field_int (mi_uiout, "thread-id",
|
||||||
|
pid_to_thread_id (inferior_ptid));
|
||||||
|
if (non_stop)
|
||||||
|
{
|
||||||
|
struct cleanup *back_to = make_cleanup_ui_out_list_begin_end
|
||||||
|
(mi_uiout, "stopped-threads");
|
||||||
|
ui_out_field_int (mi_uiout, NULL,
|
||||||
|
pid_to_thread_id (inferior_ptid));
|
||||||
|
do_cleanups (back_to);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ui_out_field_string (mi_uiout, "stopped-threads", "all");
|
||||||
|
}
|
||||||
|
|
||||||
fputs_unfiltered ("*stopped", raw_stdout);
|
fputs_unfiltered ("*stopped", raw_stdout);
|
||||||
mi_out_put (uiout, raw_stdout);
|
mi_out_put (mi_uiout, raw_stdout);
|
||||||
mi_out_rewind (uiout);
|
mi_out_rewind (mi_uiout);
|
||||||
fputs_unfiltered ("\n", raw_stdout);
|
fputs_unfiltered ("\n", raw_stdout);
|
||||||
gdb_flush (raw_stdout);
|
gdb_flush (raw_stdout);
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2009-02-14 Vladimir Prus <vladimir@codesourcery.com>
|
||||||
|
|
||||||
|
* lib/mi-support.exp (mi_expect_stop): Adjust the order of fields.
|
||||||
|
(mi_expect_interrupt): Likewise.
|
||||||
|
* gdb.mi/mi-cli.exp: Check that "step" results in proper *stopped
|
||||||
|
response.
|
||||||
|
|
||||||
2009-02-14 Pierre Muller <muller@ics.u-strasbg.fr>
|
2009-02-14 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
* lib/gdb.exp (get_hexadecimal_valueof): New procedure.
|
* lib/gdb.exp (get_hexadecimal_valueof): New procedure.
|
||||||
|
@ -140,6 +140,9 @@ mi_gdb_test "500-stack-select-frame 0" \
|
|||||||
{500\^done} \
|
{500\^done} \
|
||||||
"-stack-select-frame 0"
|
"-stack-select-frame 0"
|
||||||
|
|
||||||
|
mi_execute_to "interpreter-exec console step" "" "callee4" "" ".*basics.c" "29" \
|
||||||
|
"" "check *stopped from CLI command"
|
||||||
|
|
||||||
# NOTE: cagney/2003-02-03: Not yet.
|
# NOTE: cagney/2003-02-03: Not yet.
|
||||||
# mi_gdb_test "-break-insert -t basics.c:$line_main_hello" \
|
# mi_gdb_test "-break-insert -t basics.c:$line_main_hello" \
|
||||||
# {.*=breakpoint-create,number="3".*\^done} \
|
# {.*=breakpoint-create,number="3".*\^done} \
|
||||||
|
@ -1018,13 +1018,13 @@ proc mi_expect_stop { reason func args file line extra test } {
|
|||||||
|
|
||||||
set any "\[^\n\]*"
|
set any "\[^\n\]*"
|
||||||
|
|
||||||
verbose -log "mi_expect_stop: expecting: \\*stopped,${r}${a}${bn}thread-id=\"$decimal\",stopped-threads=$any,frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\"$any$file\",fullname=\"${fullname_syntax}$file\",line=\"$line\"\}$after_stopped\r\n($thread_selected_re)?$prompt_re"
|
verbose -log "mi_expect_stop: expecting: \\*stopped,${r}${a}${bn}frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\"$any$file\",fullname=\"${fullname_syntax}$file\",line=\"$line\"\}$after_stopped,thread-id=\"$decimal\",stopped-threads=$any\r\n($thread_selected_re)?$prompt_re"
|
||||||
gdb_expect {
|
gdb_expect {
|
||||||
-re "\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",stopped-threads=$any,frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\"$any$file\",fullname=\"${fullname_syntax}$file\",line=\"($line)\"\}$after_stopped\r\n($thread_selected_re)?$prompt_re" {
|
-re "\\*stopped,${r}${a}${bn}frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\"$any$file\",fullname=\"${fullname_syntax}$file\",line=\"($line)\"\}$after_stopped,thread-id=\"$decimal\",stopped-threads=$any\r\n($thread_selected_re)?$prompt_re" {
|
||||||
pass "$test"
|
pass "$test"
|
||||||
return $expect_out(2,string)
|
return $expect_out(2,string)
|
||||||
}
|
}
|
||||||
-re "\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",stopped-threads=$any,frame=\{addr=\"$hex\",func=\"$any\",args=\[\\\[\{\]$any\[\\\]\}\],file=\"$any\",fullname=\"${fullname_syntax}$any\",line=\"\[0-9\]*\"\}$any\r\n$prompt_re" {
|
-re "\\*stopped,${r}${a}${bn}frame=\{addr=\"$hex\",func=\"$any\",args=\[\\\[\{\]$any\[\\\]\}\],file=\"$any\",fullname=\"${fullname_syntax}$any\",line=\"\[0-9\]*\"\}thread-id=\"$decimal\",stopped-threads=$any\r\n$prompt_re" {
|
||||||
verbose -log "got $expect_out(buffer)"
|
verbose -log "got $expect_out(buffer)"
|
||||||
fail "$test (stopped at wrong place)"
|
fail "$test (stopped at wrong place)"
|
||||||
return -1
|
return -1
|
||||||
@ -1059,9 +1059,9 @@ proc mi_expect_interrupt { test } {
|
|||||||
set any "\[^\n\]*"
|
set any "\[^\n\]*"
|
||||||
|
|
||||||
# A signal can land anywhere, just ignore the location
|
# A signal can land anywhere, just ignore the location
|
||||||
verbose -log "mi_expect_interrupt: expecting: \\*stopped,${r},thread-id=\"$decimal\",stopped-threads=$any\r\n$prompt_re"
|
verbose -log "mi_expect_interrupt: expecting: \\*stopped,${r}$any\r\n$prompt_re"
|
||||||
gdb_expect {
|
gdb_expect {
|
||||||
-re "\\*stopped,${r},thread-id=\"$decimal\",stopped-threads=$any\r\n$prompt_re" {
|
-re "\\*stopped,${r}$any\r\n$prompt_re" {
|
||||||
pass "$test"
|
pass "$test"
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user