aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog19
-rw-r--r--gdb/NEWS7
-rw-r--r--gdb/break-catch-sig.c4
-rw-r--r--gdb/break-catch-syscall.c5
-rw-r--r--gdb/break-catch-throw.c1
-rw-r--r--gdb/breakpoint.c73
-rw-r--r--gdb/breakpoint.h4
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo14
-rw-r--r--gdb/gdbthread.h5
-rw-r--r--gdb/infrun.c30
-rw-r--r--gdb/testsuite/ChangeLog21
-rw-r--r--gdb/testsuite/gdb.base/async-shell.exp2
-rw-r--r--gdb/testsuite/gdb.base/dprintf-non-stop.exp2
-rw-r--r--gdb/testsuite/gdb.base/siginfo-thread.exp2
-rw-r--r--gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp2
-rw-r--r--gdb/testsuite/gdb.java/jnpe.exp2
-rw-r--r--gdb/testsuite/gdb.threads/clone-new-thread-event.exp2
-rw-r--r--gdb/testsuite/gdb.threads/continue-pending-status.exp2
-rw-r--r--gdb/testsuite/gdb.threads/leader-exit.exp2
-rw-r--r--gdb/testsuite/gdb.threads/manythreads.exp8
-rw-r--r--gdb/testsuite/gdb.threads/pthreads.exp2
-rw-r--r--gdb/testsuite/gdb.threads/schedlock.exp2
-rw-r--r--gdb/testsuite/gdb.threads/siginfo-threads.exp2
-rw-r--r--gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp4
-rw-r--r--gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp2
-rw-r--r--gdb/testsuite/gdb.threads/sigthread.exp2
-rw-r--r--gdb/testsuite/gdb.threads/watchpoint-fork.exp4
-rw-r--r--gdb/thread.c8
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.
diff --git a/gdb/NEWS b/gdb/NEWS
index 9d3a47c..f4ba65d 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -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);