Debug output tweaks in the Linux target backends

This adds/tweaks a few debug logs I found useful recently.

gdb/gdbserver/ChangeLog:
2015-03-24  Pedro Alves  <palves@redhat.com>

	* linux-low.c (check_stopped_by_breakpoint): Tweak debug log
	output.  Also dump TRAP_TRACE.
	(linux_low_filter_event): In debug output, distinguish a
	resume_stop SIGSTOP from a delayed SIGSTOP.

gdb/ChangeLog:
2015-03-24  Pedro Alves  <palves@redhat.com>

	* linux-nat.c (linux_nat_resume): Output debug logs before trying
	to resume the event lwp.  Use the lwp's ptid instead of the passed
	in (maybe wildcard) ptid.
	(stop_wait_callback): Tweak debug log output.
	(check_stopped_by_breakpoint): Tweak debug log output.  Also dump
	TRAP_TRACE.
	(linux_nat_filter_event): In debug output, distinguish a
	resume_stop SIGSTOP from a delayed SIGSTOP.  Output debug logs
	before trying to resume the lwp.
This commit is contained in:
Pedro Alves 2015-03-24 18:31:51 +00:00
parent 283a99589a
commit 2bf6fb9d85
4 changed files with 74 additions and 26 deletions

View file

@ -1,3 +1,15 @@
2015-03-24 Pedro Alves <palves@redhat.com>
* linux-nat.c (linux_nat_resume): Output debug logs before trying
to resume the event lwp. Use the lwp's ptid instead of the passed
in (maybe wildcard) ptid.
(stop_wait_callback): Tweak debug log output.
(check_stopped_by_breakpoint): Tweak debug log output. Also dump
TRAP_TRACE.
(linux_nat_filter_event): In debug output, distinguish a
resume_stop SIGSTOP from a delayed SIGSTOP. Output debug logs
before trying to resume the lwp.
2015-03-24 Joel Brobecker <brobecker@adacore.com> 2015-03-24 Joel Brobecker <brobecker@adacore.com>
* gdbtypes.h (struct dynamic_prop_list) <prop>: Remove * gdbtypes.h (struct dynamic_prop_list) <prop>: Remove

View file

@ -1,3 +1,10 @@
2015-03-24 Pedro Alves <palves@redhat.com>
* linux-low.c (check_stopped_by_breakpoint): Tweak debug log
output. Also dump TRAP_TRACE.
(linux_low_filter_event): In debug output, distinguish a
resume_stop SIGSTOP from a delayed SIGSTOP.
2015-03-24 Gary Benson <gbenson@redhat.com> 2015-03-24 Gary Benson <gbenson@redhat.com>
* linux-x86-low.c (x86_linux_new_thread): Moved to * linux-x86-low.c (x86_linux_new_thread): Moved to

View file

@ -562,7 +562,7 @@ check_stopped_by_breakpoint (struct lwp_info *lwp)
{ {
struct thread_info *thr = get_lwp_thread (lwp); struct thread_info *thr = get_lwp_thread (lwp);
debug_printf ("CSBB: Push back software breakpoint for %s\n", debug_printf ("CSBB: %s stopped by software breakpoint\n",
target_pid_to_str (ptid_of (thr))); target_pid_to_str (ptid_of (thr)));
} }
@ -585,8 +585,8 @@ check_stopped_by_breakpoint (struct lwp_info *lwp)
{ {
struct thread_info *thr = get_lwp_thread (lwp); struct thread_info *thr = get_lwp_thread (lwp);
debug_printf ("CSBB: Push back hardware " debug_printf ("CSBB: %s stopped by hardware "
"breakpoint/watchpoint for %s\n", "breakpoint/watchpoint\n",
target_pid_to_str (ptid_of (thr))); target_pid_to_str (ptid_of (thr)));
} }
@ -595,6 +595,16 @@ check_stopped_by_breakpoint (struct lwp_info *lwp)
current_thread = saved_thread; current_thread = saved_thread;
return 1; return 1;
} }
else if (siginfo.si_code == TRAP_TRACE)
{
if (debug_threads)
{
struct thread_info *thr = get_lwp_thread (lwp);
debug_printf ("CSBB: %s stopped by trace\n",
target_pid_to_str (ptid_of (thr)));
}
}
} }
} }
#else #else
@ -2059,16 +2069,28 @@ linux_low_filter_event (int lwpid, int wstat)
{ {
/* We want to report the stop to the core. Treat the /* We want to report the stop to the core. Treat the
SIGSTOP as a normal event. */ SIGSTOP as a normal event. */
if (debug_threads)
debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n",
target_pid_to_str (ptid_of (thread)));
} }
else if (stopping_threads != NOT_STOPPING_THREADS) else if (stopping_threads != NOT_STOPPING_THREADS)
{ {
/* Stopping threads. We don't want this SIGSTOP to end up /* Stopping threads. We don't want this SIGSTOP to end up
pending. */ pending. */
if (debug_threads)
debug_printf ("LLW: SIGSTOP caught for %s "
"while stopping threads.\n",
target_pid_to_str (ptid_of (thread)));
return NULL; return NULL;
} }
else else
{ {
/* Filter out the event. */ /* This is a delayed SIGSTOP. Filter out the event. */
if (debug_threads)
debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
child->stepping ? "step" : "continue",
target_pid_to_str (ptid_of (thread)));
linux_resume_one_lwp (child, child->stepping, 0, NULL); linux_resume_one_lwp (child, child->stepping, 0, NULL);
return NULL; return NULL;
} }

