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 45D90385800E for ; Wed, 2 Mar 2022 11:57:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 45D90385800E Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-649-cl-zEKZ0M-q7F58VqFayLA-1; Wed, 02 Mar 2022 06:57:44 -0500 X-MC-Unique: cl-zEKZ0M-q7F58VqFayLA-1 Received: by mail-wm1-f71.google.com with SMTP id h19-20020a05600c351300b0038141cf26deso747041wmq.8 for ; Wed, 02 Mar 2022 03:57:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ps8MAvoiKaxzI0Pwkf1vLHRBG4QITyMGlXLbs85ZzUM=; b=sNX2IIAO7cHlS1ayEL33Llupo686d4orZxc49fNJ7n19FJKYtonomHxGkN1//1wmEY 6eDEjULLsDZX764izpzZrzvU5w7E7t7ohooPr6nE4Inz4VBoKC29UlVirEMKKRJ9icDV /NCbhhDrSS6Zgk+QLX37/vYnf3C0bpOhXdWxC5PnGkkZNCaCVSlwB4tNoqTxX5WggnY7 0bZDHM9plqXi9oZ4RYDRWrn1fmLkbCklKnaKb6BfI4Re0cyb1JkuFKLGUpG6M8YtBPeW GFvKuPyjATbImrarET+jrKnjh+sJftjV6n1UFWYG6FGGcGlV9trSHf9Zic/+6DByyGEE 10zw== X-Gm-Message-State: AOAM533WVEtpycSBDi7QZf7OOtOTCG06io2TnmOrsHLQVlxFnORKRRtW e1XEjI4HlDdwuaGx4g3TjpiQGyiquIF1Vx4tF1PSz/b+Yw5VpkPgUNg61rVN/gxo7E07YryNPjV 8LcYEjyiID4th/iN36xN16QOaBOnWCz034bFTuuos73vNGcCUywTvh9FjmzOgGEOi1fiVvojVSA == X-Received: by 2002:adf:bc09:0:b0:1f0:2483:48b with SMTP id s9-20020adfbc09000000b001f02483048bmr3212417wrg.118.1646222263138; Wed, 02 Mar 2022 03:57:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJwYqHZIdRnOsQWBjzeoDqDx61pUUULYbiAtuLD2fVnbMr3afbeYQ4GyZPptMkfYfBAtQm8gig== X-Received: by 2002:adf:bc09:0:b0:1f0:2483:48b with SMTP id s9-20020adfbc09000000b001f02483048bmr3212393wrg.118.1646222262770; Wed, 02 Mar 2022 03:57:42 -0800 (PST) Received: from localhost (host86-169-131-29.range86-169.btcentralplus.com. [86.169.131.29]) by smtp.gmail.com with ESMTPSA id a3-20020a7bc1c3000000b00380e493660esm5248444wmj.42.2022.03.02.03.57.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Mar 2022 03:57:42 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCHv2 2/2] gdb/mi: add --no-connection to MI -add-inferior command Date: Wed, 2 Mar 2022 11:57:36 +0000 Message-Id: <2d926ccc029733a21d4b1483f89b87739e570b29.1646221667.git.aburgess@redhat.com> 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-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Wed, 02 Mar 2022 11:57:47 -0000 Following on from the previous commit, where the -add-inferior command now uses the same connection as the current inferior, this commit adds a --no-connection option to -add-inferior. This new option matches the existing option of the same name for the CLI version of add-inferior; the new inferior is created with no connection. I've added a new 'connection' field to the MI output of -add-inferior, which includes the connection number and short name. I haven't included the longer description field, this is the MI after all. My expectation would be that if the frontend wanted to display all the connection details then this would be looked up from 'info connection' (or the MI equivalent if/when such a command is added). The existing -add-inferior tests are updated, as are the docs. --- gdb/doc/gdb.texinfo | 39 +++++++++++++++++--- gdb/mi/mi-main.c | 45 +++++++++++++++++++++--- gdb/testsuite/gdb.mi/mi-add-inferior.exp | 10 +++++- 3 files changed, 84 insertions(+), 10 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 504eb663c14..00824f840eb 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -3310,6 +3310,7 @@ @w{@code{remove-inferiors}} command. @table @code +@anchor{add_inferior_cli} @kindex add-inferior @item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ] [-no-connection ] Adds @var{n} inferiors to be run using @var{executable} as the @@ -37101,15 +37102,45 @@ @subheading Synopsis @smallexample --add-inferior +-add-inferior [ --no-connection ] @end smallexample Creates a new inferior (@pxref{Inferiors Connections and Programs}). The created inferior is not associated with any executable. Such association may be established with the @samp{-file-exec-and-symbols} command -(@pxref{GDB/MI File Commands}). The command response has a single -field, @samp{inferior}, whose value is the identifier of the -thread group corresponding to the new inferior. +(@pxref{GDB/MI File Commands}). + +By default, the new inferior begins connected to the same target +connection as the current inferior. For example, if the current +inferior was connected to @code{gdbserver} with @code{target remote}, +then the new inferior will be connected to the same @code{gdbserver} +instance. The @samp{--no-connection} option starts the new inferior +with no connection yet. You can then for example use the +@code{-target-select remote} command to connect to some other +@code{gdbserver} instance, use @code{-exec-run} to spawn a local +program, etc. + +The command response always has a field, @samp{inferior}, whose value +is the identifier of the thread group corresponding to the new +inferior. + +An additional section field, @samp{connection}, is optional. This +field will only exist if the new inferior has a target connection. If +this field exists, then its value will be a tuple containing the +following fields: + +@table @samp +@item number +The number of the connection used for the new inferior. + +@item name +The name of the connection type used for the new inferior. +@end table + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{add-inferior} +(@pxref{add_inferior_cli,,@samp{add-inferior}}). @subheading Example diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 2fab592d6fb..b3592964e3d 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -1703,18 +1703,53 @@ mi_cmd_list_target_features (const char *command, char **argv, int argc) void mi_cmd_add_inferior (const char *command, char **argv, int argc) { - struct inferior *inf; + bool no_connection = false; - if (argc != 0) - error (_("-add-inferior should be passed no arguments")); + /* Parse the command options. */ + enum opt + { + NO_CONNECTION_OPT, + }; + static const struct mi_opt opts[] = + { + {"-no-connection", NO_CONNECTION_OPT, 0}, + {NULL, 0, 0}, + }; + + int oind = 0; + char *oarg; + + while (1) + { + int opt = mi_getopt ("-add-inferior", argc, argv, opts, &oind, &oarg); + + if (opt < 0) + break; + switch ((enum opt) opt) + { + case NO_CONNECTION_OPT: + no_connection = true; + break; + } + } scoped_restore_current_pspace_and_thread restore_pspace_thread; - inf = add_inferior_with_spaces (); + inferior *inf = add_inferior_with_spaces (); - switch_to_inferior_and_push_target (inf, false, current_inferior ()); + switch_to_inferior_and_push_target (inf, no_connection, + current_inferior ()); current_uiout->field_fmt ("inferior", "i%d", inf->num); + + process_stratum_target *proc_target = inf->process_target (); + + if (proc_target != nullptr) + { + ui_out_emit_tuple tuple_emitter (current_uiout, "connection"); + current_uiout->field_unsigned ("number", proc_target->connection_number); + current_uiout->field_string ("name", proc_target->shortname ()); + } } void diff --git a/gdb/testsuite/gdb.mi/mi-add-inferior.exp b/gdb/testsuite/gdb.mi/mi-add-inferior.exp index 3f0cd7cc06c..85cd6a5271d 100644 --- a/gdb/testsuite/gdb.mi/mi-add-inferior.exp +++ b/gdb/testsuite/gdb.mi/mi-add-inferior.exp @@ -79,7 +79,7 @@ mi_gdb_test "-add-inferior" \ [multi_line "=thread-group-added,id=\"\[^\"\]+\"" \ "~\"\\\[New inferior 2\\\]\\\\n\"" \ "\~\"Added inferior 2 on connection ${conn_pattern}\\\\n\"" \ - "\\^done,inferior=\"\[^\"\]+\"" ] \ + "\\^done,inferior=\"\[^\"\]+\",connection=\{number=\"$decimal\",name=\"\[^\"\]+\"\}" ] \ "mi add inferior" # Now run 'info inferiors' again to check that the currently selected @@ -120,3 +120,11 @@ gdb_test_multiple "info inferiors" \ pass $gdb_test_name } } + +# Add a third inferior, but this time, use --no-connection. +mi_gdb_test "-add-inferior --no-connection" \ + [multi_line "=thread-group-added,id=\"\[^\"\]+\"" \ + "~\"\\\[New inferior 3\\\]\\\\n\"" \ + "\~\"Added inferior 3\\\\n\"" \ + "\\^done,inferior=\"\[^\"\]+\"" ] \ + "mi add inferior with no connection" -- 2.25.4