diff options
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/debug.c | 4 | ||||
-rw-r--r-- | gdb/infrun.c | 9 | ||||
-rw-r--r-- | gdb/infrun.h | 10 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/ui-redirect.exp | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/ia64-sigill.exp | 16 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/stepi-random-signal.exp | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/watchthreads-reorder.exp | 7 | ||||
-rw-r--r-- | gdbserver/ChangeLog | 4 | ||||
-rw-r--r-- | gdbserver/debug.cc | 4 | ||||
-rw-r--r-- | gdbsupport/ChangeLog | 8 | ||||
-rw-r--r-- | gdbsupport/common-debug.cc | 2 | ||||
-rw-r--r-- | gdbsupport/common-debug.h | 81 |
14 files changed, 162 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 674c396..0d1c5a8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2021-01-04 Simon Marchi <simon.marchi@efficios.com> + * debug.c (debug_print_depth): New. + * infrun.h (INFRUN_SCOPED_DEBUG_START_END): New. + (INFRUN_SCOPED_DEBUG_ENTER_EXIT): New. + * infrun.c (start_step_over): Use + INFRUN_SCOPED_DEBUG_ENTER_EXIT. + (proceed): Use INFRUN_SCOPED_DEBUG_ENTER_EXIT and + INFRUN_SCOPED_DEBUG_START_END. + (fetch_inferior_event): Use INFRUN_SCOPED_DEBUG_ENTER_EXIT. + +2021-01-04 Simon Marchi <simon.marchi@efficios.com> + * infrun.c (print_target_wait_results): Use infrun_debug_printf. 2021-01-04 Simon Marchi <simon.marchi@efficios.com> diff --git a/gdb/debug.c b/gdb/debug.c index 94eb39b..f7dfee1 100644 --- a/gdb/debug.c +++ b/gdb/debug.c @@ -23,6 +23,10 @@ /* See gdbsupport/common-debug.h. */ +int debug_print_depth = 0; + +/* See gdbsupport/common-debug.h. */ + void debug_vprintf (const char *fmt, va_list ap) { diff --git a/gdb/infrun.c b/gdb/infrun.c index 01d7ead..45bedf8 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1833,6 +1833,8 @@ static step_over_what thread_still_needs_step_over (struct thread_info *tp); static bool start_step_over (void) { + INFRUN_SCOPED_DEBUG_ENTER_EXIT; + thread_info *next; /* Don't start a new step-over if we already have an in-line @@ -2849,6 +2851,8 @@ check_multi_target_resumption (process_stratum_target *resume_target) void proceed (CORE_ADDR addr, enum gdb_signal siggnal) { + INFRUN_SCOPED_DEBUG_ENTER_EXIT; + struct regcache *regcache; struct gdbarch *gdbarch; CORE_ADDR pc; @@ -3018,6 +3022,9 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) } else if (!non_stop && target_is_non_stop_p ()) { + INFRUN_SCOPED_DEBUG_START_END + ("resuming threads, all-stop-on-top-of-non-stop"); + /* In all-stop, but the target is always in non-stop mode. Start all other threads that are implicitly resumed too. */ for (thread_info *tp : all_non_exited_threads (resume_target, @@ -3771,6 +3778,8 @@ all_uis_on_sync_execution_starting (void) void fetch_inferior_event () { + INFRUN_SCOPED_DEBUG_ENTER_EXIT; + struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; int cmd_done = 0; diff --git a/gdb/infrun.h b/gdb/infrun.h index 6bac31b..7160b60 100644 --- a/gdb/infrun.h +++ b/gdb/infrun.h @@ -36,6 +36,16 @@ extern bool debug_infrun; #define infrun_debug_printf(fmt, ...) \ debug_prefixed_printf_cond (debug_infrun, "infrun",fmt, ##__VA_ARGS__) +/* Print "infrun" start/end debug statements. */ + +#define INFRUN_SCOPED_DEBUG_START_END(msg) \ + scoped_debug_start_end (debug_infrun, "infrun", msg) + +/* Print "infrun" enter/exit debug statements. */ + +#define INFRUN_SCOPED_DEBUG_ENTER_EXIT \ + scoped_debug_enter_exit (debug_infrun, "infrun") + /* Nonzero if we want to give control to the user when we're notified of shared library events by the dynamic linker. */ extern int stop_on_solib_events; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 44afe36..9267579 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2021-01-04 Simon Marchi <simon.marchi@efficios.com> + + +2021-01-04 Simon Marchi <simon.marchi@efficios.com> + * gdb.server/abspath.exp: Append "set sysroot" to GDBFLAGS. * gdb.server/connect-without-multi-process.exp: Likewise. * gdb.server/exit-multiple-threads.exp: Likewise. diff --git a/gdb/testsuite/gdb.base/ui-redirect.exp b/gdb/testsuite/gdb.base/ui-redirect.exp index 21fbb58..af42800 100644 --- a/gdb/testsuite/gdb.base/ui-redirect.exp +++ b/gdb/testsuite/gdb.base/ui-redirect.exp @@ -117,7 +117,14 @@ with_test_prefix "debugging" { gdb_test "set debug infrun 1" gdb_test "set logging on" \ "Copying output to /dev/null.*Copying debug output to /dev/null\\." - gdb_test "continue" {Continuing.*\[infrun\] .*\[infrun\] .*Breakpoint [0-9]+, foo.*} + + set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" + gdb_test_multiple "continue" "continue" -prompt $prompt { + -re "Continuing.*\\\[infrun\\\] .*\\\[infrun\\\] .*Breakpoint \[0-9\]+, foo.*$prompt$" { + pass $gdb_test_name + } + } + gdb_test "set debug infrun 0" gdb_test "set logging off" "Done logging to /dev/null\\." gdb_test "help" "List of classes of commands:.*" diff --git a/gdb/testsuite/gdb.threads/ia64-sigill.exp b/gdb/testsuite/gdb.threads/ia64-sigill.exp index e4d3056..636b387 100644 --- a/gdb/testsuite/gdb.threads/ia64-sigill.exp +++ b/gdb/testsuite/gdb.threads/ia64-sigill.exp @@ -57,17 +57,21 @@ gdb_test_no_output "set debug infrun 1" # The ia64 SIGILL signal is visible only in the lin-lwp debug. -gdb_test "continue" "Breakpoint \[0-9\]+,( .* in)? thread_func .*" +set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" +gdb_test_multiple "continue" "continue" -prompt $prompt { + -re "Breakpoint \[0-9\]+,( .* in)? thread_func .*$prompt$" { + pass $gdb_test_name + } +} gdb_test_no_output {delete $sigill_bpnum} -set test "continue for the pending signal" -gdb_test_multiple "continue" $test { - -re "Breakpoint \[0-9\]+, .*break-at-exit.*\r\n$gdb_prompt $" { +gdb_test_multiple "continue" "continue for the pending signal" -prompt $prompt { + -re "Breakpoint \[0-9\]+, .*break-at-exit.*\r\n$prompt$" { # Breakpoint has been skipped in the other thread. - pass $test + pass $gdb_test_name } -re " received signal .*\r\n$gdb_prompt $" { - fail $test + fail $gdb_test_name } } diff --git a/gdb/testsuite/gdb.threads/stepi-random-signal.exp b/gdb/testsuite/gdb.threads/stepi-random-signal.exp index d4e066e..6a474e1 100644 --- a/gdb/testsuite/gdb.threads/stepi-random-signal.exp +++ b/gdb/testsuite/gdb.threads/stepi-random-signal.exp @@ -86,12 +86,13 @@ if {$prev_addr == ""} { set seen 0 set test "stepi" -if {[gdb_test_multiple "stepi" "$test" { +set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" +if {[gdb_test_multiple "stepi" "$test" -prompt $prompt { -re {\[infrun\] handle_signal_stop: random signal} { set seen 1 exp_continue } - -re "$gdb_prompt $" { + -re "$prompt$" { } }] != 0} { return diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp index 7cdbba5..98c6af7 100644 --- a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp +++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp @@ -90,5 +90,10 @@ foreach reorder {0 1} { with_test_prefix "reorder$reorder" { # found in the DEBUG_INFRUN code path. gdb_test "set debug infrun 1" - gdb_continue_to_breakpoint "break-at-exit" ".*break-at-exit.*" + set prompt "$gdb_prompt \\\[infrun\\\] fetch_inferior_event: exit\r\n$" + gdb_test_multiple "continue" "continue to breakpoint: break-at-exit" -prompt $prompt { + -re ".*break-at-exit.*$prompt$" { + pass $gdb_test_name + } + } }} diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index a30678d..6c7738e 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,3 +1,7 @@ +2021-01-04 Simon Marchi <simon.marchi@efficios.com> + + * debug.cc (debug_print_depth): New. + 2021-01-01 Joel Brobecker <brobecker@adacore.com> * server.cc (gdbserver_version): Update copyright year. diff --git a/gdbserver/debug.cc b/gdbserver/debug.cc index c7a1e5f..b3a5fe1 100644 --- a/gdbserver/debug.cc +++ b/gdbserver/debug.cc @@ -64,6 +64,10 @@ debug_set_output (const char *new_debug_file) #endif +/* See gdbsupport/common-debug.h. */ + +int debug_print_depth = 0; + /* Print a debugging message. If the text begins a new line it is preceded by a timestamp. We don't get fancy with newline checking, we just check whether the diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog index cc21b0b..2c69581 100644 --- a/gdbsupport/ChangeLog +++ b/gdbsupport/ChangeLog @@ -1,3 +1,11 @@ +2021-01-04 Simon Marchi <simon.marchi@efficios.com> + + * common-debug.h (debug_print_depth): New. + (struct scoped_debug_start_end): New. + (scoped_debug_start_end): New. + (scoped_debug_enter_exit): New. + * common-debug.cc (debug_prefixed_vprintf): Print indentation. + 2020-12-11 Andrew Burgess <andrew.burgess@embecosm.com> * gdbsupport/common-utils.cc: Change 'ctype.h' include to diff --git a/gdbsupport/common-debug.cc b/gdbsupport/common-debug.cc index 1eb193c..0d3e919 100644 --- a/gdbsupport/common-debug.cc +++ b/gdbsupport/common-debug.cc @@ -55,7 +55,7 @@ void debug_prefixed_vprintf (const char *module, const char *func, const char *format, va_list args) { - debug_printf ("[%s] %s: ", module, func); + debug_printf ("%*s[%s] %s: ", debug_print_depth * 2, "", module, func); debug_vprintf (format, args); debug_printf ("\n"); } diff --git a/gdbsupport/common-debug.h b/gdbsupport/common-debug.h index e5de980..f313787 100644 --- a/gdbsupport/common-debug.h +++ b/gdbsupport/common-debug.h @@ -50,7 +50,6 @@ extern void ATTRIBUTE_PRINTF (3, 4) debug_prefixed_printf extern void ATTRIBUTE_PRINTF (3, 0) debug_prefixed_vprintf (const char *module, const char *func, const char *format, va_list args); - /* Helper to define "_debug_print" macros. DEBUG_ENABLED_COND is an expression that evaluates to true if the debugging @@ -67,4 +66,84 @@ extern void ATTRIBUTE_PRINTF (3, 0) debug_prefixed_vprintf } \ while (0) +/* Nesting depth of scoped_debug_start_end objects. */ + +extern int debug_print_depth; + +/* Print a message on construction and destruction, to denote the start and end + of an operation. Increment DEBUG_PRINT_DEPTH on construction and decrement + it on destruction, such that nested debug statements will be printed with + an indent and appear "inside" this one. */ + +struct scoped_debug_start_end +{ + /* DEBUG_ENABLED is a reference to a variable that indicates whether debugging + is enabled, so if the debug statements should be printed. Is is read + separately at construction and destruction, such that the start statement + could be printed but not the end statement, or vice-versa. + + MODULE and FUNC are forwarded to debug_prefixed_printf. + + START_MSG and END_MSG are the statements to print on construction and + destruction, respectively. */ + + scoped_debug_start_end (bool &debug_enabled, const char *module, + const char *func, const char *start_msg, + const char *end_msg) + : m_debug_enabled (debug_enabled), + m_module (module), + m_func (func), + m_end_msg (end_msg) + { + if (m_debug_enabled) + { + debug_prefixed_printf (m_module, m_func, "%s", start_msg); + ++debug_print_depth; + m_must_decrement_print_depth = true; + } + } + + DISABLE_COPY_AND_ASSIGN (scoped_debug_start_end); + + ~scoped_debug_start_end () + { + if (m_must_decrement_print_depth) + { + gdb_assert (debug_print_depth > 0); + --debug_print_depth; + } + + if (m_debug_enabled) + { + debug_prefixed_printf (m_module, m_func, "%s", m_end_msg); + } + } + +private: + bool &m_debug_enabled; + const char *m_module; + const char *m_func; + const char *m_end_msg; + + /* This is used to handle the case where debugging is enabled during + construction but not during destruction, or vice-versa. We want to make + sure there are as many increments are there are decrements. */ + + bool m_must_decrement_print_depth = false; +}; + +/* Helper to define a module-specific start/end debug macro. */ + +#define scoped_debug_start_end(debug_enabled, module, msg) \ + scoped_debug_start_end CONCAT(scoped_debug_start_end, __LINE__) \ + (debug_enabled, module, __func__, "start: " msg, "end: " msg) + +/* Helper to define a module-specific enter/exit debug macro. This is a special + case of `scoped_debug_start_end` where the start and end messages are "enter" + and "exit", to denote entry and exit of a function. */ + +#define scoped_debug_enter_exit(debug_enabled, module) \ + scoped_debug_start_end CONCAT(scoped_debug_start_end, __LINE__) \ + (debug_enabled, module, __func__, "enter", "exit") + #endif /* COMMON_COMMON_DEBUG_H */ |