From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 4DF21385B18B for ; Mon, 28 Nov 2022 11:25:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4DF21385B18B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1669634753; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2mLlCmIwN0nI5N2cgaUxorulTNc17c1qW0VyW6w0DRE=; b=K0dzJP/fAZfv/YwUKVi1Kbrt5C9OYI5FJK6Nede7+KnsuDUY1j8feO1zzCGzFbq5Y/UELZ UhCyCtmGJHvV2SxfikZoZDgX3qyAquW5ZDXykN2NyXKdWvZE6q5UJNlM4TEZ++jDZ1qVtt Z/YBxjZQ8MlaWUVeIGyNzgCn8wmgUCA= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-391--OQ_hvHoMS-mTqCGzSWLXQ-1; Mon, 28 Nov 2022 06:25:51 -0500 X-MC-Unique: -OQ_hvHoMS-mTqCGzSWLXQ-1 Received: by mail-wr1-f69.google.com with SMTP id o8-20020adfba08000000b00241e80f08e0so1795399wrg.12 for ; Mon, 28 Nov 2022 03:25:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2mLlCmIwN0nI5N2cgaUxorulTNc17c1qW0VyW6w0DRE=; b=YlSTJEdhkMTMYKtiCeAnWYIQzWlHvAniWWzmhTKviPrC/GxiL3GzNIB+IJcKrCNg/S MoSK/YwL/BgYG0j5xBI+YdJUbA5B3hNWdQV4tngUBlYHoruiV7E0Qd/Zp6n5eik4BTTn lvmGa12GolmzU/GaclYnS9AHwFnEtlNigZWTBREuKKJQRe4ZYXAwC8rAgtVBZn6zaytG dPZlYdWDgYiQvYbLWAMPt919Upjf4K9mCWYdXh44xZz8bylu4NKubH7xwAl5eX5tXjdP 3iSgMBdKOG6ncDMFM9jaVkGjWtUOg2GZu77ZqAfPvTSS7gjIs8wJ9b0wbWUAXJC8JIlM OrSw== X-Gm-Message-State: ANoB5plOGshbJmTgY9OBy3qCNjcr6em9z3ydlfpd5crPuPT7pRpeVnOI XLj7HKQp5Oy+/FI5lCMIZ3RCx+CEpTSQaaPna7Qpc8opzg/u0xfZxkGOGTYGTU4dx1qTnNg0ygu r7OqS9M1+Jzx6KqXmsFrxEl4VnGpFKvBQTgNs260Q3yAEbh31vXUrWsH44zxee3sKLtDMgh89iQ == X-Received: by 2002:a5d:5254:0:b0:242:14dc:a06e with SMTP id k20-20020a5d5254000000b0024214dca06emr3589516wrc.675.1669634750224; Mon, 28 Nov 2022 03:25:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf74dm2bnvZoZm7db0tLCPsiETC4gKyKjBUOUlEaO2S6jZbkLH1RLGkPLymwgbYZl9VffTxmlQ== X-Received: by 2002:a5d:5254:0:b0:242:14dc:a06e with SMTP id k20-20020a5d5254000000b0024214dca06emr3589480wrc.675.1669634749811; Mon, 28 Nov 2022 03:25:49 -0800 (PST) Received: from localhost ([31.111.84.238]) by smtp.gmail.com with ESMTPSA id c12-20020adfed8c000000b00236b2804d79sm10613571wro.2.2022.11.28.03.25.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Nov 2022 03:25:49 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 6/6] gdb: convert the 'start' breakpoint to use inferior keyword Date: Mon, 28 Nov 2022 11:25:38 +0000 Message-Id: X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Now that we have support for inferior specific breakpoints, the breakpoint created for the 'start' command can make use of this keyword. In most cases the observed functionality should be unchanged from a user's point of view, though the code in GDB is a little cleaner now, we no longer need to change the expression used based on the language. I do wonder if the current mechanism could run into problems if we had different inferiors of different languages. For example, if we had an Ada inferior and a C inferior and followed a process a little like this: 1. Start C inferior, the inferior stops before main for some reason, 2. Start the Ada inferior, this runs to main, 3. I think when we hit main, the condition for both breakpoints will be evaluated, this will include evaluating the expression for the C 'start' breakpoint, which uses '==' and is, I guess, not valid for Ada. I haven't tried to create a testcase for this situation, but it's a possibly interesting edge case. One place where the observed behaviour is different, is that inferior breakpoints, like thread breakpoints, will be auto-deleted when the contained inferior exits. As a result, if an inferior exits before hitting the start breakpoint, then the 'start' breakpoint will be auto-deleted. I have got a test that covers this situation. --- gdb/infcmd.c | 10 +--- .../gdb.base/start-inferior-specific-1.c | 32 +++++++++++ .../gdb.base/start-inferior-specific-2.c | 22 ++++++++ .../gdb.base/start-inferior-specific.exp | 55 +++++++++++++++++++ 4 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 gdb/testsuite/gdb.base/start-inferior-specific-1.c create mode 100644 gdb/testsuite/gdb.base/start-inferior-specific-2.c create mode 100644 gdb/testsuite/gdb.base/start-inferior-specific.exp diff --git a/gdb/infcmd.c b/gdb/infcmd.c index f7bce0d0399..7aa9a959bdb 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -429,13 +429,9 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how) have proper inferior-specific breakpoint support, in the breakpoint machinery. We could then avoid inserting a breakpoint in the program spaces unrelated to this inferior. */ - const char *op - = ((current_language->la_language == language_ada - || current_language->la_language == language_pascal - || current_language->la_language == language_m2) ? "=" : "=="); - std::string arg = string_printf - ("-qualified %s if $_inferior %s %d", main_name (), op, - current_inferior ()->num); + std::string arg = string_printf ("-qualified %s inferior %d", + main_name (), + current_inferior ()->num); tbreak_command (arg.c_str (), 0); } diff --git a/gdb/testsuite/gdb.base/start-inferior-specific-1.c b/gdb/testsuite/gdb.base/start-inferior-specific-1.c new file mode 100644 index 00000000000..1717a82b75d --- /dev/null +++ b/gdb/testsuite/gdb.base/start-inferior-specific-1.c @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + 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 . */ + +#include +#include + +__attribute__((constructor)) +static void +ctor (void) +{ + exit (1); +} + +int +main () +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/start-inferior-specific-2.c b/gdb/testsuite/gdb.base/start-inferior-specific-2.c new file mode 100644 index 00000000000..b69e218962a --- /dev/null +++ b/gdb/testsuite/gdb.base/start-inferior-specific-2.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + 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 . */ + +int +main () +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/start-inferior-specific.exp b/gdb/testsuite/gdb.base/start-inferior-specific.exp new file mode 100644 index 00000000000..50e4e109116 --- /dev/null +++ b/gdb/testsuite/gdb.base/start-inferior-specific.exp @@ -0,0 +1,55 @@ +# 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 . + +# Check that a breakpoint created for the 'start' command, will be +# silently deleted if the inferior being started exits before reaching +# main. + +standard_testfile -1.c -2.c + +if {[use_gdb_stub]} { + return +} + +set srcfile1 ${srcfile} + +set binfile1 ${binfile}-1 +set binfile2 ${binfile}-2 + +if {[build_executable ${testfile}.exp ${binfile1} "${srcfile1}"] != 0} { + return -1 +} + +if {[build_executable ${testfile}.exp ${binfile2} "${srcfile2}"] != 0} { + return -1 +} + +clean_restart ${binfile1} + +# Start the first inferior, this will exit before hitting the 'start' +# breakpoint in main. +gdb_test "start" \ + [multi_line \ + "Temporary breakpoint $decimal at \[^\r\n\]+" \ + "Starting program: \[^\r\n\]+" \ + "\\\[Inferior $decimal \[^\r\n\]+ exited with code 01\\\]"] + +# Now load a different binary and run it. This inferior should run +# all the way to completion without hitting a breakpoint in main. +gdb_load ${binfile2} +gdb_test "run" \ + [multi_line \ + "Starting program: \[^\r\n\]+" \ + "\\\[Inferior $decimal \[^\r\n\]+ exited normally\\\]"] -- 2.25.4