diff options
author | Pedro Alves <pedro@palves.net> | 2022-12-12 20:31:00 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2023-08-23 09:57:38 +0100 |
commit | 9d7d58e7262eff313be6a1e66b8b026e3e7fed0d (patch) | |
tree | 4f400354dec983e1778afb7682505c70cd1727c7 /gdb/testsuite | |
parent | 9324bfeab9b819042ddbab4ce8918ee533db651a (diff) | |
download | gdb-9d7d58e7262eff313be6a1e66b8b026e3e7fed0d.zip gdb-9d7d58e7262eff313be6a1e66b8b026e3e7fed0d.tar.gz gdb-9d7d58e7262eff313be6a1e66b8b026e3e7fed0d.tar.bz2 |
gdb: centralize "[Thread ...exited]" notifications
Currently, each target backend is responsible for printing "[Thread
...exited]" before deleting a thread. This leads to unnecessary
differences between targets, like e.g. with the remote target, we
never print such messages, even though we do print "[New Thread ...]".
E.g., debugging the gdb.threads/attach-many-short-lived-threads.exp
with gdbserver, letting it run for a bit, and then pressing Ctrl-C, we
currently see:
(gdb) c
Continuing.
^C[New Thread 3850398.3887449]
[New Thread 3850398.3887500]
[New Thread 3850398.3887551]
[New Thread 3850398.3887602]
[New Thread 3850398.3887653]
...
Thread 1 "attach-many-sho" received signal SIGINT, Interrupt.
0x00007ffff7e6a23f in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7fffffffda80, rem=rem@entry=0x7fffffffda80)
at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78 in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
(gdb)
Above, we only see "New Thread" notifications, even though threads
were deleted.
After this patch, we'll see:
(gdb) c
Continuing.
^C[Thread 3558643.3577053 exited]
[Thread 3558643.3577104 exited]
[Thread 3558643.3577155 exited]
[Thread 3558643.3579603 exited]
...
[New Thread 3558643.3597415]
[New Thread 3558643.3600015]
[New Thread 3558643.3599965]
...
Thread 1 "attach-many-sho" received signal SIGINT, Interrupt.
0x00007ffff7e6a23f in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7fffffffda80, rem=rem@entry=0x7fffffffda80)
at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78 in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
(gdb) q
This commit fixes this by moving the thread exit printing to common
code instead, triggered from within delete_thread (or rather,
set_thread_exited).
There's one wrinkle, though. While most targest want to print:
[Thread ... exited]
the Windows target wants to print:
[Thread ... exited with code <exit_code>]
... and sometimes wants to suppress the notification for the main
thread. To address that, this commits adds a delete_thread_with_code
function, only used by that target (so far).
This fix was originally posted as part of a larger series:
https://inbox.sourceware.org/gdb-patches/20221212203101.1034916-1-pedro@palves.net/
But didn't really need to be part of that series. In order to get
this fix merged sooner, I (Andrew Burgess) have rebased this commit
outside of the original series. Any bugs introduced while splitting
this patch out and rebasing, are entirely my own.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30129
Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.mi/mi-thread-bp-deleted.exp | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/thread-bp-deleted.exp | 12 |
2 files changed, 4 insertions, 22 deletions
diff --git a/gdb/testsuite/gdb.mi/mi-thread-bp-deleted.exp b/gdb/testsuite/gdb.mi/mi-thread-bp-deleted.exp index 0ebca92..bffbb29 100644 --- a/gdb/testsuite/gdb.mi/mi-thread-bp-deleted.exp +++ b/gdb/testsuite/gdb.mi/mi-thread-bp-deleted.exp @@ -235,17 +235,9 @@ foreach_mi_ui_mode mode { # The output has arrived! Check how we did. There are other bugs # that come into play here which change what output we'll see. - if { $saw_mi_thread_exited && $saw_mi_bp_deleted \ - && $saw_cli_thread_exited \ - && $saw_cli_bp_deleted } { - kpass "gdb/30129" $gdb_test_name - } elseif { $saw_mi_thread_exited && $saw_mi_bp_deleted \ - && !$saw_cli_thread_exited \ - && $saw_cli_bp_deleted } { - kfail "gdb/30129" $gdb_test_name - } else { - fail "$gdb_test_name" - } + gdb_assert { $saw_mi_thread_exited && $saw_mi_bp_deleted \ + && $saw_cli_thread_exited \ + && $saw_cli_bp_deleted } $gdb_test_name } } diff --git a/gdb/testsuite/gdb.threads/thread-bp-deleted.exp b/gdb/testsuite/gdb.threads/thread-bp-deleted.exp index 019bddde..92178ff 100644 --- a/gdb/testsuite/gdb.threads/thread-bp-deleted.exp +++ b/gdb/testsuite/gdb.threads/thread-bp-deleted.exp @@ -155,17 +155,7 @@ if {$is_remote} { exp_continue } - # When PR gdb/30129 is fixed then this can all be collapsed down - # into a single gdb_assert call. This is split out like this - # because the SAW_BP_DELETED part is working, and we want to - # spot if that stops working. - if { $saw_thread_exited && $saw_bp_deleted } { - kpass "gdb/30129" $gdb_test_name - } elseif {!$saw_thread_exited && $saw_bp_deleted} { - kfail "gdb/30129" $gdb_test_name - } else { - fail $gdb_test_name - } + gdb_assert { $saw_thread_exited && $saw_bp_deleted } $gdb_test_name } } } else { |