[commit] Minor java fixups

Daniel Jacobowitz drow@false.org
Mon May 14 16:49:00 GMT 2007


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



More information about the Gdb-patches mailing list