summaryrefslogtreecommitdiff
path: root/gdb/jv-valprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/jv-valprint.c')
-rw-r--r--gdb/jv-valprint.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c
index d53a8e39778..165f14e0d77 100644
--- a/gdb/jv-valprint.c
+++ b/gdb/jv-valprint.c
@@ -79,6 +79,7 @@ java_value_print (struct value *val, struct ui_file *stream,
int reps;
struct type *el_type
= java_primitive_type_from_name (gdbarch, name, i - 2);
+
i = 0;
read_memory (address + get_java_object_header_size (gdbarch), buf4, 4);
@@ -319,6 +320,7 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
if (field_is_static (&TYPE_FIELD (type, i)))
{
char *name = TYPE_FIELD_NAME (type, i);
+
if (!options->static_field_print)
continue;
if (name != NULL && strcmp (name, "class") == 0)
@@ -412,12 +414,14 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
else if (field_is_static (&TYPE_FIELD (type, i)))
{
struct value *v = value_static_field (type, i);
+
if (v == NULL)
fputs_filtered ("<optimized out>", stream);
else
{
struct value_print_options opts;
struct type *t = check_typedef (value_type (v));
+
if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
v = value_addr (v);
opts = *options;
@@ -431,6 +435,7 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
else
{
struct value_print_options opts = *options;
+
opts.deref_ref = 0;
val_print (TYPE_FIELD_TYPE (type, i),
valaddr + TYPE_FIELD_BITPOS (type, i) / 8, 0,
@@ -522,6 +527,7 @@ java_val_print (struct type *type, const gdb_byte *valaddr,
if (options->format || options->output_format)
{
struct value_print_options opts = *options;
+
opts.format = (options->format ? options->format
: options->output_format);
print_scalar_formatted (valaddr, type, &opts, 0, stream);