From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by sourceware.org (Postfix) with ESMTPS id 6B5843858D1E for ; Mon, 11 Jul 2022 18:50:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6B5843858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f46.google.com with SMTP id v16so8150922wrd.13 for ; Mon, 11 Jul 2022 11:50:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:from:to:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=lbSr0TvTAeR9Tm+uv1cCri/lJqff1WaVJixg73Zq2Ds=; b=1bOBepAftAd9Y3l7nCAX2PYR2BoVuTXuomuDvbkl0Ar7+hZcSsbKUD6T59FBzsAxEG WRhsjEmyLw5125jdj+uoOgOKFu9AqzDIMvyrpjoBm2gdOOLl45VRonzlyI+bqjSSoQjf LWr3BpiDJAAESo5yxNBx7n3UsKW0toEozbREZo6VTTpDPYbCae9nIQEDrE6Gmoz9HpKE tzk9FU3JyCHowwCCLALGC8ZrwdiPpjqTpYl5/ZEOUmKBTfeUVosMj1n2w5CbyuOy2mSH hoRd8FWc0EYeEGE7ACuFhw/67eBZc0286yeeob19lNgD+WagkW/9Wg/koryNhlnBkwte p+0A== X-Gm-Message-State: AJIora9q2nOopbmZn1C5xfI7IQIlE4bdZKPkE6Ha+HG6Nu3qMVWtci9x accOlfeuPolh7QUVzQXsvxhVUwIHEhE= X-Google-Smtp-Source: AGRyM1ui0XGRG5kuCYWpBOjSBz6en+Qyc6mefA80Y8aJbU0uHdYLXwTXcpsLhhoJxZ4Y5MkJLnWzew== X-Received: by 2002:adf:e486:0:b0:21d:7f2a:6b67 with SMTP id i6-20020adfe486000000b0021d7f2a6b67mr18482323wrm.293.1657565407981; Mon, 11 Jul 2022 11:50:07 -0700 (PDT) Received: from ?IPv6:2001:8a0:f924:2600:209d:85e2:409e:8726? ([2001:8a0:f924:2600:209d:85e2:409e:8726]) by smtp.gmail.com with ESMTPSA id j16-20020adfff90000000b0021d76a1b0e3sm6406065wrr.6.2022.07.11.11.50.06 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Jul 2022 11:50:06 -0700 (PDT) Subject: Re: [PATCH] Always emit =thread-exited notifications, even if silent From: Pedro Alves To: gdb-patches@sourceware.org References: <20220624144402.1189751-1-pedro@palves.net> Message-ID: <0f6df2d8-9f1e-737b-30ac-672b3b6dae84@palves.net> Date: Mon, 11 Jul 2022 19:50:05 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20220624144402.1189751-1-pedro@palves.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jul 2022 18:50:21 -0000 I've merged this to master now. On 2022-06-24 3:44 p.m., Pedro Alves wrote: > [Note: the testcased added by this commit depends on > https://sourceware.org/pipermail/gdb-patches/2022-June/190259.html, > otherwise GDB just crashes when detaching the core] > > Currently, in MI, =thread-created are always emitted, like: > > =thread-group-started,id="i1",pid="195680" > =thread-created,id="1",group-id="i1" > ... > > but on teardown, if the target uses exit_inferior_silent, then you'll > only see the inferior exit notification (thread-group-exited), no > notification for threads. > > The core target is one of the few targets that use > exit_inferior_silent. Here's an example session: > > -target-select core $corefile > =thread-group-started,id="i1",pid="195680" > =thread-created,id="1",group-id="i1" > ... > ^connected,frame=.... > (gdb) > -target-detach > =thread-group-exited,id="i1" > ^done > (gdb) > > This imbalance of emitting =thread-created but then not =thread-exited > seems off to me. (And, it complicates changes I want to do to > centralize emitting thread exit notifications for the CLI, which is > why I'm looking at this.) > > And then, since most other targets use exit_inferior instead of > exit_inferior_silent, MI is already emitting =thread-exited > notifications when tearing down an inferior, for most targets. > > This commit makes MI always emit the =thread-exited notifications, > even for exit_inferior_silent. > > Afterwards, when debugging a core, MI outputs: > > (gdb) > -target-detach > =thread-exited,id="1",group-id="i1" << new line > =thread-group-exited,id="i1" > ^done > (gdb) > > Surprisingly, there's no MI testcase debugging a core file. This > commit adds the first. > > Change-Id: I5100501a46f07b6bbad3e04d120c2562a51c93a4 > --- > gdb/mi/mi-interp.c | 3 -- > gdb/testsuite/gdb.mi/mi-corefile.c | 27 +++++++++++ > gdb/testsuite/gdb.mi/mi-corefile.exp | 69 ++++++++++++++++++++++++++++ > 3 files changed, 96 insertions(+), 3 deletions(-) > create mode 100644 gdb/testsuite/gdb.mi/mi-corefile.c > create mode 100644 gdb/testsuite/gdb.mi/mi-corefile.exp > > diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c > index 8d6e0334a90..937a3d9d6f5 100644 > --- a/gdb/mi/mi-interp.c > +++ b/gdb/mi/mi-interp.c > @@ -358,9 +358,6 @@ mi_new_thread (struct thread_info *t) > static void > mi_thread_exit (struct thread_info *t, int silent) > { > - if (silent) > - return; > - > SWITCH_THRU_ALL_UIS () > { > struct mi_interp *mi = as_mi_interp (top_level_interpreter ()); > diff --git a/gdb/testsuite/gdb.mi/mi-corefile.c b/gdb/testsuite/gdb.mi/mi-corefile.c > new file mode 100644 > index 00000000000..58e6f35a61a > --- /dev/null > +++ b/gdb/testsuite/gdb.mi/mi-corefile.c > @@ -0,0 +1,27 @@ > +/* Copyright 2022 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +/* Simple little program that just generates a core dump. */ > + > +#include > + > +int > +main (int argc, char **argv) > +{ > + abort (); > + return 0; > +} > diff --git a/gdb/testsuite/gdb.mi/mi-corefile.exp b/gdb/testsuite/gdb.mi/mi-corefile.exp > new file mode 100644 > index 00000000000..d8ca6b3b34f > --- /dev/null > +++ b/gdb/testsuite/gdb.mi/mi-corefile.exp > @@ -0,0 +1,69 @@ > +# Copyright 2022 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > +# Test loading and unloading a core file. > + > +load_lib mi-support.exp > +set MIFLAGS "-i=mi" > + > +if ![isnative] then { > + return > +} > + > +standard_testfile > + > +if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} { > + untested "failed to compile" > + return -1 > +} > + > +set corefile [core_find $binfile {}] > +if {$corefile == ""} { > + return 0 > +} > + > +if [mi_gdb_start] { > + return > +} > + > +# Test loading and unloading a core file. > + > +proc test_core_file {} { > + mi_delete_breakpoints > + mi_gdb_reinitialize_dir $::srcdir/$::subdir > + mi_gdb_load ${::binfile} > + > + # This also tests that MI emits paired =thread-created and > + # =thread-exited notifications when loading and unloading the > + # core. At some point, GDB emitted =thread-created notifications, > + # but not =thread-exited notifications. > + > + mi_gdb_test \ > + "-target-select core $::corefile" \ > + [multi_line \ > + "=thread-group-started,id=\"i1\",.*" \ > + "=thread-created,id=\"1\",group-id=\"i1\"" \ > + ".*\\^connected,frame=.*"] \ > + "-target-select core \$corefile" > + > + mi_gdb_test \ > + "-target-detach" \ > + [multi_line \ > + "=thread-exited,id=\"1\",group-id=\"i1\"" \ > + "=thread-group-exited,id=\"i1\"" \ > + ".*\\^done"] > +} > + > +test_core_file > > base-commit: 9704b8b4bc58f4f464961cca97d362fd33740ce8 >