From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19354 invoked by alias); 23 Jun 2004 13:47:45 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 19338 invoked from network); 23 Jun 2004 13:47:44 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sourceware.org with SMTP; 23 Jun 2004 13:47:44 -0000 Received: from drow by nevyn.them.org with local (Exim 4.34 #1 (Debian)) id 1Bd86J-0006fi-Fc; Wed, 23 Jun 2004 09:47:43 -0400 Date: Wed, 23 Jun 2004 13:47:00 -0000 From: Daniel Jacobowitz To: Andrew Haley Cc: Jeff Johnston , gdb-patches@sources.redhat.com Subject: Re: [RFA]: Java Inferior Call Take 2 Message-ID: <20040623134742.GA24612@nevyn.them.org> Mail-Followup-To: Andrew Haley , Jeff Johnston , gdb-patches@sources.redhat.com References: <40A9264C.4060404@redhat.com> <20040617030603.GC23443@nevyn.them.org> <40D20494.2020608@redhat.com> <20040619235857.GA18759@nevyn.them.org> <16598.64375.217285.743094@cuddles.cambridge.redhat.com> <16601.25623.949217.642524@cuddles.cambridge.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <16601.25623.949217.642524@cuddles.cambridge.redhat.com> User-Agent: Mutt/1.5.5.1+cvs20040105i X-SW-Source: 2004-06/txt/msg00502.txt.bz2 On Wed, Jun 23, 2004 at 12:05:59PM +0100, Andrew Haley wrote: > This patch is now in mainline. Is there anything else you need? Yes. Two sets of questions left, one for Jeff and one [plus a little bit] for you... Jeff, one test still fails: calling addprint. I think this is mostly a GDB problem rather than GCC. Before starting the program I see this: (gdb) ptype jvclass type = class jvclass : public java::lang::Object { public: static int k; static void addprint(int, int, int); virtual int addk(int); } Then, after starting it: (gdb) ptype jvclass type = class jvclass extends java::lang::Object { public static int k; void addprint(int, int, int); int addk(int); jvclass(); void (); } - Should we suppress jvclass and the way we do for C++ artificial methods? - Why is it java::lang::Object instead of java.lang.Object? - Why did printing of the type change? There's only one definition of jvclass in the debug info, and it's marked Java. [Andrew, I notice that we've lost the 'static' here. There's nothing in the dwarf output to express it, so this is a GCC problem.] (gdb) p jvclass.addprint(1,2,3) There is no field named addprint Calling x.addprint(1,2,3) works. This is because x.addprint goes through value_struct_elt to value_fn_field, which falls back to lookup_minimal_symbol if lookup_symbol fails, and jvclass.addprint goes through value_aggregate_elt, which doesn't. lookup_symbol fails because the demangling code in it is specific to C++. So does this test pass for you, and if so what happens differently? Do we need to extend the hack in lookup_symbol for Java? It may be that fixing the missing static in the debug info fixes this too. The other question: I looked at fixing the debug info to print field names correctly. The reason it's wrong is that dwarf2out uses the decl_printable_name langhook. Java doesn't use the second argument, which the common code assumes is verbosity. Common code always passes '2', which matches what Java's does, except in three places: mudflap (???), the C tree pretty printer, and this call in dwarf2out used to set the name of decls. Java mostly passes 0 since it knows the value is ignored. Any reason not to fix up the Java frontend to pass 2, extend the function to handle smaller values, and thus correct the debug output? The only problem I see with this is that class names will lose scope information, which is nominally right... except that we don't output anything describing packages. Perhaps we should use DW_TAG_namespace for that but making it work will be a bit of a stretch. Anyway, for the moment GDB will work OK without this; it gets it from the demangled names. -- Daniel Jacobowitz