From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by sourceware.org (Postfix) with ESMTPS id 36EBD3857812 for ; Tue, 2 Mar 2021 10:36:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 36EBD3857812 Received: by mail-wm1-f54.google.com with SMTP id u125so2136721wmg.4 for ; Tue, 02 Mar 2021 02:36:03 -0800 (PST) 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=Glt/SNK8v5cfeRM5wmttkxU5HvCTqBYIsWJIjCwICtc=; b=O+tjhmiPra5TYnJcCoXUF9qjlZn3lJU7rYQrrmgmY7Wzp3z/g57uYYF5hpz6gt0Fyr 2avgc6ekfo0XvGGM5Wg5ehR82kDm2tDVP4zKKDtaG97vG2tw6iqm19amYuIZd1rs+Fep Afn/x+2dlI/HanYSyK7/MMijK/eJ5yp2Vrz99vqu7S/CLCJNoG/LtYZYbZUPwBtKE/5A fVfZQ/87IF7c60r0TWzxBGqMNha3qVRcytVNLZPZiVlU9LT1j64QqR46qHo/HU+bka6n ltc7bkBfyE/DMOE2bBWimUL7zypyrlvwzt8wGKjYuVgd+Bq4wWGSFA4HAPTC+vIjqfB4 L8MA== X-Gm-Message-State: AOAM530vmoNYS+yDo+H1Iv1xDbOAiu9F6ZPD/mmpQggczyKUpdxWJPnh fkxjfphf3zvpQqmqvE0Qc1v60RDrCk8= X-Google-Smtp-Source: ABdhPJwceBFCS6z7Ns7Z6qGwO8M+qtvCwRam9GzNkbVeW2VqF1OZeYsAZybyRh5wNgrTTb9rzeh22A== X-Received: by 2002:a7b:c4c9:: with SMTP id g9mr2348727wmk.82.1614681362326; Tue, 02 Mar 2021 02:36:02 -0800 (PST) Received: from sao.lan ([83.219.56.252]) by smtp.gmail.com with ESMTPSA id h10sm26604921wrp.22.2021.03.02.02.36.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Mar 2021 02:36:01 -0800 (PST) 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, 02 Mar 2021 10:36:00 +0000 In-Reply-To: <71093a268d80ba44ededb868b850dde4873987b3.camel@labware.com> 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.8 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, 02 Mar 2021 10:36:07 -0000 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); > >      } >