mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-27 22:10:32 +00:00
gdb/
* infrun.c (sched_multi): New global. (resume): If sched_multi is set, resume only threads of the current inferior. (prepare_to_proceed): Don't switch over to wait_ptid if we're resuming a different inferior, and sched_multi is off. (show_schedule_multiple): New. (_initialize_infrun): Register new "set schedule-multiple" command. * inferior.h (sched_multi): Declare. * NEWS: Mention new "schedule-multiple" setting. gdb/doc/ * gdb.texinfo (All-Stop): Document new 'set schedule-multiple' command.
This commit is contained in:
parent
8656620041
commit
d4db2f362f
@ -1,3 +1,15 @@
|
||||
2009-06-11 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* infrun.c (sched_multi): New global.
|
||||
(resume): If sched_multi is set, resume only threads of the
|
||||
current inferior.
|
||||
(prepare_to_proceed): Don't switch over to wait_ptid if we're
|
||||
resuming a different inferior, and sched_multi is off.
|
||||
(show_schedule_multiple): New.
|
||||
(_initialize_infrun): Register new "set schedule-multiple" command.
|
||||
* inferior.h (sched_multi): Declare.
|
||||
* NEWS: Mention new "schedule-multiple" setting.
|
||||
|
||||
2009-06-11 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* varobj.c (varobj_create): Properly restore the selected frame.
|
||||
|
5
gdb/NEWS
5
gdb/NEWS
@ -305,6 +305,11 @@ show libthread-db-search-path
|
||||
Control list of directories which GDB will search for appropriate
|
||||
libthread_db.
|
||||
|
||||
set schedule-multiple (on|off)
|
||||
show schedule-multiple
|
||||
Allow GDB to resume all threads of all processes or only threads of
|
||||
the current process.
|
||||
|
||||
* New native configurations
|
||||
|
||||
x86/x86_64 Darwin i[34567]86-*-darwin*
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-06-11 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* gdb.texinfo (All-Stop): Document new 'set schedule-multiple'
|
||||
command.
|
||||
|
||||
2009-06-07 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* gdbint.texinfo (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete all
|
||||
|
@ -4650,6 +4650,36 @@ the current thread away from the thread that you are debugging.
|
||||
Display the current scheduler locking mode.
|
||||
@end table
|
||||
|
||||
@cindex resume threads of multiple processes simultaneously
|
||||
By default, when you issue one of the execution commands such as
|
||||
@code{continue}, @code{next} or @code{step}, @value{GDBN} allows only
|
||||
threads of the current inferior to run. For example, if @value{GDBN}
|
||||
is attached to two inferiors, each with two threads, the
|
||||
@code{continue} command resumes only the two threads of the current
|
||||
inferior. This is useful, for example, when you debug a program that
|
||||
forks and you want to hold the parent stopped (so that, for instance,
|
||||
it doesn't run to exit), while you debug the child. In other
|
||||
situations, you may not be interested in inspecting the current state
|
||||
of any of the processes @value{GDBN} is attached to, and you may want
|
||||
to resume them all until some breakpoint is hit. In the latter case,
|
||||
you can instruct @value{GDBN} to allow all threads of all the
|
||||
inferiors to run with the @w{@code{set schedule-multiple}} command.
|
||||
|
||||
@table @code
|
||||
@kindex set schedule-multiple
|
||||
@item set schedule-multiple
|
||||
Set the mode for allowing threads of multiple processes to be resumed
|
||||
when an execution command is issued. When @code{on}, all threads of
|
||||
all processes are allowed to run. When @code{off}, only the threads
|
||||
of the current process are resumed. The default is @code{off}. The
|
||||
@code{scheduler-locking} mode takes precedence when set to @code{on},
|
||||
or while you are stepping and set to @code{step}.
|
||||
|
||||
@item show schedule-multiple
|
||||
Display the current mode for resuming the execution of threads of
|
||||
multiple processes.
|
||||
@end table
|
||||
|
||||
@node Non-Stop Mode
|
||||
@subsection Non-Stop Mode
|
||||
|
||||
|
@ -135,6 +135,8 @@ extern void clear_proceed_status (void);
|
||||
|
||||
extern void proceed (CORE_ADDR, enum target_signal, int);
|
||||
|
||||
extern int sched_multi;
|
||||
|
||||
/* When set, stop the 'step' command if we enter a function which has
|
||||
no line number information. The normal behavior is that we step
|
||||
over such function. */
|
||||
|
62
gdb/infrun.c
62
gdb/infrun.c
@ -1091,6 +1091,11 @@ set_schedlock_func (char *args, int from_tty, struct cmd_list_element *c)
|
||||
}
|
||||
}
|
||||
|
||||
/* True if execution commands resume all threads of all processes by
|
||||
default; otherwise, resume only threads of the current inferior
|
||||
process. */
|
||||
int sched_multi = 0;
|
||||
|
||||
/* Try to setup for software single stepping over the specified location.
|
||||
Return 1 if target_resume() should use hardware single step.
|
||||
|
||||
@ -1201,13 +1206,25 @@ a command like `return' or `jump' to continue execution."));
|
||||
{
|
||||
ptid_t resume_ptid;
|
||||
|
||||
resume_ptid = RESUME_ALL; /* Default */
|
||||
|
||||
/* If STEP is set, it's a request to use hardware stepping
|
||||
facilities. But in that case, we should never
|
||||
use singlestep breakpoint. */
|
||||
gdb_assert (!(singlestep_breakpoints_inserted_p && step));
|
||||
|
||||
/* Decide the set of threads to ask the target to resume. Start
|
||||
by assuming everything will be resumed, than narrow the set
|
||||
by applying increasingly restricting conditions. */
|
||||
|
||||
/* By default, resume all threads of all processes. */
|
||||
resume_ptid = RESUME_ALL;
|
||||
|
||||
/* Maybe resume only all threads of the current process. */
|
||||
if (!sched_multi && target_supports_multi_process ())
|
||||
{
|
||||
resume_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
|
||||
}
|
||||
|
||||
/* Maybe resume a single thread after all. */
|
||||
if (singlestep_breakpoints_inserted_p
|
||||
&& stepping_past_singlestep_breakpoint)
|
||||
{
|
||||
@ -1224,9 +1241,8 @@ a command like `return' or `jump' to continue execution."));
|
||||
to support, and has no value. */
|
||||
resume_ptid = inferior_ptid;
|
||||
}
|
||||
|
||||
if ((step || singlestep_breakpoints_inserted_p)
|
||||
&& tp->trap_expected)
|
||||
else if ((step || singlestep_breakpoints_inserted_p)
|
||||
&& tp->trap_expected)
|
||||
{
|
||||
/* We're allowing a thread to run past a breakpoint it has
|
||||
hit, by single-stepping the thread with the breakpoint
|
||||
@ -1240,8 +1256,7 @@ a command like `return' or `jump' to continue execution."));
|
||||
breakpoint, not just the one at PC. */
|
||||
resume_ptid = inferior_ptid;
|
||||
}
|
||||
|
||||
if (non_stop)
|
||||
else if (non_stop)
|
||||
{
|
||||
/* With non-stop mode on, threads are always handled
|
||||
individually. */
|
||||
@ -1394,11 +1409,19 @@ prepare_to_proceed (int step)
|
||||
|| (scheduler_mode == schedlock_step
|
||||
&& step));
|
||||
|
||||
/* Don't switch over to WAIT_PTID if scheduler locking is on. */
|
||||
if (schedlock_enabled)
|
||||
return 0;
|
||||
|
||||
/* Don't switch over if we're about to resume some other process
|
||||
other than WAIT_PTID's, and schedule-multiple is off. */
|
||||
if (!sched_multi
|
||||
&& ptid_get_pid (wait_ptid) != ptid_get_pid (inferior_ptid))
|
||||
return 0;
|
||||
|
||||
/* Switched over from WAIT_PID. */
|
||||
if (!ptid_equal (wait_ptid, minus_one_ptid)
|
||||
&& !ptid_equal (inferior_ptid, wait_ptid)
|
||||
/* Don't single step WAIT_PID if scheduler locking is on. */
|
||||
&& !schedlock_enabled)
|
||||
&& !ptid_equal (inferior_ptid, wait_ptid))
|
||||
{
|
||||
struct regcache *regcache = get_thread_regcache (wait_ptid);
|
||||
|
||||
@ -5567,6 +5590,13 @@ show_non_stop (struct ui_file *file, int from_tty,
|
||||
value);
|
||||
}
|
||||
|
||||
static void
|
||||
show_schedule_multiple (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
fprintf_filtered (file, _("\
|
||||
Resuming the execution of threads of all processes is %s.\n"), value);
|
||||
}
|
||||
|
||||
void
|
||||
_initialize_infrun (void)
|
||||
@ -5746,6 +5776,18 @@ step == scheduler locked during every single-step operation.\n\
|
||||
show_scheduler_mode,
|
||||
&setlist, &showlist);
|
||||
|
||||
add_setshow_boolean_cmd ("schedule-multiple", class_run, &sched_multi, _("\
|
||||
Set mode for resuming threads of all processes."), _("\
|
||||
Show mode for resuming threads of all processes."), _("\
|
||||
When on, execution commands (such as 'continue' or 'next') resume all\n\
|
||||
threads of all processes. When off (which is the default), execution\n\
|
||||
commands only resume the threads of the current process. The set of\n\
|
||||
threads that are resumed is further refined by the scheduler-locking\n\
|
||||
mode (see help set scheduler-locking)."),
|
||||
NULL,
|
||||
show_schedule_multiple,
|
||||
&setlist, &showlist);
|
||||
|
||||
add_setshow_boolean_cmd ("step-mode", class_run, &step_stop_if_no_debug, _("\
|
||||
Set mode of the step operation."), _("\
|
||||
Show mode of the step operation."), _("\
|
||||
|
Loading…
Reference in New Issue
Block a user