X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fjv-valprint.c;h=08d2e6fb3d540f25c2990f5c25cf54840f1cbf67;hb=e17a4113357102b55cfa5b80557d590a46a43300;hp=cdcb440b0d57cca07d149eb04c187caa2f964e94;hpb=42ae523077b469c09e83845d30ee137a844aacb8;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c index cdcb440b0d..08d2e6fb3d 100644 --- a/gdb/jv-valprint.c +++ b/gdb/jv-valprint.c @@ -38,6 +38,8 @@ int java_value_print (struct value *val, struct ui_file *stream, const struct value_print_options *options) { + struct gdbarch *gdbarch = get_type_arch (value_type (val)); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct type *type; CORE_ADDR address; int i; @@ -57,7 +59,7 @@ java_value_print (struct value *val, struct ui_file *stream, if (obj_addr != 0) { - type = type_from_class (java_class_from_object (val)); + type = type_from_class (gdbarch, java_class_from_object (val)); type = lookup_pointer_type (type); val = value_at (type, address); @@ -75,12 +77,12 @@ java_value_print (struct value *val, struct ui_file *stream, long length; unsigned int things_printed = 0; int reps; - struct type *el_type = java_primitive_type_from_name (name, i - 2); - + struct type *el_type + = java_primitive_type_from_name (gdbarch, 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); + length = (long) extract_signed_integer (buf4, 4, byte_order); fprintf_filtered (stream, "{length: %ld", length); if (el_type == NULL) @@ -88,13 +90,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,23 +106,25 @@ 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 that the address is unsigned)! */ - element = extract_unsigned_integer (buf, sizeof (buf)); + element = extract_unsigned_integer (buf, sizeof (buf), + byte_order); } 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 that the address is unsigned)! */ - next_element = extract_unsigned_integer (buf, sizeof (buf)); + next_element = extract_unsigned_integer (buf, sizeof (buf), + byte_order); if (next_element != element) break; } @@ -132,7 +137,7 @@ java_value_print (struct value *val, struct ui_file *stream, if (element == 0) fprintf_filtered (stream, "null"); else - fprintf_filtered (stream, "@%s", paddr_nz (element)); + fprintf_filtered (stream, "@%s", paddress (gdbarch, element)); things_printed++; i += reps; @@ -143,7 +148,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) @@ -209,6 +215,7 @@ java_value_print (struct value *val, struct ui_file *stream, && address != 0 && value_as_address (val) != 0) { + struct type *char_type; struct value *data_val; CORE_ADDR data; struct value *boffset_val; @@ -230,7 +237,8 @@ java_value_print (struct value *val, struct ui_file *stream, value_free_to_mark (mark); /* Release unnecessary values */ - val_print_string (java_char_type, data + boffset, count, stream, options); + char_type = builtin_java_type (gdbarch)->builtin_char; + val_print_string (char_type, data + boffset, count, stream, options); return 0; } @@ -456,6 +464,7 @@ java_val_print (struct type *type, const gdb_byte *valaddr, struct ui_file *stream, int recurse, const struct value_print_options *options) { + struct gdbarch *gdbarch = get_type_arch (type); unsigned int i = 0; /* Number of characters printed */ struct type *target_type; CORE_ADDR addr; @@ -476,7 +485,8 @@ java_val_print (struct type *type, const gdb_byte *valaddr, /* Print vtable entry - we only get here if we ARE using -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */ /* Extract an address, assume that it is unsigned. */ - print_address_demangle (extract_unsigned_integer (valaddr, TYPE_LENGTH (type)), + print_address_demangle (gdbarch, + extract_unsigned_integer (valaddr, TYPE_LENGTH (type)), stream, demangle); break; } @@ -492,7 +502,7 @@ java_val_print (struct type *type, const gdb_byte *valaddr, if (TYPE_CODE (target_type) == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ - print_address_demangle (addr, stream, demangle); + print_address_demangle (gdbarch, addr, stream, demangle); /* Return value is irrelevant except for string pointers. */ return (0); }