diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2022-01-17 11:27:35 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2022-03-31 11:32:33 -0400 |
commit | 4f5539f026fafe2a3bf190dd86e95f87d75a00e7 (patch) | |
tree | 024e004b82ad1876ab1e240014e90a07481de2a9 | |
parent | 6e6e87de92b1c3ba95bf5f1932c59efea71ec4f6 (diff) | |
download | fsf-binutils-gdb-4f5539f026fafe2a3bf190dd86e95f87d75a00e7.zip fsf-binutils-gdb-4f5539f026fafe2a3bf190dd86e95f87d75a00e7.tar.gz fsf-binutils-gdb-4f5539f026fafe2a3bf190dd86e95f87d75a00e7.tar.bz2 |
gdb/infrun: add reason parameter to stop_all_threads
Add a "reason" parameter, only used to show in debug messages what is
the reason for stopping all threads. This helped me understand the
debug logs while adding some new uses of stop_all_threads, so I am
proposing to merge it.
Change-Id: I66c8c335ebf41836a7bc3d5fe1db92c195f65e55
-rw-r--r-- | gdb/infcmd.c | 2 | ||||
-rw-r--r-- | gdb/infrun.c | 10 | ||||
-rw-r--r-- | gdb/infrun.h | 11 | ||||
-rw-r--r-- | gdb/remote.c | 2 |
4 files changed, 14 insertions, 11 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c index fbae4e1..b76345d 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2521,7 +2521,7 @@ attach_post_wait (int from_tty, enum attach_post_wait_mode mode) { struct thread_info *lowest = inferior_thread (); - stop_all_threads (); + stop_all_threads ("attaching"); /* It's not defined which thread will report the attach stop. For consistency, always select the thread with diff --git a/gdb/infrun.c b/gdb/infrun.c index dbd8277..12661b5 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -2388,7 +2388,7 @@ resume_1 (enum gdb_signal sig) /* Fallback to stepping over the breakpoint in-line. */ if (target_is_non_stop_p ()) - stop_all_threads (); + stop_all_threads ("displaced stepping falling back on inline stepping"); set_step_over_info (regcache->aspace (), regcache_read_pc (regcache), 0, tp->global_num); @@ -4904,7 +4904,7 @@ handle_one (const wait_one_event &event) /* See infrun.h. */ void -stop_all_threads (void) +stop_all_threads (const char *reason) { /* We may need multiple passes to discover all threads. */ int pass; @@ -4912,7 +4912,7 @@ stop_all_threads (void) gdb_assert (exists_non_stop_target ()); - infrun_debug_printf ("starting"); + INFRUN_SCOPED_DEBUG_START_END ("reason=%s", reason); scoped_restore_current_thread restore_thread; @@ -7957,7 +7957,7 @@ stop_waiting (struct execution_control_state *ecs) /* If all-stop, but there exists a non-stop target, stop all threads now that we're presenting the stop to the user. */ if (!non_stop && exists_non_stop_target ()) - stop_all_threads (); + stop_all_threads ("presenting stop to user in all-stop"); } /* Like keep_going, but passes the signal to the inferior, even if the @@ -8057,7 +8057,7 @@ keep_going_pass_signal (struct execution_control_state *ecs) we're about to step over, otherwise other threads could miss it. */ if (step_over_info_valid_p () && target_is_non_stop_p ()) - stop_all_threads (); + stop_all_threads ("starting in-line step-over"); /* Stop stepping if inserting breakpoints fails. */ try diff --git a/gdb/infrun.h b/gdb/infrun.h index 1209b41..ecfb767 100644 --- a/gdb/infrun.h +++ b/gdb/infrun.h @@ -40,8 +40,8 @@ extern bool debug_infrun; /* Print "infrun" start/end debug statements. */ -#define INFRUN_SCOPED_DEBUG_START_END(msg) \ - scoped_debug_start_end (debug_infrun, "infrun", msg) +#define INFRUN_SCOPED_DEBUG_START_END(fmt, ...) \ + scoped_debug_start_end (debug_infrun, "infrun", fmt, ##__VA_ARGS__) /* Print "infrun" enter/exit debug statements. */ @@ -138,8 +138,11 @@ extern void set_last_target_status (process_stratum_target *target, ptid_t ptid, target_wait(). */ extern void nullify_last_target_wait_ptid (); -/* Stop all threads. Only returns after everything is halted. */ -extern void stop_all_threads (void); +/* Stop all threads. Only returns after everything is halted. + + REASON is a string indicating the reason why we stop all threads, used in + debug messages. */ +extern void stop_all_threads (const char *reason); extern void prepare_for_detach (void); diff --git a/gdb/remote.c b/gdb/remote.c index bc308bd..3f06ba5 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4642,7 +4642,7 @@ remote_target::process_initial_stop_replies (int from_tty) gdb_assert (!this->is_async_p ()); SCOPE_EXIT { target_async (0); }; target_async (1); - stop_all_threads (); + stop_all_threads ("remote connect in all-stop"); } /* If all threads of an inferior were already stopped, we |