diff options
Diffstat (limited to 'gdb')
29 files changed, 191 insertions, 47 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1603109..8fe1381 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2016-01-18 Pedro Alves <palves@redhat.com> + + * NEWS: Mention that GDB now displays the ID and name of the + thread that hit a breakpoint or received a signal. + * break-catch-sig.c (signal_catchpoint_print_it): Use + maybe_print_thread_hit_breakpoint. + * break-catch-syscall.c (print_it_catch_syscall): Likewise. + * break-catch-throw.c (print_it_exception_catchpoint): Likewise. + * breakpoint.c (maybe_print_thread_hit_breakpoint): New function. + (print_it_catch_fork, print_it_catch_vfork, print_it_catch_solib) + (print_it_catch_exec, print_it_ranged_breakpoint) + (print_it_watchpoint, print_it_masked_watchpoint, bkpt_print_it): + Use maybe_print_thread_hit_breakpoint. + * breakpoint.h (maybe_print_thread_hit_breakpoint): Declare. + * gdbthread.h (show_thread_that_caused_stop): Declare. + * infrun.c (print_signal_received_reason): Print which thread + received signal. + * thread.c (show_thread_that_caused_stop): New function. + 2016-01-18 Gary Benson <gbenson@redhat.com> * nat/linux-namespaces.c (do_fork): New function. @@ -49,6 +49,13 @@ * The new convenience variable $_inferior holds the number of the current inferior. +* GDB now displays the ID and name of the thread that hit a breakpoint + or received a signal, if your program is multi-threaded. For + example: + + Thread 3 "bar" hit Breakpoint 1 at 0x40087a: file program.c, line 20. + Thread 1 "main" received signal SIGINT, Interrupt. + * Record btrace now supports non-stop mode. * Support for tracepoints on aarch64-linux was added in GDBserver. diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c index b993990..dcfae42 100644 --- a/gdb/break-catch-sig.c +++ b/gdb/break-catch-sig.c @@ -220,14 +220,16 @@ signal_catchpoint_print_it (bpstat bs) ptid_t ptid; struct target_waitstatus last; const char *signal_name; + struct ui_out *uiout = current_uiout; get_last_target_status (&ptid, &last); signal_name = signal_to_name_or_int (last.value.sig); annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); - printf_filtered (_("\nCatchpoint %d (signal %s), "), b->number, signal_name); + printf_filtered (_("Catchpoint %d (signal %s), "), b->number, signal_name); return PRINT_SRC_AND_LOC; } diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c index 8ad7f2c..dbebdda 100644 --- a/gdb/break-catch-syscall.c +++ b/gdb/break-catch-syscall.c @@ -254,11 +254,12 @@ print_it_catch_syscall (bpstat bs) get_syscall_by_number (gdbarch, last.value.syscall_number, &s); annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary catchpoint "); + ui_out_text (uiout, "Temporary catchpoint "); else - ui_out_text (uiout, "\nCatchpoint "); + ui_out_text (uiout, "Catchpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c index 96d7b72..3a48205 100644 --- a/gdb/break-catch-throw.c +++ b/gdb/break-catch-throw.c @@ -264,6 +264,7 @@ print_it_exception_catchpoint (bpstat bs) enum exception_event_kind kind = classify_exception_breakpoint (b); annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); bp_temp = b->disposition == disp_del; ui_out_text (uiout, diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 72da4ef..83d3979 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -4790,6 +4790,37 @@ watchpoint_value_print (struct value *val, struct ui_file *stream) } } +/* Print the "Thread ID hit" part of "Thread ID hit Breakpoint N" if + debugging multiple threads. */ + +void +maybe_print_thread_hit_breakpoint (struct ui_out *uiout) +{ + if (ui_out_is_mi_like_p (uiout)) + return; + + ui_out_text (uiout, "\n"); + + if (show_thread_that_caused_stop ()) + { + const char *name; + struct thread_info *thr = inferior_thread (); + + ui_out_text (uiout, "Thread "); + ui_out_field_fmt (uiout, "thread-id", "%s", print_thread_id (thr)); + + name = thr->name != NULL ? thr->name : target_thread_name (thr); + if (name != NULL) + { + ui_out_text (uiout, " \""); + ui_out_field_fmt (uiout, "name", "%s", name); + ui_out_text (uiout, "\""); + } + + ui_out_text (uiout, " hit "); + } +} + /* Generic routine for printing messages indicating why we stopped. The behavior of this function depends on the value 'print_it' in the bpstat structure. Under some circumstances we @@ -8093,10 +8124,11 @@ print_it_catch_fork (bpstat bs) struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at; annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary catchpoint "); + ui_out_text (uiout, "Temporary catchpoint "); else - ui_out_text (uiout, "\nCatchpoint "); + ui_out_text (uiout, "Catchpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", @@ -8210,10 +8242,11 @@ print_it_catch_vfork (bpstat bs) struct fork_catchpoint *c = (struct fork_catchpoint *) b; annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary catchpoint "); + ui_out_text (uiout, "Temporary catchpoint "); else - ui_out_text (uiout, "\nCatchpoint "); + ui_out_text (uiout, "Catchpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", @@ -8406,10 +8439,11 @@ print_it_catch_solib (bpstat bs) struct ui_out *uiout = current_uiout; annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary catchpoint "); + ui_out_text (uiout, "Temporary catchpoint "); else - ui_out_text (uiout, "\nCatchpoint "); + ui_out_text (uiout, "Catchpoint "); ui_out_field_int (uiout, "bkptno", b->number); ui_out_text (uiout, "\n"); if (ui_out_is_mi_like_p (uiout)) @@ -8675,10 +8709,11 @@ print_it_catch_exec (bpstat bs) struct exec_catchpoint *c = (struct exec_catchpoint *) b; annotate_catchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary catchpoint "); + ui_out_text (uiout, "Temporary catchpoint "); else - ui_out_text (uiout, "\nCatchpoint "); + ui_out_text (uiout, "Catchpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", @@ -10207,10 +10242,13 @@ print_it_ranged_breakpoint (bpstat bs) gdb_assert (bl && bl->next == NULL); annotate_breakpoint (b->number); + + maybe_print_thread_hit_breakpoint (uiout); + if (b->disposition == disp_del) - ui_out_text (uiout, "\nTemporary ranged breakpoint "); + ui_out_text (uiout, "Temporary ranged breakpoint "); else - ui_out_text (uiout, "\nRanged breakpoint "); + ui_out_text (uiout, "Ranged breakpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", @@ -10719,11 +10757,13 @@ print_it_watchpoint (bpstat bs) stb = mem_fileopen (); old_chain = make_cleanup_ui_file_delete (stb); + annotate_watchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); + switch (b->type) { case bp_watchpoint: case bp_hardware_watchpoint: - annotate_watchpoint (b->number); if (ui_out_is_mi_like_p (uiout)) ui_out_field_string (uiout, "reason", @@ -10758,7 +10798,6 @@ print_it_watchpoint (bpstat bs) case bp_access_watchpoint: if (bs->old_val != NULL) { - annotate_watchpoint (b->number); if (ui_out_is_mi_like_p (uiout)) ui_out_field_string (uiout, "reason", @@ -10935,10 +10974,12 @@ print_it_masked_watchpoint (bpstat bs) /* Masked watchpoints have only one location. */ gdb_assert (b->loc && b->loc->next == NULL); + annotate_watchpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); + switch (b->type) { case bp_hardware_watchpoint: - annotate_watchpoint (b->number); if (ui_out_is_mi_like_p (uiout)) ui_out_field_string (uiout, "reason", @@ -13120,10 +13161,12 @@ bkpt_print_it (bpstat bs) bl->address, b->number, 1); annotate_breakpoint (b->number); + maybe_print_thread_hit_breakpoint (uiout); + if (bp_temp) - ui_out_text (uiout, "\nTemporary breakpoint "); + ui_out_text (uiout, "Temporary breakpoint "); else - ui_out_text (uiout, "\nBreakpoint "); + ui_out_text (uiout, "Breakpoint "); if (ui_out_is_mi_like_p (uiout)) { ui_out_field_string (uiout, "reason", diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index e76bdab..68710e6 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1622,4 +1622,8 @@ extern void breakpoint_free_objfile (struct objfile *objfile); extern char *ep_parse_optional_if_clause (char **arg); +/* Print the "Thread ID hit" part of "Thread ID hit Breakpoint N" to + UIOUT iff debugging multiple threads. */ +extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout); + #endif /* !defined (BREAKPOINT_H) */ diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index db280b9..59a8e0a 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2016-01-18 Pedro Alves <palves@redhat.com> + + * gdb.texinfo (Threads): Mention that GDB displays the ID and name + of the thread that hit a breakpoint or received a signal. + 2016-01-15 Pedro Alves <palves@redhat.com> * gdb.texinfo (Threads) <thread ID lists>: Document star ranges. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index a08a196..f996c8d 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -2964,6 +2964,20 @@ useful in writing breakpoint conditional expressions, command scripts, and so forth. @xref{Convenience Vars,, Convenience Variables}, for general information on convenience variables. +If @value{GDBN} detects the program is multi-threaded, it augments the +usual message about stopping at a breakpoint with the ID and name of +the thread that hit the breakpoint. + +@smallexample +Thread 2 "client" hit Breakpoint 1, send_message () at client.c:68 +@end smallexample + +Likewise when the program receives a signal: + +@smallexample +Thread 1 "main" received signal SIGINT, Interrupt. +@end smallexample + @table @code @kindex info threads @item info threads @r{[}@var{thread-id-list}@r{]} diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 37c2837..bdd2bb0 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -630,6 +630,11 @@ extern void thread_cancel_execution_command (struct thread_info *thr); executing). */ extern void validate_registers_access (void); +/* Returns whether to show which thread hit the breakpoint, received a + signal, etc. and ended up causing a user-visible stop. This is + true iff we ever detected multiple threads. */ +extern int show_thread_that_caused_stop (void); + extern struct thread_info *thread_list; #endif /* GDBTHREAD_H */ diff --git a/gdb/infrun.c b/gdb/infrun.c index 64c729e..33981d2 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -7896,21 +7896,35 @@ print_exited_reason (struct ui_out *uiout, int exitstatus) void print_signal_received_reason (struct ui_out *uiout, enum gdb_signal siggnal) { + struct thread_info *thr = inferior_thread (); + annotate_signal (); - if (siggnal == GDB_SIGNAL_0 && !ui_out_is_mi_like_p (uiout)) + if (ui_out_is_mi_like_p (uiout)) + ; + else if (show_thread_that_caused_stop ()) { - struct thread_info *t = inferior_thread (); + const char *name; - ui_out_text (uiout, "\n["); - ui_out_field_string (uiout, "thread-name", - target_pid_to_str (t->ptid)); - ui_out_field_fmt (uiout, "thread-id", "] #%s", print_thread_id (t)); - ui_out_text (uiout, " stopped"); + ui_out_text (uiout, "\nThread "); + ui_out_field_fmt (uiout, "thread-id", "%s", print_thread_id (thr)); + + name = thr->name != NULL ? thr->name : target_thread_name (thr); + if (name != NULL) + { + ui_out_text (uiout, " \""); + ui_out_field_fmt (uiout, "name", "%s", name); + ui_out_text (uiout, "\""); + } } else + ui_out_text (uiout, "\nProgram"); + + if (siggnal == GDB_SIGNAL_0 && !ui_out_is_mi_like_p (uiout)) + ui_out_text (uiout, " stopped"); + else { - ui_out_text (uiout, "\nProgram received signal "); + ui_out_text (uiout, " received signal "); annotate_signal_name (); if (ui_out_is_mi_like_p (uiout)) ui_out_field_string diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 08a699d..627db46 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,24 @@ +2016-01-18 Pedro Alves <palves@redhat.com> + + * gdb.base/async-shell.exp: Adjust expected output. + * gdb.base/dprintf-non-stop.exp: Adjust expected output. + * gdb.base/siginfo-thread.exp: Adjust expected output. + * gdb.base/watchpoint-hw-hit-once.exp: Adjust expected output. + * gdb.java/jnpe.exp: Adjust expected output. + * gdb.threads/clone-new-thread-event.exp: Adjust expected output. + * gdb.threads/continue-pending-status.exp: Adjust expected output. + * gdb.threads/leader-exit.exp: Adjust expected output. + * gdb.threads/manythreads.exp: Adjust expected output. + * gdb.threads/pthreads.exp: Adjust expected output. + * gdb.threads/schedlock.exp: Adjust expected output. + * gdb.threads/siginfo-threads.exp: Adjust expected output. + * gdb.threads/signal-command-multiple-signals-pending.exp: Adjust + expected output. + * gdb.threads/signal-delivered-right-thread.exp: Adjust expected + output. + * gdb.threads/sigthread.exp: Adjust expected output. + * gdb.threads/watchpoint-fork.exp: Adjust expected output. + 2016-01-18 Yao Qi <yao.qi@linaro.org> * gdb.guile/scm-section-script.c: Replace @progbits with diff --git a/gdb/testsuite/gdb.base/async-shell.exp b/gdb/testsuite/gdb.base/async-shell.exp index 5f462b2..6b887c3 100644 --- a/gdb/testsuite/gdb.base/async-shell.exp +++ b/gdb/testsuite/gdb.base/async-shell.exp @@ -48,7 +48,7 @@ gdb_test_multiple $test $test { set test "process stopped" gdb_test_multiple "" $test { - -re "\r\n\\\[process \[0-9\]+\\\] #1 stopped\\\.\r\n" { + -re "Program stopped\\\.\r\n" { pass $test } } diff --git a/gdb/testsuite/gdb.base/dprintf-non-stop.exp b/gdb/testsuite/gdb.base/dprintf-non-stop.exp index 3c1638e..1787f6f 100644 --- a/gdb/testsuite/gdb.base/dprintf-non-stop.exp +++ b/gdb/testsuite/gdb.base/dprintf-non-stop.exp @@ -64,7 +64,7 @@ gdb_test_multiple $test $test { set test "inferior stopped" gdb_test_multiple "" $test { - -re "\r\n\\\[.*\\\] #1 stopped\\\.\r\n" { + -re "Program stopped\\\.\r\n" { pass $test } } diff --git a/gdb/testsuite/gdb.base/siginfo-thread.exp b/gdb/testsuite/gdb.base/siginfo-thread.exp index 49908c4..9af99ea 100644 --- a/gdb/testsuite/gdb.base/siginfo-thread.exp +++ b/gdb/testsuite/gdb.base/siginfo-thread.exp @@ -41,7 +41,7 @@ if { ![runto_main] } then { } # Run to the signal. -gdb_test "continue" ".*Program received signal SIGSEGV.*" "continue to signal" +gdb_test "continue" "Thread .* received signal SIGSEGV.*" "continue to signal" # Try to generate a core file, for a later test. set gcorefile [standard_output_file $testfile.gcore] diff --git a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp index 5c1be00..46d5c62 100644 --- a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp +++ b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp @@ -31,7 +31,7 @@ gdb_test "rwatch watchee" gdb_breakpoint [gdb_get_line_number "dummy = 2"] -gdb_test "continue" "Continuing.\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*" +gdb_test "continue" "Continuing.\r\n\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*" # Here should be no repeated notification of the read watchpoint. gdb_test "continue" \ diff --git a/gdb/testsuite/gdb.java/jnpe.exp b/gdb/testsuite/gdb.java/jnpe.exp index 092d82a..745cdf3 100644 --- a/gdb/testsuite/gdb.java/jnpe.exp +++ b/gdb/testsuite/gdb.java/jnpe.exp @@ -51,5 +51,5 @@ gdb_test "next" \ set line [gdb_get_line_number "stop point"] gdb_breakpoint $line -gdb_test "continue" "Continuing.\[\r\n\]*success\[\r\n\]*Breakpoint .*:$line\[\r\n\]*.*// stop point\[\r\n\]*" \ +gdb_test "continue" "Continuing.\[\r\n\]*success\[\r\n\]*Thread .* hit Breakpoint .*:$line\[\r\n\]*.*// stop point\[\r\n\]*" \ "continue to success for next-over-NPE" diff --git a/gdb/testsuite/gdb.threads/clone-new-thread-event.exp b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp index 7b34adc..f7ca41e 100644 --- a/gdb/testsuite/gdb.threads/clone-new-thread-event.exp +++ b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp @@ -30,5 +30,5 @@ if { ![runto_main] } { } gdb_test "continue" \ - "Program received signal SIGUSR1, User defined signal 1.*" \ + "Thread 2 received signal SIGUSR1, User defined signal 1.*" \ "catch SIGUSR1" diff --git a/gdb/testsuite/gdb.threads/continue-pending-status.exp b/gdb/testsuite/gdb.threads/continue-pending-status.exp index 4d0fce7..086407f 100644 --- a/gdb/testsuite/gdb.threads/continue-pending-status.exp +++ b/gdb/testsuite/gdb.threads/continue-pending-status.exp @@ -116,7 +116,7 @@ for {set i 0} {$i < $attempts} {incr i} { set msg "caught interrupt" gdb_test_multiple "" $msg { - -re "Program received signal SIGINT.*$gdb_prompt $" { + -re "Thread .* received signal SIGINT.*$gdb_prompt $" { pass $msg } } diff --git a/gdb/testsuite/gdb.threads/leader-exit.exp b/gdb/testsuite/gdb.threads/leader-exit.exp index 2859261..7daea8f 100644 --- a/gdb/testsuite/gdb.threads/leader-exit.exp +++ b/gdb/testsuite/gdb.threads/leader-exit.exp @@ -55,7 +55,7 @@ send_gdb "\003" set test "caught interrupt" gdb_test_multiple "" $test { - -re "Program received signal SIGINT.*$gdb_prompt $" { + -re "Thread .* received signal SIGINT.*$gdb_prompt $" { pass $test } } diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp index 28d3550..8cc4c5c 100644 --- a/gdb/testsuite/gdb.threads/manythreads.exp +++ b/gdb/testsuite/gdb.threads/manythreads.exp @@ -70,14 +70,14 @@ proc interrupt_and_wait { message } { -re "\\\[\[^\]\]* exited\\\]\r\n" { exp_continue } - -re "Program received signal SIGINT.*$gdb_prompt $" { + -re " received signal SIGINT.*$gdb_prompt $" { pass "$message" } -re "$gdb_prompt $" { # Note that with this regex order, if GDB emits [New # Thread ...] output between "Program received signal" and - # the prompt, the "Program received signal" regex won't - # match. That's good, as if we see that happening, it's a + # the prompt, the "received signal" regex won't match. + # That's good, as if we see that happening, it's a # regression. # # GDB makes sure to notify about signal stops, end of @@ -92,7 +92,7 @@ proc interrupt_and_wait { message } { # ... more new threads output ... # [New Thread NNN] # [New Thread NNN] - # Program received signal SIGINT, Interrupt. + # Thread NNN received signal SIGINT, Interrupt. # [New Thread NNN] # [New Thread NNN] # ... pages of new threads output ... diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp index 473053e..1fb27cf 100644 --- a/gdb/testsuite/gdb.threads/pthreads.exp +++ b/gdb/testsuite/gdb.threads/pthreads.exp @@ -202,7 +202,7 @@ proc check_control_c {} { send_gdb "\003" set description "Stopped with a ^C" gdb_expect { - -re "Program received signal SIGINT.*$gdb_prompt $" { + -re "Thread .* received signal SIGINT.*$gdb_prompt $" { pass $description } -re "Quit.*$gdb_prompt $" { diff --git a/gdb/testsuite/gdb.threads/schedlock.exp b/gdb/testsuite/gdb.threads/schedlock.exp index 8232697..6fb6698 100644 --- a/gdb/testsuite/gdb.threads/schedlock.exp +++ b/gdb/testsuite/gdb.threads/schedlock.exp @@ -69,7 +69,7 @@ proc stop_process { description } { # message first, or GDB's signal handler may not be in place. after 1000 {send_gdb "\003"} gdb_expect { - -re "Program received signal SIGINT.*$gdb_prompt $" + -re "Thread .* received signal SIGINT.*$gdb_prompt $" { pass $description } diff --git a/gdb/testsuite/gdb.threads/siginfo-threads.exp b/gdb/testsuite/gdb.threads/siginfo-threads.exp index 9c55b74..108d240 100644 --- a/gdb/testsuite/gdb.threads/siginfo-threads.exp +++ b/gdb/testsuite/gdb.threads/siginfo-threads.exp @@ -51,7 +51,7 @@ for {set sigcount 0} {$sigcount < 4} {incr sigcount} { set test "catch signal $sigcount" set sigusr "" gdb_test_multiple "continue" $test { - -re "Program received signal SIGUSR(\[12\]), User defined signal \[12\]\\.\r\n.*\r\n$gdb_prompt $" { + -re "Thread .* received signal SIGUSR(\[12\]), User defined signal \[12\]\\.\r\n.*\r\n$gdb_prompt $" { set sigusr $expect_out(1,string) pass $test } diff --git a/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp b/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp index 450e472..43fe779 100644 --- a/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp +++ b/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp @@ -68,9 +68,9 @@ proc test { schedlock } { # signal. gdb_test "thread 3" "Switching to thread 3.*" - gdb_test "continue" "Program received signal SIGUSR2.*" "stop with SIGUSR2" + gdb_test "continue" "Thread 3 .*received signal SIGUSR2.*" "stop with SIGUSR2" gdb_test "thread 2" "Switching to thread 2.*" - gdb_test "continue" "Program received signal SIGUSR1.*" "stop with SIGUSR1" + gdb_test "continue" "Thread 2 .*received signal SIGUSR1.*" "stop with SIGUSR1" gdb_test "break handler_sigusr1" "Breakpoint .* at .*$srcfile.*" gdb_test "break handler_sigusr2" "Breakpoint .* at .*$srcfile.*" diff --git a/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp b/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp index d3ce821..b7ce8ef 100644 --- a/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp +++ b/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp @@ -41,7 +41,7 @@ proc test { command } { gdb_test "handle SIGUSR1 stop print pass" - gdb_test "continue" "Program received signal SIGUSR1.*" "stop with SIGUSR1" + gdb_test "continue" "Thread 2 .*received signal SIGUSR1.*" "stop with SIGUSR1" set pattern "\\\* 2\[ \t\]+Thread.*" diff --git a/gdb/testsuite/gdb.threads/sigthread.exp b/gdb/testsuite/gdb.threads/sigthread.exp index bf7fa9b..71ef75a 100644 --- a/gdb/testsuite/gdb.threads/sigthread.exp +++ b/gdb/testsuite/gdb.threads/sigthread.exp @@ -49,4 +49,4 @@ after 500 {send_gdb "\003"} # Make sure we do not get an internal error from hitting Control-C # while many signals are flying back and forth. -gdb_test "" "Program received signal SIGINT.*" "stop with control-c" +gdb_test "" "Thread .* received signal SIGINT.*" "stop with control-c" diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.exp b/gdb/testsuite/gdb.threads/watchpoint-fork.exp index a833c98..1682982 100644 --- a/gdb/testsuite/gdb.threads/watchpoint-fork.exp +++ b/gdb/testsuite/gdb.threads/watchpoint-fork.exp @@ -75,7 +75,7 @@ proc test {type symbol} { "reakpoint \[0-9\]+, marker.*" "breakpoint after the second fork" gdb_test "continue" \ "atchpoint \[0-9\]+: var.*Old value = 2.*New value = 3.*mark_exit \\(\\);" "watchpoint after the second fork" - gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish" + gdb_test "continue" "Continuing\\..*\r\n(Thread .* hit )?Breakpoint \[0-9\]+, mark_exit .*" "finish" } # threads @@ -129,7 +129,7 @@ proc test {type symbol} { "atchpoint \[0-9\]+: var.*Old value = 5.*New value = 6.*after-fork2-A.*" "watchpoint A after the second fork" gdb_test "continue" \ "atchpoint \[0-9\]+: var.*Old value = 6.*New value = 7.*after-fork2-B.*" "watchpoint B after the second fork" - gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish" + gdb_test "continue" "Continuing\\..*\r\nThread .* hit Breakpoint \[0-9\]+, mark_exit .*" "finish" } } } diff --git a/gdb/thread.c b/gdb/thread.c index c7f1467..75bfb47 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -1685,6 +1685,14 @@ make_cleanup_restore_current_thread (void) /* See gdbthread.h. */ int +show_thread_that_caused_stop (void) +{ + return highest_thread_num > 1; +} + +/* See gdbthread.h. */ + +int show_inferior_qualified_tids (void) { return (inferior_list->next != NULL || inferior_list->num != 1); |