From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21628 invoked by alias); 24 Dec 2009 18:19:14 -0000 Received: (qmail 21619 invoked by uid 22791); 24 Dec 2009 18:19:13 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 24 Dec 2009 18:19:10 +0000 Received: (qmail 10029 invoked from network); 24 Dec 2009 18:19:08 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 24 Dec 2009 18:19:08 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [PATCH] Handle OP_THIS in tracepoints Date: Thu, 24 Dec 2009 18:19:00 -0000 User-Agent: KMail/1.9.10 Cc: Stan Shebs References: <4B32C4ED.6050904@codesourcery.com> <4B33AB93.4070807@codesourcery.com> <200912241808.02200.pedro@codesourcery.com> In-Reply-To: <200912241808.02200.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200912241819.00373.pedro@codesourcery.com> X-IsSubscribed: yes 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 X-SW-Source: 2009-12/txt/msg00386.txt.bz2 On Thursday 24 December 2009 16:34:54, Pedro Alves wrote: > This is busted, and was later fixed in our internal > tree. :-) The selected frame, and the current language > don't have anything to do with the context in which > the tracepoint runs. E.g.: > > (gdb) trace 'Foo::Bar()' > (gdb) actions > (gdb) collect foo_field > > Here, the `this' for foo_field needs to be > looked up in the context of Foo::Bar, not of whatever > context/frame the user had selected when she issued > the 'actions' command. On Thursday 24 December 2009 18:08:01, Pedro Alves wrote: > On Thursday 24 December 2009 17:57:39, Stan Shebs wrote: > > it should be no > > problem to prepare the patch! :-) > > Will do. Here it is. 2009-12-24 Pedro Alves gdb/ * ax-gdb.c (gen_expr) : Lookup `this' in the context of the tracepoint, not of the selected frame and language. -- Pedro Alves --- gdb/ax-gdb.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) Index: src/gdb/ax-gdb.c =================================================================== --- src.orig/gdb/ax-gdb.c 2009-12-24 17:08:57.000000000 +0000 +++ src/gdb/ax-gdb.c 2009-12-24 18:12:32.000000000 +0000 @@ -1762,30 +1762,19 @@ gen_expr (struct expression *exp, union case OP_THIS: { - char *name; - struct frame_info *frame; + char *this_name; struct symbol *func, *sym; struct block *b; - name = current_language->la_name_of_this; - if (!name) - error (_("no `this' in current language")); - - frame = get_selected_frame (_("no frame selected")); - - func = get_frame_function (frame); - if (!func) - error (_("no `%s' in nameless context"), name); - + func = block_linkage_function (block_for_pc (ax->scope)); + this_name = language_def (SYMBOL_LANGUAGE (func))->la_name_of_this; b = SYMBOL_BLOCK_VALUE (func); - if (dict_empty (BLOCK_DICT (b))) - error (_("no args, no `%s' in block"), name); /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER symbol instead of the LOC_ARG one (if both exist). */ - sym = lookup_block_symbol (b, name, NULL, VAR_DOMAIN); + sym = lookup_block_symbol (b, this_name, NULL, VAR_DOMAIN); if (!sym) - error (_("no `%s' found"), name); + error (_("no `%s' found"), this_name); gen_var_ref (exp->gdbarch, ax, value, sym); (*pc) += 2;