OSDN Git Service

* jv-lang.h (JAVA_OBJECT_SIZE): Remove.
authoruweigand <uweigand>
Tue, 23 Jun 2009 18:11:07 +0000 (18:11 +0000)
committeruweigand <uweigand>
Tue, 23 Jun 2009 18:11:07 +0000 (18:11 +0000)
(get_java_object_header_size): Add GDBARCH parameter.
* jv-lang.c (get_java_object_header_size): Add GDBARCH parameter.
Use it instead of current_gdbarch.
(evaluate_subexp_java): Replace JAVA_OBJECT_SIZE with call to
get_java_object_header_size.
* jv-valprint.c (java_value_print): Likewise.

gdb/ChangeLog
gdb/jv-lang.c
gdb/jv-lang.h
gdb/jv-valprint.c

index e57b8a8..80e32c3 100644 (file)
@@ -1,3 +1,13 @@
+2009-06-23  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * jv-lang.h (JAVA_OBJECT_SIZE): Remove.
+       (get_java_object_header_size): Add GDBARCH parameter.
+       * jv-lang.c (get_java_object_header_size): Add GDBARCH parameter.
+       Use it instead of current_gdbarch.
+       (evaluate_subexp_java): Replace JAVA_OBJECT_SIZE with call to
+       get_java_object_header_size.
+       * jv-valprint.c (java_value_print): Likewise.
+
 2009-06-23  Sami Wagiaalla  <swagiaal@redhat.com>
 
        * dwarf2read.c (process_die): Handle import statements
index 4b3f803..0003e0d 100644 (file)
@@ -589,11 +589,11 @@ get_java_object_type (void)
 }
 
 int
-get_java_object_header_size (void)
+get_java_object_header_size (struct gdbarch *gdbarch)
 {
   struct type *objtype = get_java_object_type ();
   if (objtype == NULL)
-    return (2 * gdbarch_ptr_bit (current_gdbarch) / TARGET_CHAR_BIT);
+    return (2 * gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
   else
     return TYPE_LENGTH (objtype);
 }
@@ -900,7 +900,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp,
          if (noside == EVAL_AVOID_SIDE_EFFECTS)
            return value_zero (el_type, VALUE_LVAL (arg1));
          address = value_as_address (arg1);
-         address += JAVA_OBJECT_SIZE;
+         address += get_java_object_header_size (exp->gdbarch);
          read_memory (address, buf4, 4);
          length = (long) extract_signed_integer (buf4, 4);
          index = (long) value_as_long (arg2);
index b658ca3..df97d3f 100644 (file)
@@ -27,9 +27,6 @@ extern int java_parse (void); /* Defined in jv-exp.y */
 
 extern void java_error (char *);       /* Defined in jv-exp.y */
 
-/* sizeof (struct Object) */
-#define JAVA_OBJECT_SIZE (get_java_object_header_size ())
-
 extern struct type *java_int_type;
 extern struct type *java_byte_type;
 extern struct type *java_short_type;
@@ -58,7 +55,7 @@ extern struct type *java_primitive_type_from_name (char *, int);
 extern struct type *java_array_type (struct type *, int);
 
 extern struct type *get_java_object_type (void);
-extern int get_java_object_header_size (void);
+extern int get_java_object_header_size (struct gdbarch *);
 
 extern struct type *java_lookup_class (char *);
 
index cdcb440..a15bc57 100644 (file)
@@ -38,6 +38,7 @@ int
 java_value_print (struct value *val, struct ui_file *stream, 
                  const struct value_print_options *options)
 {
+  struct gdbarch *gdbarch = current_gdbarch;
   struct type *type;
   CORE_ADDR address;
   int i;
@@ -76,9 +77,8 @@ java_value_print (struct value *val, struct ui_file *stream,
       unsigned int things_printed = 0;
       int reps;
       struct type *el_type = java_primitive_type_from_name (name, i - 2);
-
       i = 0;
-      read_memory (address + JAVA_OBJECT_SIZE, buf4, 4);
+      read_memory (address + get_java_object_header_size (gdbarch), buf4, 4);
 
       length = (long) extract_signed_integer (buf4, 4);
       fprintf_filtered (stream, "{length: %ld", length);
@@ -88,13 +88,14 @@ java_value_print (struct value *val, struct ui_file *stream,
          CORE_ADDR element;
          CORE_ADDR next_element = -1; /* dummy initial value */
 
-         address += JAVA_OBJECT_SIZE + 4;      /* Skip object header and length. */
+         /* Skip object header and length. */
+         address += get_java_object_header_size (gdbarch) + 4;
 
          while (i < length && things_printed < options->print_max)
            {
              gdb_byte *buf;
 
-             buf = alloca (gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT);
+             buf = alloca (gdbarch_ptr_bit (gdbarch) / HOST_CHAR_BIT);
              fputs_filtered (", ", stream);
              wrap_here (n_spaces (2));
 
@@ -103,7 +104,7 @@ java_value_print (struct value *val, struct ui_file *stream,
              else
                {
                  read_memory (address, buf, sizeof (buf));
-                 address += gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT;
+                 address += gdbarch_ptr_bit (gdbarch) / HOST_CHAR_BIT;
                  /* FIXME: cagney/2003-05-24: Bogus or what.  It
                      pulls a host sized pointer out of the target and
                      then extracts that as an address (while assuming
@@ -114,7 +115,7 @@ java_value_print (struct value *val, struct ui_file *stream,
              for (reps = 1; i + reps < length; reps++)
                {
                  read_memory (address, buf, sizeof (buf));
-                 address += gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT;
+                 address += gdbarch_ptr_bit (gdbarch) / HOST_CHAR_BIT;
                  /* FIXME: cagney/2003-05-24: Bogus or what.  It
                      pulls a host sized pointer out of the target and
                      then extracts that as an address (while assuming
@@ -143,7 +144,8 @@ java_value_print (struct value *val, struct ui_file *stream,
          struct value *v = allocate_value (el_type);
          struct value *next_v = allocate_value (el_type);
 
-         set_value_address (v, address + JAVA_OBJECT_SIZE + 4);
+         set_value_address (v, (address
+                                + get_java_object_header_size (gdbarch) + 4));
          set_value_address (next_v, value_raw_address (v));
 
          while (i < length && things_printed < options->print_max)