X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fjv-valprint.c;h=1ddfcb576c66e91f8681db3eadd1aa9307ff7528;hb=0cf824c9e4d91fb8a2446d29bfa699637c4135a3;hp=6f9273d51007e48d7a933e7897aaa5649ebe066a;hpb=d0352a18a504a4e7b761f6b3264cf11347d8d056;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c index 6f9273d510..1ddfcb576c 100644 --- a/gdb/jv-valprint.c +++ b/gdb/jv-valprint.c @@ -1,5 +1,5 @@ /* Support for printing Java values for GDB, the GNU debugger. - Copyright 1997-2000 Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ #include "jv-lang.h" #include "c-lang.h" #include "annotate.h" +#include "gdb_string.h" /* Local functions */ @@ -41,11 +42,8 @@ static void java_print_value_fields (struct type * type, char *valaddr, int -java_value_print (val, stream, format, pretty) - value_ptr val; - struct ui_file *stream; - int format; - enum val_prettyprint pretty; +java_value_print (struct value *val, struct ui_file *stream, int format, + enum val_prettyprint pretty) { struct type *type; CORE_ADDR address; @@ -93,14 +91,16 @@ java_value_print (val, stream, format, pretty) if (el_type == NULL) { - CORE_ADDR element, next_element; + CORE_ADDR element; + CORE_ADDR next_element = -1; /* dummy initial value */ address += JAVA_OBJECT_SIZE + 4; /* Skip object header and length. */ while (i < length && things_printed < print_max) { - char buf[TARGET_PTR_BIT / HOST_CHAR_BIT]; + char *buf; + buf = alloca (TARGET_PTR_BIT / HOST_CHAR_BIT); fputs_filtered (", ", stream); wrap_here (n_spaces (2)); @@ -138,8 +138,8 @@ java_value_print (val, stream, format, pretty) } else { - value_ptr v = allocate_value (el_type); - value_ptr next_v = allocate_value (el_type); + struct value *v = allocate_value (el_type); + struct value *next_v = allocate_value (el_type); VALUE_ADDRESS (v) = address + JAVA_OBJECT_SIZE + 4; VALUE_ADDRESS (next_v) = VALUE_ADDRESS (v); @@ -151,7 +151,7 @@ java_value_print (val, stream, format, pretty) if (i > 0) { - value_ptr tmp; + struct value *tmp; tmp = next_v; next_v = v; @@ -200,28 +200,29 @@ java_value_print (val, stream, format, pretty) if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_TARGET_TYPE (type) && TYPE_NAME (TYPE_TARGET_TYPE (type)) - && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "java.lang.String") == 0 + && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "java.lang.String") == 0 && (format == 0 || format == 's') - && address != 0) + && address != 0 + && value_as_address (val) != 0) { - value_ptr data_val; + struct value *data_val; CORE_ADDR data; - value_ptr boffset_val; + struct value *boffset_val; unsigned long boffset; - value_ptr count_val; + struct value *count_val; unsigned long count; - value_ptr mark; + struct value *mark; mark = value_mark (); /* Remember start of new values */ data_val = value_struct_elt (&val, NULL, "data", NULL, NULL); - data = value_as_pointer (data_val); + data = value_as_address (data_val); boffset_val = value_struct_elt (&val, NULL, "boffset", NULL, NULL); - boffset = value_as_pointer (boffset_val); + boffset = value_as_address (boffset_val); count_val = value_struct_elt (&val, NULL, "count", NULL, NULL); - count = value_as_pointer (count_val); + count = value_as_address (count_val); value_free_to_mark (mark); /* Release unnecessary values */ @@ -241,15 +242,9 @@ java_value_print (val, stream, format, pretty) should not print, or zero if called from top level. */ static void -java_print_value_fields (type, valaddr, address, stream, - format, recurse, pretty) - struct type *type; - char *valaddr; - CORE_ADDR address; - struct ui_file *stream; - int format; - int recurse; - enum val_prettyprint pretty; +java_print_value_fields (struct type *type, char *valaddr, CORE_ADDR address, + struct ui_file *stream, int format, int recurse, + enum val_prettyprint pretty) { int i, len, n_baseclasses; @@ -376,7 +371,7 @@ java_print_value_fields (type, valaddr, address, stream, if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i)) { - value_ptr v; + struct value *v; /* Bitfields require special handling, especially due to byte order problems. */ @@ -401,7 +396,7 @@ java_print_value_fields (type, valaddr, address, stream, } else if (TYPE_FIELD_STATIC (type, i)) { - value_ptr v = value_static_field (type, i); + struct value *v = value_static_field (type, i); if (v == NULL) fputs_filtered ("", stream); else @@ -450,17 +445,9 @@ java_print_value_fields (type, valaddr, address, stream, The PRETTY parameter controls prettyprinting. */ int -java_val_print (type, valaddr, embedded_offset, address, stream, format, - deref_ref, recurse, pretty) - struct type *type; - char *valaddr; - int embedded_offset; - CORE_ADDR address; - struct ui_file *stream; - int format; - int deref_ref; - int recurse; - enum val_prettyprint pretty; +java_val_print (struct type *type, char *valaddr, int embedded_offset, + CORE_ADDR address, struct ui_file *stream, int format, + int deref_ref, int recurse, enum val_prettyprint pretty) { register unsigned int i = 0; /* Number of characters printed */ struct type *target_type; @@ -511,18 +498,17 @@ java_val_print (type, valaddr, embedded_offset, address, stream, format, return i; case TYPE_CODE_CHAR: - format = format ? format : output_format; - if (format) - print_scalar_formatted (valaddr, type, format, 0, stream); - else - LA_PRINT_CHAR ((int) unpack_long (type, valaddr), stream); - break; - case TYPE_CODE_INT: - /* Can't just call c_val_print because that print bytes as C chars. */ + /* Can't just call c_val_print because that prints bytes as C + chars. */ format = format ? format : output_format; if (format) print_scalar_formatted (valaddr, type, format, 0, stream); + else if (TYPE_CODE (type) == TYPE_CODE_CHAR + || (TYPE_CODE (type) == TYPE_CODE_INT + && TYPE_LENGTH (type) == 2 + && strcmp (TYPE_NAME (type), "char") == 0)) + LA_PRINT_CHAR ((int) unpack_long (type, valaddr), stream); else val_print_type_code_int (type, valaddr, stream); break;