View file

@ -1799,16 +1799,16 @@ linux_nat_resume (struct target_ops *ops,
if (resume_many) if (resume_many)
iterate_over_lwps (ptid, linux_nat_resume_callback, lp); iterate_over_lwps (ptid, linux_nat_resume_callback, lp);
linux_resume_one_lwp (lp, step, signo);
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"LLR: %s %s, %s (resume event thread)\n", "LLR: %s %s, %s (resume event thread)\n",
step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
target_pid_to_str (ptid), target_pid_to_str (lp->ptid),
(signo != GDB_SIGNAL_0 (signo != GDB_SIGNAL_0
? strsignal (gdb_signal_to_host (signo)) : "0")); ? strsignal (gdb_signal_to_host (signo)) : "0"));
linux_resume_one_lwp (lp, step, signo);
if (target_can_async_p ()) if (target_can_async_p ())
target_async (inferior_event_handler, 0); target_async (inferior_event_handler, 0);
} }
@ -2618,7 +2618,7 @@ stop_wait_callback (struct lwp_info *lp, void *data)
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"SWC: Delayed SIGSTOP caught for %s.\n", "SWC: Expected SIGSTOP caught for %s.\n",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
/* Reset SIGNALLED only after the stop_wait_callback call /* Reset SIGNALLED only after the stop_wait_callback call
@ -2795,8 +2795,8 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
{ {
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"CSBB: Push back software " "CSBB: %s stopped by software "
"breakpoint for %s\n", "breakpoint\n",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
/* Back up the PC if necessary. */ /* Back up the PC if necessary. */
@ -2811,14 +2811,21 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
{ {
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"CSBB: Push back hardware " "CSBB: %s stopped by hardware "
"breakpoint/watchpoint for %s\n", "breakpoint/watchpoint\n",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
lp->stop_pc = pc; lp->stop_pc = pc;
lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; lp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
return 1; return 1;
} }
else if (siginfo.si_code == TRAP_TRACE)
{
if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog,
"CSBB: %s stopped by trace\n",
target_pid_to_str (lp->ptid));
}
} }
} }
#else #else
@ -2830,7 +2837,7 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
breakpoint instruction. */ breakpoint instruction. */
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"CB: Push back software breakpoint for %s\n", "CSBB: %s stopped by software breakpoint\n",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
/* Back up the PC if necessary. */ /* Back up the PC if necessary. */
@ -2846,7 +2853,7 @@ check_stopped_by_breakpoint (struct lwp_info *lp)
{ {
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"CB: Push back hardware breakpoint for %s\n", "CSBB: stopped by hardware breakpoint %s\n",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
lp->stop_pc = pc; lp->stop_pc = pc;
@ -3206,28 +3213,28 @@ linux_nat_filter_event (int lwpid, int status)
if (lp->signalled if (lp->signalled
&& WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP) && WIFSTOPPED (status) && WSTOPSIG (status) == SIGSTOP)
{ {
if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog,
"LLW: Delayed SIGSTOP caught for %s.\n",
target_pid_to_str (lp->ptid));
lp->signalled = 0; lp->signalled = 0;
if (lp->last_resume_kind != resume_stop) if (lp->last_resume_kind == resume_stop)
{ {
/* This is a delayed SIGSTOP. */
linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
if (debug_linux_nat) if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"LLW: %s %s, 0, 0 (discard SIGSTOP)\n", "LLW: resume_stop SIGSTOP caught for %s.\n",
target_pid_to_str (lp->ptid));
}
else
{
/* This is a delayed SIGSTOP. Filter out the event. */
if (debug_linux_nat)
fprintf_unfiltered (gdb_stdlog,
"LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
lp->step ? lp->step ?
"PTRACE_SINGLESTEP" : "PTRACE_CONT", "PTRACE_SINGLESTEP" : "PTRACE_CONT",
target_pid_to_str (lp->ptid)); target_pid_to_str (lp->ptid));
linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0);
gdb_assert (lp->resumed); gdb_assert (lp->resumed);
/* Discard the event. */
return NULL; return NULL;
} }
} }