From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 43587 invoked by alias); 4 Aug 2015 16:02:48 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 43003 invoked by uid 89); 4 Aug 2015 16:02:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_50,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 04 Aug 2015 16:02:46 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id CD70F7D; Tue, 4 Aug 2015 16:02:44 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t74G2hSA012349; Tue, 4 Aug 2015 12:02:43 -0400 Message-ID: <55C0E222.1030006@redhat.com> Date: Tue, 04 Aug 2015 16:02:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Andrew Burgess , gdb-patches@sourceware.org Subject: Re: [PATCH 1/2] gdb: get_frame_language now takes a frame parameter. References: <27becf0497c6090b676523ee45069d3e5e6afa17.1438699523.git.andrew.burgess@embecosm.com> In-Reply-To: <27becf0497c6090b676523ee45069d3e5e6afa17.1438699523.git.andrew.burgess@embecosm.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-08/txt/msg00083.txt.bz2 On 08/04/2015 04:40 PM, Andrew Burgess wrote: > As part of a drive to remove deprecated_safe_get_selected_frame, make > the get_frame_language function take a frame parameter. Given the name > of the function this actually seems to make a lot of sense. > > The task of fetching a suitable frame is then passed to the calling > functions. For get_frame_language there are not many callers, these are > updated to get the selected frame in a suitable way. Thanks. > > gdb/ChangeLog: > > * language.c (show_language_command): Find selected frame before > asking for the language of that frame. > (set_language_command): Likewise. > * language.h (get_frame_language): Add frame parameter. > * stack.c (get_frame_language): Add frame parameter, assert > parameter is not NULL, update comment and reindent. > * top.c (check_frame_language_change): Pass the selected frame > into get_frame_language. > --- > gdb/ChangeLog | 11 +++++++++++ > gdb/language.c | 33 +++++++++++++++++++++++-------- > gdb/language.h | 2 +- > gdb/stack.c | 61 ++++++++++++++++++++++++++++------------------------------ > gdb/top.c | 7 ++++--- > 5 files changed, 70 insertions(+), 44 deletions(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index af41072..223d2e5 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,14 @@ > +2015-08-04 Andrew Burgess > + > + * language.c (show_language_command): Find selected frame before > + asking for the language of that frame. > + (set_language_command): Likewise. > + * language.h (get_frame_language): Add frame parameter. > + * stack.c (get_frame_language): Add frame parameter, assert > + parameter is not NULL, update comment and reindent. > + * top.c (check_frame_language_change): Pass the selected frame > + into get_frame_language. > + > 2015-08-04 Jan Kratochvil > > * infcmd.c (signal_command): Call do_cleanups for args_chain. > diff --git a/gdb/language.c b/gdb/language.c > index a8b432e..989a8da 100644 > --- a/gdb/language.c > +++ b/gdb/language.c > @@ -118,7 +118,8 @@ static void > show_language_command (struct ui_file *file, int from_tty, > struct cmd_list_element *c, const char *value) > { > - enum language flang; /* The language of the current frame. */ > + struct frame_info *frame; > + enum language flang; /* The language of the frame. */ > > if (language_mode == language_mode_auto) > fprintf_filtered (gdb_stdout, > @@ -130,11 +131,15 @@ show_language_command (struct ui_file *file, int from_tty, > _("The current source language is \"%s\".\n"), > current_language->la_name); > > - flang = get_frame_language (); > - if (flang != language_unknown && > - language_mode == language_mode_manual && > - current_language->la_language != flang) > - printf_filtered ("%s\n", lang_frame_mismatch_warn); > + if (target_has_execution) target_has_execution can't be right. What about core files? > + { > + frame = get_selected_frame (NULL); > + flang = get_frame_language (frame); > + if (flang != language_unknown && > + language_mode == language_mode_manual && > + current_language->la_language != flang) Please put the &&'s at the beginning of the next line while at it. > + printf_filtered ("%s\n", lang_frame_mismatch_warn); > + } > } > > --- a/gdb/top.c > +++ b/gdb/top.c > @@ -329,10 +329,11 @@ void > check_frame_language_change (void) > { > static int warned = 0; > + struct frame_info *frame; > > /* First make sure that a new frame has been selected, in case the > command or the hooks changed the program state. */ > - deprecated_safe_get_selected_frame (); > + frame = deprecated_safe_get_selected_frame (); > if (current_language != expected_language) > { > if (language_mode == language_mode_auto && info_verbose) > @@ -348,11 +349,11 @@ check_frame_language_change (void) > /* FIXME: This should be cacheing the frame and only running when > the frame changes. */ > > - if (has_stack_frames ()) > + if (has_stack_frames () && frame != NULL) If has_stack_frames() returns true, how can FRAME be NULL? > { > enum language flang; > > - flang = get_frame_language (); > + flang = get_frame_language (frame); > if (!warned > && flang != language_unknown > && flang != current_language->la_language) > Thanks, Pedro Alves