From patchwork Fri May 17 15:51:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amos Bird X-Patchwork-Id: 32746 Received: (qmail 120453 invoked by alias); 17 May 2019 15:50:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 120441 invoked by uid 89); 17 May 2019 15:50:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-pg1-f196.google.com Received: from mail-pg1-f196.google.com (HELO mail-pg1-f196.google.com) (209.85.215.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 17 May 2019 15:50:55 +0000 Received: by mail-pg1-f196.google.com with SMTP id t187so3469960pgb.13 for ; Fri, 17 May 2019 08:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=uVOzomedJ83mTRsx4WIYtX6usngwS4yb0Rxnw5rajgI=; b=iQ/BT5+EKGTRKYeBxokuMIGg4Od7eAWzyiAzWYHbyF3nMJZ5gyo3e6n3aI8fgvHyRn 0gHokTgwczrdhL/x7oKl6SXa1Cz18PsHg5gwqqPbL/VVN/M0VvWfzz/BvnPScb76yTK4 HbKl+3+9deLCdwVQAgg6f2y1yj8BShISqnhWp1mNmGAj0Oj2dSCIsa+dOlIvKwnCr8vk fjxld4YrNO62h8f7T9SlrdR3frKcD1Qv4FeBWKegOMe9mn3MrPey4XLkkJSg67mhCSj5 QJ+tvmoLR2k09HqptAftqEk42EBURaJNgyQAmngj/2F22G4jrO4179QsiIE7znXBA8rU 68cg== Return-Path: Received: from localhost ([13.75.109.155]) by smtp.gmail.com with ESMTPSA id k9sm10900554pfa.180.2019.05.17.08.50.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 17 May 2019 08:50:53 -0700 (PDT) References: <87d0l8pzdz.fsf@gmail.com> <87ef5j33au.fsf@tromey.com> <87ftpzo1wa.fsf@gmail.com> <20190516131419.GA29999@blade.nx> <87ftpepk1l.fsf@gmail.com> <83d0kicvs6.fsf@gnu.org> <87ef4ypif5.fsf@gmail.com> <441e0b74-a391-2d68-e5d3-f43f1b8da188@simark.ca> <87r28xciz3.fsf@gmail.com> User-agent: mu4e 1.1.0; emacs 27.0.50 From: Amos Bird To: Simon Marchi Cc: Eli Zaretskii , gbenson@redhat.com, gdb-patches@sourceware.org, tom@tromey.com Subject: Re: [PATCH] Add "thread-exited" annotation In-reply-to: Date: Fri, 17 May 2019 23:51:10 +0800 Message-ID: <87pnohcc5t.fsf@gmail.com> MIME-Version: 1.0 Fixed and updated patch. Thanks! Simon Marchi writes: > On 2019-05-17 9:24 a.m., Amos Bird wrote: >> >> Hi Simon, >> >>> I don't mind if we start using MI-like syntax for annotation >>> parameters, but it should >>> be a conscious decision to do so. >> >> To be honest I don't use the extra information at all in cgdb, >> only "thread-exited". So >> I'm OK to whatever format it ends up to have. >> >> Patch updated, thanks! > > The test fails here, please verify that the it passes using: > > gdb/ $ make check TESTS="gdb.base/annota1.exp" > > You'll need at least to declare "global decimal" to be able to > access the decimal variable. > When adding that, I get a FAIL that I don't get without the > patch applied: > > FAIL: gdb.base/annota1.exp: signal sent (timeout) > > Any interesting output will end up in testsuite/gdb.log. > > Simon --- Amos Bird amosbird@gmail.com From 7da413c7e6a2d7bb68fb66bcefb1679cdd7ba2fa Mon Sep 17 00:00:00 2001 From: Amos Bird Date: Fri, 17 May 2019 21:23:09 +0800 Subject: [PATCH] Add "thread-exit" annotation. --- gdb/ChangeLog | 5 +++++ gdb/NEWS | 2 ++ gdb/annotate.c | 14 ++++++++++++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/annotate.texinfo | 7 +++++++ gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/annota1.exp | 12 +++++++++++- 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e0120e7743..849ed30731 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-04-26 Amos Bird + + * annotate.c (annotate_thread_exited): Add "thread-exited" + annotation. + 2019-04-25 Keith Seitz PR c++/24367 diff --git a/gdb/NEWS b/gdb/NEWS index 5309a8f923..735d915ec6 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,8 @@ *** Changes since GDB 8.3 +* 'thread-exited' event is now available in the annotations interface. + * New built-in convenience variables $_gdb_major and $_gdb_minor provide the GDB version. They are handy for conditionally using features available only in or since specific GDB versions, in diff --git a/gdb/annotate.c b/gdb/annotate.c index 97cb4c8855..af804ddd1f 100644 --- a/gdb/annotate.c +++ b/gdb/annotate.c @@ -241,6 +241,19 @@ annotate_thread_changed (void) } } +/* Emit notification on thread exit. */ + +static void +annotate_thread_exited (struct thread_info *t, int silent) +{ + if (annotation_level > 1) + { + printf_filtered(("\n\032\032thread-exited," + "id=\"%d\",group-id=\"i%d\"\n"), + t->global_num, t->inf->num); + } +} + void annotate_field_begin (struct type *type) { @@ -595,4 +608,5 @@ _initialize_annotate (void) gdb::observers::breakpoint_created.attach (breakpoint_changed); gdb::observers::breakpoint_deleted.attach (breakpoint_changed); gdb::observers::breakpoint_modified.attach (breakpoint_changed); + gdb::observers::thread_exit.attach (annotate_thread_exited); } diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index ba152329d7..79b837aac6 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2019-04-26 Amos Bird + + * annotate.texinfo (Multi-threaded Apps): Add entry for thread-exited + annotation. + 2019-04-22 Pedro Alves * gdb.texinfo (Reverse Execution): Mention and xref process record diff --git a/gdb/doc/annotate.texinfo b/gdb/doc/annotate.texinfo index b85b759f9a..ee8147f52f 100644 --- a/gdb/doc/annotate.texinfo +++ b/gdb/doc/annotate.texinfo @@ -836,6 +836,13 @@ The selected thread has changed. This may occur at the request of the user with the @code{thread} command, or as a result of execution, e.g., another thread hits a breakpoint. +@findex thread-exited@r{, annotation} +@item ^Z^Zthread-exited,id="@var{id}",group-id="@var{gid}" + +This annotation is issued once for each thread that exits. The @var{id} +field contains the global @value{GDBN} identifier of the thread. The +@var{gid} field identifies the thread group this thread belongs to. + @end table @node GNU Free Documentation License diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9b0725a033..d7a9b5611d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-04-26 Amos Bird + + * gdb.base/annota1.exp (thread_switch): Add test for + thread-exited annotation. + 2019-04-25 Keith Seitz PR c++/24367 diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp index 5237bc9715..25ed1dc439 100644 --- a/gdb/testsuite/gdb.base/annota1.exp +++ b/gdb/testsuite/gdb.base/annota1.exp @@ -428,7 +428,7 @@ if [target_info exists gdb,nosignals] { unsupported "signal sent" } else { gdb_test_multiple "signal SIGTRAP" "signal sent" { - -re ".*\032\032post-prompt\r\nContinuing with signal SIGTRAP.\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032signalled\r\n\r\nProgram terminated with signal \r\n\032\032signal-name\r\nSIGTRAP\r\n\032\032signal-name-end\r\n, \r\n\032\032signal-string\r\nTrace.breakpoint trap\r\n\032\032signal-string-end\r\n.\r\nThe program no longer exists.\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { +-re ".*\032\032post-prompt\r\nContinuing with signal SIGTRAP.\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)+\r\n\r\n\032\032signalled\r\n\r\nProgram terminated with signal \r\n\032\032signal-name\r\nSIGTRAP\r\n\032\032signal-name-end\r\n, \r\n\032\032signal-string\r\nTrace.breakpoint trap\r\n\032\032signal-string-end\r\n.\r\nThe program no longer exists.\r\n\r\n\032\032thread-exited,id=\"${decimal}\",group-id=\"i${decimal}\"\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { pass "signal sent" } } @@ -492,8 +492,18 @@ proc thread_switch {} { } } +proc thread_exit {} { + global decimal + gdb_test_multiple "call (void)pthread_exit()" "thread exit" { + -re ".*\032\032thread-exited,id=\"${decimal}\",group-id=\"i${decimal}\"" { + pass "thread exit" + } + } +} + thread_test thread_switch +thread_exit # restore the original prompt for the rest of the testsuite -- 2.21.0