From a474d7c2a38f227e95b863f621856ecf1570cc02 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 9 Jul 2008 22:30:46 +0000 Subject: Per-thread commands. * gdbthread.h: Remove unneeded forward declarations. Include "inferior.h". (struct thread_info): Add continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi and stop_signal members. (save_infrun_state): Add continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi, stop_signal and stop_bpstat parameters. (load_infrun_state): Add continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi, stop_signal and stop_bpstat parameters. * thread.c (load_infrun_state): In non-stop mode, load continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi and stop_signal. (save_infrun_state): Store continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi, stop_signal and stop_bpstat. (save_infrun_state): Store continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi, stop_signal and stop_bpstat. (free_thread): Clear The thread's stop_bpstat. * inferior.h (context_switch_to): Declare. * infrun.c (ecss): New global. (context_switch): Context switch continuations, intermediate_continuations, proceed_to_finish, step_over_calls, stop_step, step_multi, stop_signal and stop_bpstat. (wait_for_inferior): Use global ecss. (async_ecss, async_ecs): Delete. (fetch_inferior_event): Use global ecss. (context_switch_to): New. * top.c (execute_command): In non-stop, only check if the current thread is running, in all-stop, check if there's any thread running. * breakpoint.c (bpstat_remove_breakpoint): New. (bpstat_remove_breakpoint_callback): New. (delete_breakpoint): Clear the stop_bpstats of all threads. * mi/mi-main.c (mi_cmd_execute): In non-stop, only check if the current thread is running, in all-stop, check if there's any thread running. * Makefile.in (gdbthread_h): Depend on $(inferior_h). --- gdb/gdbthread.h | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'gdb/gdbthread.h') diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 389b2fc..76b8f6c 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -22,17 +22,12 @@ #ifndef GDBTHREAD_H #define GDBTHREAD_H -struct breakpoint; -struct frame_id; struct symtab; -/* For bpstat */ #include "breakpoint.h" - -/* For struct frame_id. */ #include "frame.h" - #include "ui-out.h" +#include "inferior.h" struct thread_info { @@ -82,6 +77,20 @@ struct thread_info when we finally do stop stepping. */ bpstat stepping_through_solib_catchpoints; + /* The below are only per-thread in non-stop mode. */ + /* Per-thread command support. */ + struct continuation *continuations; + struct continuation *intermediate_continuations; + int proceed_to_finish; + enum step_over_calls_kind step_over_calls; + int stop_step; + int step_multi; + + enum target_signal stop_signal; + /* Used in continue_command to set the proceed count of the + breakpoint the thread stopped at. */ + bpstat stop_bpstat; + /* Private data used by the target vector implementation. */ struct private_thread_info *private; }; @@ -152,7 +161,15 @@ extern void save_infrun_state (ptid_t ptid, int stepping_through_solib_after_catch, bpstat stepping_through_solib_catchpoints, int current_line, - struct symtab *current_symtab); + struct symtab *current_symtab, + struct continuation *continuations, + struct continuation *intermediate_continuations, + int proceed_to_finish, + enum step_over_calls_kind step_over_calls, + int stop_step, + int step_multi, + enum target_signal stop_signal, + bpstat stop_bpstat); /* infrun context switch: load the debugger state previously saved for the given thread. */ @@ -164,10 +181,18 @@ extern void load_infrun_state (ptid_t ptid, CORE_ADDR *step_range_end, struct frame_id *step_frame_id, int *another_trap, - int *stepping_through_solib_affter_catch, + int *stepping_through_solib_after_catch, bpstat *stepping_through_solib_catchpoints, int *current_line, - struct symtab **current_symtab); + struct symtab **current_symtab, + struct continuation **continuations, + struct continuation **intermediate_continuations, + int *proceed_to_finish, + enum step_over_calls_kind *step_over_calls, + int *stop_step, + int *step_multi, + enum target_signal *stop_signal, + bpstat *stop_bpstat); /* Switch from one thread to another. */ extern void switch_to_thread (ptid_t ptid); -- cgit v1.1