From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16964 invoked by alias); 14 May 2007 16:49:41 -0000 Received: (qmail 16948 invoked by uid 22791); 14 May 2007 16:49:39 -0000 X-Spam-Check-By: sourceware.org Received: from return.false.org (HELO return.false.org) (66.207.162.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 14 May 2007 16:49:36 +0000 Received: from return.false.org (localhost [127.0.0.1]) by return.false.org (Postfix) with ESMTP id DF55B4B267 for ; Mon, 14 May 2007 11:49:33 -0500 (CDT) Received: from caradoc.them.org (dsl093-172-095.pit1.dsl.speakeasy.net [66.93.172.95]) by return.false.org (Postfix) with ESMTP id B47DC4B262 for ; Mon, 14 May 2007 11:49:33 -0500 (CDT) Received: from drow by caradoc.them.org with local (Exim 4.67) (envelope-from ) id 1Hndjp-0000vO-6J for gdb-patches@sourceware.org; Mon, 14 May 2007 12:49:33 -0400 Date: Mon, 14 May 2007 16:49:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sourceware.org Subject: [commit] Minor java fixups Message-ID: <20070514164933.GA3350@caradoc.them.org> Mail-Followup-To: gdb-patches@sourceware.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.15 (2007-04-09) 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: 2007-05/txt/msg00239.txt.bz2 Debian's gcj package is now very close to GCC HEAD; this turned up new problems in the testsuite. I've fixed the ones which could be readily fixed in GDB, as below: - GCJ is now stricter about calling a static method via an object. - "set debug exp 1" caused a crash in java_print_type dereferencing NULL. - STRUCTOP_STRUCT (used to call a member function of an object) is wrong for Java; we need STRUCTOP_PTR because the "object" is always a pointer to an object. This was harmless before but the new GCJ puts the pointer in a register, even at -O0. I also filed GCC PR 31920 and added information to another PR about problems I found in the debug output. GDB's Java support is getting very rusty. I think it's been several releases since it was able to print objects, and it's even worse now that we only get a declaration for java.lang.Object in the debug info. It really needs some tender care from someone who uses gcj. I've tested this patch on x86_64-linux and checked it in. -- Daniel Jacobowitz CodeSourcery 2007-05-14 Daniel Jacobowitz * jv-exp.y (push_fieldnames): Use STRUCTOP_PTR instead of STRUCTOP_STRUCT. * jv-lang.c (evaluate_subexp_java): Handle STRUCTOP_PTR instead of STRUCTOP_STRUCT. * jv-typeprint.c (java_print_type): Do not crash on NULL varstring. * gdb.java/jprint.java (public): Avoid invalid call to static method. Index: jv-exp.y =================================================================== RCS file: /cvs/src/src/gdb/jv-exp.y,v retrieving revision 1.24 diff -u -p -r1.24 jv-exp.y --- jv-exp.y 9 Jan 2007 17:58:51 -0000 1.24 +++ jv-exp.y 14 May 2007 16:24:32 -0000 @@ -1265,7 +1265,7 @@ push_variable (struct stoken name) } /* Assuming a reference expression has been pushed, emit the - STRUCTOP_STRUCT ops to access the field named NAME. If NAME is a + STRUCTOP_PTR ops to access the field named NAME. If NAME is a qualified name (has '.'), generate a field access for each part. */ static void @@ -1281,9 +1281,9 @@ push_fieldnames (name) { /* token.ptr is start of current field name. */ token.length = &name.ptr[i] - token.ptr; - write_exp_elt_opcode (STRUCTOP_STRUCT); + write_exp_elt_opcode (STRUCTOP_PTR); write_exp_string (token); - write_exp_elt_opcode (STRUCTOP_STRUCT); + write_exp_elt_opcode (STRUCTOP_PTR); token.ptr += token.length + 1; } if (i >= name.length) Index: jv-lang.c =================================================================== RCS file: /cvs/src/src/gdb/jv-lang.c,v retrieving revision 1.45 diff -u -p -r1.45 jv-lang.c --- jv-lang.c 9 Jan 2007 17:58:51 -0000 1.45 +++ jv-lang.c 14 May 2007 16:24:32 -0000 @@ -928,7 +928,7 @@ evaluate_subexp_java (struct type *expec goto nosideret; return java_value_string (&exp->elts[pc + 2].string, i); - case STRUCTOP_STRUCT: + case STRUCTOP_PTR: arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside); /* Convert object field (such as TYPE.class) to reference. */ if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_STRUCT) Index: jv-typeprint.c =================================================================== RCS file: /cvs/src/src/gdb/jv-typeprint.c,v retrieving revision 1.11 diff -u -p -r1.11 jv-typeprint.c --- jv-typeprint.c 9 Jan 2007 17:58:51 -0000 1.11 +++ jv-typeprint.c 14 May 2007 16:24:32 -0000 @@ -338,6 +338,6 @@ java_print_type (struct type *type, char /* For demangled function names, we have the arglist as part of the name, so don't print an additional pair of ()'s */ - demangled_args = strchr (varstring, '(') != NULL; + demangled_args = varstring != NULL && strchr (varstring, '(') != NULL; c_type_print_varspec_suffix (type, stream, show, 0, demangled_args); } Index: testsuite/gdb.java/jprint.java =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.java/jprint.java,v retrieving revision 1.1 diff -u -p -r1.1 jprint.java --- testsuite/gdb.java/jprint.java 20 Sep 2004 20:06:29 -0000 1.1 +++ testsuite/gdb.java/jprint.java 14 May 2007 16:26:24 -0000 @@ -54,7 +54,7 @@ public class jprint extends jvclass { } public static void main(String[] args) { jprint x = new jprint (); - x.print (44); + x.dothat (44); print (k, 33); } }