gdb
authorTom Tromey <tromey@redhat.com>
Tue, 5 Jul 2011 13:36:42 +0000 (13:36 +0000)
committerTom Tromey <tromey@redhat.com>
Tue, 5 Jul 2011 13:36:42 +0000 (13:36 +0000)
* gnu-v3-abi.c (gnuv3_rtti_type): Check TYPE_CPLUS_REALLY_JAVA.
* gdbtypes.h (struct cplus_struct_type) <is_java>: New field.
(TYPE_CPLUS_REALLY_JAVA): New macro.
* dwarf2read.c (process_structure_scope): Set
TYPE_CPLUS_REALLY_JAVA.
gdb/testsuite
* gdb.java/jprint.java (jprint.hi): New field.
* gdb.java/jprint.exp: Print string.

gdb/ChangeLog
gdb/dwarf2read.c
gdb/gdbtypes.h
gdb/gnu-v3-abi.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.java/jprint.exp
gdb/testsuite/gdb.java/jprint.java

index d85938c..9ea7947 100644 (file)
@@ -1,3 +1,11 @@
+2011-07-05  Tom Tromey  <tromey@redhat.com>
+
+       * gnu-v3-abi.c (gnuv3_rtti_type): Check TYPE_CPLUS_REALLY_JAVA.
+       * gdbtypes.h (struct cplus_struct_type) <is_java>: New field.
+       (TYPE_CPLUS_REALLY_JAVA): New macro.
+       * dwarf2read.c (process_structure_scope): Set
+       TYPE_CPLUS_REALLY_JAVA.
+
 2011-07-05  Thiago Jung Bauermann  <bauerman.ibm.com>
 
        * ada-lang.c: Fix typos.
index 3ffe1ee..d86487a 100644 (file)
@@ -7492,6 +7492,9 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
        }
 
       do_cleanups (back_to);
+
+      if (HAVE_CPLUS_STRUCT (type))
+       TYPE_CPLUS_REALLY_JAVA (type) = cu->language == language_java;
     }
 
   quirk_gcc_member_function_pointer (type, cu->objfile);
index 3b62453..1e96293 100644 (file)
@@ -705,6 +705,9 @@ struct cplus_struct_type
        dynamic.  Zero if not yet computed.  */
     int is_dynamic : 2;
 
+    /* Non-zero if this type came from a Java CU.  */
+    unsigned int is_java : 1;
+
     /* For derived classes, the number of base classes is given by
        n_baseclasses and virtual_field_bits is a bit vector containing
        one bit per base class.  If the base class is virtual, the
@@ -991,6 +994,7 @@ extern void allocate_gnat_aux_type (struct type *);
 #define BASETYPE_VIA_PUBLIC(thistype, index) \
   ((!TYPE_FIELD_PRIVATE(thistype, index)) && (!TYPE_FIELD_PROTECTED(thistype, index)))
 #define TYPE_CPLUS_DYNAMIC(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_dynamic
+#define TYPE_CPLUS_REALLY_JAVA(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_java
 
 #define BASETYPE_VIA_VIRTUAL(thistype, index) \
   (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
index 25a437b..6c6f92c 100644 (file)
@@ -287,6 +287,10 @@ gnuv3_rtti_type (struct value *value,
   if (TYPE_CODE (values_type) != TYPE_CODE_CLASS)
     return NULL;
 
+  /* Java doesn't have RTTI following the C++ ABI.  */
+  if (TYPE_CPLUS_REALLY_JAVA (values_type))
+    return NULL;
+
   /* Determine architecture.  */
   gdbarch = get_type_arch (values_type);
 
index 346f427..22b6a98 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-05  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.java/jprint.java (jprint.hi): New field.
+       * gdb.java/jprint.exp: Print string.
+
 2011-07-05  Thiago Jung Bauermann  <bauerman.ibm.com>
 
        * gdb.base/call-sc.c: Fix typos.
index 682715a..81d8ad1 100644 (file)
@@ -70,4 +70,6 @@ if [set_lang_java] then {
     # so GDB will report these as "optimized out". See gcc/43260.
     setup_xfail *-*-* gcc/43260
     gdb_test "print *jprint.props" " = .*" "print a java.util.Properties"
+
+    gdb_test "print jprint.hi" "= java.lang.String \"hi maude\"" "print a java.lang.String"
 }
index 01ebdbc..b4385ab 100644 (file)
@@ -1,6 +1,6 @@
 // jprint.java test program.
 //
-// Copyright 2004, 2010
+// Copyright 2004, 2010, 2011
 // Free Software Foundation, Inc.
 //
 // Written by Jeff Johnston <jjohnstn@redhat.com> 
@@ -42,6 +42,7 @@ class jvclass {
     
 public class jprint extends jvclass {
   public static Properties props = new Properties ();
+  public static String hi = "hi maude";
 
   public int dothat (int x) {
     int y = x + 3;