From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by sourceware.org (Postfix) with ESMTPS id E59DF385701F for ; Tue, 23 Mar 2021 13:31:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E59DF385701F Received: by mail-wm1-f51.google.com with SMTP id r10-20020a05600c35cab029010c946c95easo10835981wmq.4 for ; Tue, 23 Mar 2021 06:31:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=0qxy9Nz1urTx4fmuzW1RtPH2prhP6qxfUMEecR0Xu10=; b=Z2PLj98dmhA8XiaM3U7RMyZGiUah6e9mBSHV11dH8MVlEtuCZNAOD+/sJ7/27/qV5g 4HZW7YFPsayMofTf1SCeUc8/kwqlWfP0cNMTcJOnR5AiMx2eY5qmiAOu3HZfl+R0Imrv xZLXnCj2toenVO/hKiKMY0eCxhMLLrF0M/RJnfW5xJADpW86SZHuLpwEVxu3S8E1cBsA zM4SC7+QBE9iyLOvjcb+b8+mAgp/Nty603VDzawTo0WVdfYHn7EcXsjV3hWwFXYrGWkd AWJ/I0161/Nzirc6CYlCB/QF1LFyWGuWF9OwlGTazdoxT2DpopNjnoFBBu+F98E9q5sO 1K7A== X-Gm-Message-State: AOAM530Bwh5+X0f1EKm7p5BuPpGleEKHmE40EzNeQuzJk7OfvaHXCxz2 GFxdn/1kELdZJH36pSz2KIMYTnZ/upA= X-Google-Smtp-Source: ABdhPJxvfMDtuWzzygavLfxKkxBQm+tb6GJZpwMs1ummXTY5ju6a1RXnnyzZshSqRWy6Vv+6U0ZlIA== X-Received: by 2002:a1c:3d8a:: with SMTP id k132mr3347244wma.71.1616506307946; Tue, 23 Mar 2021 06:31:47 -0700 (PDT) Received: from ?IPv6:2a02:c7d:d65a:4200:2236:f008:480a:c873? ([2a02:c7d:d65a:4200:2236:f008:480a:c873]) by smtp.gmail.com with ESMTPSA id h62sm3107069wmf.37.2021.03.23.06.31.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 06:31:44 -0700 (PDT) Message-ID: Subject: [PING] Re: [PATCH] MI: PR20684, preserve user selected thread and frame when invoking MI commands From: Jan Vrany To: gdb-patches@sourceware.org Date: Tue, 23 Mar 2021 13:31:43 +0000 In-Reply-To: References: <20210209100813.710754-1-jan.vrany@labware.com> <71093a268d80ba44ededb868b850dde4873987b3.camel@labware.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, BODY_8BITS, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Tue, 23 Mar 2021 13:31:50 -0000 Polite ping. On Wed, 2021-03-17 at 14:47 +0000, Jan Vrany wrote: > Polite ping. > > On Tue, 2021-03-09 at 12:04 +0000, Jan Vrany wrote: > > Polite ping. > > > > On Tue, 2021-03-02 at 10:36 +0000, Jan Vrany wrote: > > > Polite ping. > > > > > > On Tue, 2021-02-23 at 11:20 +0000, Jan Vrany wrote: > > > > Polite ping. > > > > > > > > On Tue, 2021-02-09 at 10:08 +0000, Jan Vrany wrote: > > > > > When invoking MI commands with --thread and/or --frame, user > > > > > selected > > > > > thread and frame was not preserved: > > > > > > > > > >   (gdb) > > > > >   info thread > > > > >   &"info thread\n" > > > > >   ~"  Id   Target > > > > > Id                                           > > > > > Frame > > > > > \n" > > > > >   ~"* 1    Thread 0x7ffff7c30740 (LWP 19302) \"user-selected- > > > > > c\" > > > > > main > > > > > () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected- > > > > > context- > > > > > sync.c:60\n" > > > > >   ~"  2    Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected- > > > > > c\" > > > > > child_sub_function () at > > > > > /home/uuu/gdb/gdb/testsuite/gdb.mi/user- > > > > > selected-context-sync.c:30\n" > > > > >   ~"  3    Thread 0x7ffff742e700 (LWP 19307) \"user-selected- > > > > > c\" > > > > > child_sub_function () at > > > > > /home/uuu/gdb/gdb/testsuite/gdb.mi/user- > > > > > selected-context-sync.c:30\n" > > > > >   ^done > > > > >   (gdb) > > > > >   info frame > > > > >   &"info frame\n" > > > > >   ~"Stack level 0, frame at 0x7fffffffdf90:\n" > > > > >   ~" rip = 0x555555555207 in main > > > > > (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context- > > > > > sync.c:60); > > > > > saved rip = 0x7ffff7c5709b\n" > > > > >   ~" source language c.\n" > > > > >   ~" Arglist at 0x7fffffffdf80, args: \n" > > > > >   ~" Locals at 0x7fffffffdf80, Previous frame's sp is > > > > > 0x7fffffffdf90\n" > > > > >   ~" Saved registers:\n " > > > > >   ~" rbp at 0x7fffffffdf80, rip at 0x7fffffffdf88\n" > > > > >   ^done > > > > >   (gdb) > > > > >   -stack-info-depth --thread 3 > > > > >   ^done,depth="4" > > > > >   (gdb) > > > > >   info thread > > > > >   &"info thread\n" > > > > >   ~"  Id   Target > > > > > Id                                           > > > > > Frame > > > > > \n" > > > > >   ~"  1    Thread 0x7ffff7c30740 (LWP 19302) \"user-selected- > > > > > c\" > > > > > main > > > > > () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected- > > > > > context- > > > > > sync.c:60\n" > > > > >   ~"  2    Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected- > > > > > c\" > > > > > child_sub_function () at > > > > > /home/uuu/gdb/gdb/testsuite/gdb.mi/user- > > > > > selected-context-sync.c:30\n" > > > > >   ~"* 3    Thread 0x7ffff742e700 (LWP 19307) \"user-selected- > > > > > c\" > > > > > child_sub_function () at > > > > > /home/uuu/gdb/gdb/testsuite/gdb.mi/user- > > > > > selected-context-sync.c:30\n" > > > > >   ^done > > > > >   (gdb) > > > > >   info frame > > > > >   &"info frame\n" > > > > >   ~"Stack level 0, frame at 0x7ffff742dee0:\n" > > > > >   ~" rip = 0x555555555169 in child_sub_function > > > > > (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context- > > > > > sync.c:30); > > > > > saved rip = 0x555555555188\n" > > > > >   ~" called by frame at 0x7ffff742df00\n" > > > > >   ~" source language c.\n" > > > > >   ~" Arglist at 0x7ffff742ded0, args: \n" > > > > >   ~" Locals at 0x7ffff742ded0, Previous frame's sp is > > > > > 0x7ffff742dee0\n" > > > > >   ~" Saved registers:\n " > > > > >   ~" rbp at 0x7ffff742ded0, rip at 0x7ffff742ded8\n" > > > > >   ^done > > > > >   (gdb) > > > > > > > > > > This was problematic for frontends that provide access to CLI > > > > > because > > > > > UI > > > > > may silently change the context for CLI commands (as > > > > > demonstrated > > > > > above). > > > > > > > > > > gdb/Changelog > > > > > > > > > >         PR 20684 > > > > >         * gdb/mi/mi-main.c (mi_cmd_execute): Preserve user > > > > > selected > > > > > thread > > > > >         and frame when invoking MI commands. > > > > > --- > > > > >  gdb/ChangeLog    |  6 ++++++ > > > > >  gdb/mi/mi-main.c | 36 +++++++++++++++--------------------- > > > > >  2 files changed, 21 insertions(+), 21 deletions(-) > > > > > > > > > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > > > > > index e67668d315c..ea232ff1b3f 100644 > > > > > --- a/gdb/ChangeLog > > > > > +++ b/gdb/ChangeLog > > > > > @@ -1,3 +1,9 @@ > > > > > +2021-02-09  Jan Vrany  > > > > > + > > > > > +       PR 20684 > > > > > +       * gdb/mi/mi-main.c (mi_cmd_execute): Preserve user > > > > > selected > > > > > thread > > > > > +       and frame when invoking MI commands. > > > > > + > > > > >  2021-02-08  Shahab Vahedi  > > > > >   > > > > >         PR tdep/27369 > > > > > diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c > > > > > index 9a14d78e1e2..c5103800314 100644 > > > > > --- a/gdb/mi/mi-main.c > > > > > +++ b/gdb/mi/mi-main.c > > > > > @@ -1971,25 +1971,13 @@ mi_execute_command (const char *cmd, > > > > > int > > > > > from_tty) > > > > >              again.  */ > > > > >           && !command_notifies_uscc_observer (command.get > > > > > ())) > > > > >         { > > > > > -         int report_change = 0; > > > > > - > > > > > -         if (command->thread == -1) > > > > > -           { > > > > > -             report_change = (previous_ptid != null_ptid > > > > > -                              && inferior_ptid != > > > > > previous_ptid > > > > > -                              && inferior_ptid != > > > > > null_ptid); > > > > > -           } > > > > > -         else if (inferior_ptid != null_ptid) > > > > > -           { > > > > > -             struct thread_info *ti = inferior_thread (); > > > > > - > > > > > -             report_change = (ti->global_num != command- > > > > > > thread); > > > > > -           } > > > > > - > > > > > -         if (report_change) > > > > > -           { > > > > > -             > > > > > gdb::observers::user_selected_context_changed.notify > > > > > -               (USER_SELECTED_THREAD | USER_SELECTED_FRAME); > > > > > +         if (command->thread == -1 > > > > > +             && previous_ptid != null_ptid > > > > > +             && inferior_ptid != previous_ptid > > > > > +             && inferior_ptid != null_ptid) > > > > > +            { > > > > > +              > > > > > gdb::observers::user_selected_context_changed.notify > > > > > +                      (USER_SELECTED_THREAD | > > > > > USER_SELECTED_FRAME); > > > > >             } > > > > >         } > > > > >      } > > > > > @@ -2035,6 +2023,7 @@ mi_cmd_execute (struct mi_parse *parse) > > > > >        set_current_program_space (inf->pspace); > > > > >      } > > > > >   > > > > > +  gdb::optional thread_saver; > > > > >    if (parse->thread != -1) > > > > >      { > > > > >        thread_info *tp = find_thread_global_id (parse- > > > > > >thread); > > > > > @@ -2045,9 +2034,11 @@ mi_cmd_execute (struct mi_parse > > > > > *parse) > > > > >        if (tp->state == THREAD_EXITED) > > > > >         error (_("Thread id: %d has terminated"), parse- > > > > > > thread); > > > > >   > > > > > +      thread_saver.emplace (); > > > > >        switch_to_thread (tp); > > > > >      } > > > > >   > > > > > +  gdb::optional frame_saver; > > > > >    if (parse->frame != -1) > > > > >      { > > > > >        struct frame_info *fid; > > > > > @@ -2055,8 +2046,11 @@ mi_cmd_execute (struct mi_parse > > > > > *parse) > > > > >   > > > > >        fid = find_relative_frame (get_current_frame (), > > > > > &frame); > > > > >        if (frame == 0) > > > > > -       /* find_relative_frame was successful */ > > > > > -       select_frame (fid); > > > > > +        { > > > > > +          /* find_relative_frame was successful */ > > > > > +          frame_saver.emplace (); > > > > > +          select_frame (fid); > > > > > +        } > > > > >        else > > > > >         error (_("Invalid frame id: %d"), frame); > > > > >      } > > > > > > > > > >