From 78e7f66e75f93d49a7accf3a7552b2378533b52b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 31 Jul 2023 11:30:30 -0600 Subject: [PATCH] Change py-thread-exited.exp to work with gdbserver gdbserver does not notify gdb of new threads when they are created. I'm not sure if this is documented anywhere, but it is mentioned on this page: https://sourceware.org/gdb/wiki/LocalRemoteFeatureParity Search for "Finding new threads in the inferior". This behavior is a bit unfortunate -- I would think that it would be better to arrange for such notification if something on the gdb side is interested. Meanwhile, this patch fixes py-thread-exited.exp to work around this problem. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30677 --- gdb/testsuite/gdb.python/py-thread-exited.c | 6 +++--- gdb/testsuite/gdb.python/py-thread-exited.exp | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/gdb.python/py-thread-exited.c b/gdb/testsuite/gdb.python/py-thread-exited.c index fd0342bc765..d62133ba59e 100644 --- a/gdb/testsuite/gdb.python/py-thread-exited.c +++ b/gdb/testsuite/gdb.python/py-thread-exited.c @@ -24,14 +24,14 @@ pthread_t thread3_id; void* do_thread (void* d) { - return NULL; + return NULL; /* In thread */ } int main (void) { pthread_create (&thread2_id, NULL, do_thread, NULL); - pthread_join (thread2_id, NULL); pthread_create (&thread3_id, NULL, do_thread, NULL); + pthread_join (thread2_id, NULL); pthread_join (thread3_id, NULL); - return 12; + return 12; /* Done */ } diff --git a/gdb/testsuite/gdb.python/py-thread-exited.exp b/gdb/testsuite/gdb.python/py-thread-exited.exp index 957585958a2..937816106e2 100644 --- a/gdb/testsuite/gdb.python/py-thread-exited.exp +++ b/gdb/testsuite/gdb.python/py-thread-exited.exp @@ -36,9 +36,17 @@ if ![runto_main] { return -1 } -gdb_breakpoint 37 "last of main" -gdb_continue_to_breakpoint "continue to breakpoint" +gdb_breakpoint [gdb_get_line_number "In thread" ${testfile}.c] +gdb_breakpoint [gdb_get_line_number "Done" ${testfile}.c] + +# gdbserver does not notify new threads on creation. In order for +# this test to even see that the threads are created, we have to +# arrange to stop when they are running. +gdb_continue_to_breakpoint "continue to first in-thread breakpoint" +gdb_continue_to_breakpoint "continue to second in-thread breakpoint" + +gdb_continue_to_breakpoint "continue to end breakpoint" gdb_test "python print(threadOneExit)" \ ".*event type: thread-exited. global num: 2.*" -- 2.30.2