Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: gdb-patches@sourceware.org
Subject: [commit] Minor java fixups
Date: Mon, 14 May 2007 16:49:00 -0000	[thread overview]
Message-ID: <20070514164933.GA3350@caradoc.them.org> (raw)

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  <dan@codesourcery.com>

	* 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);
   }
 }


             reply	other threads:[~2007-05-14 16:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-14 16:49 Daniel Jacobowitz [this message]
2007-05-14 19:54 ` Tom Tromey
2007-05-14 20:02   ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070514164933.GA3350@caradoc.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox