Index: gdb/p-valprint.c |
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c |
index b8434ed256fcb5685e4d74eb887714eaa2e0eee0..7854bc0c856d72fdb905689bd386bb28e58cf230 100644 |
--- a/gdb/p-valprint.c |
+++ b/gdb/p-valprint.c |
@@ -1,7 +1,6 @@ |
/* Support for printing Pascal values for GDB, the GNU debugger. |
- Copyright (C) 2000-2001, 2003, 2005-2012 Free Software Foundation, |
- Inc. |
+ Copyright (C) 2000-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -84,7 +83,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
len = high_bound - low_bound + 1; |
elttype = check_typedef (TYPE_TARGET_TYPE (type)); |
eltlen = TYPE_LENGTH (elttype); |
- if (options->prettyprint_arrays) |
+ if (options->prettyformat_arrays) |
{ |
print_spaces_filtered (2 + 2 * recurse, stream); |
} |
@@ -222,18 +221,18 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
/* Print vtbl's nicely. */ |
CORE_ADDR vt_address = unpack_pointer (type, |
valaddr + embedded_offset); |
- struct minimal_symbol *msymbol = |
+ struct bound_minimal_symbol msymbol = |
lookup_minimal_symbol_by_pc (vt_address); |
/* If 'symbol_print' is set, we did the work above. */ |
if (!options->symbol_print |
- && (msymbol != NULL) |
- && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol))) |
+ && (msymbol.minsym != NULL) |
+ && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol.minsym))) |
{ |
if (want_space) |
fputs_filtered (" ", stream); |
fputs_filtered ("<", stream); |
- fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream); |
+ fputs_filtered (SYMBOL_PRINT_NAME (msymbol.minsym), stream); |
fputs_filtered (">", stream); |
want_space = 1; |
} |
@@ -243,13 +242,14 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
struct symbol *wsym = (struct symbol *) NULL; |
struct type *wtype; |
struct block *block = (struct block *) NULL; |
- int is_this_fld; |
+ struct field_of_this_result is_this_fld; |
if (want_space) |
fputs_filtered (" ", stream); |
- if (msymbol != NULL) |
- wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block, |
+ if (msymbol.minsym != NULL) |
+ wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol.minsym), |
+ block, |
VAR_DOMAIN, &is_this_fld); |
if (wsym) |
@@ -263,7 +263,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
vt_val = value_at (wtype, vt_address); |
common_val_print (vt_val, stream, recurse + 1, options, |
current_language); |
- if (options->pretty) |
+ if (options->prettyformat) |
{ |
fprintf_filtered (stream, "\n"); |
print_spaces_filtered (2 + 2 * recurse, stream); |
@@ -334,7 +334,6 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
} |
break; |
- case TYPE_CODE_BITSTRING: |
case TYPE_CODE_SET: |
elttype = TYPE_INDEX_TYPE (type); |
CHECK_TYPEDEF (elttype); |
@@ -349,13 +348,9 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
struct type *range = elttype; |
LONGEST low_bound, high_bound; |
int i; |
- int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING; |
int need_comma = 0; |
- if (is_bitstring) |
- fputs_filtered ("B'", stream); |
- else |
- fputs_filtered ("[", stream); |
+ fputs_filtered ("[", stream); |
i = get_discrete_bounds (range, &low_bound, &high_bound); |
if (low_bound == 0 && high_bound == -1 && TYPE_LENGTH (type) > 0) |
@@ -383,9 +378,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
i = element; |
goto maybe_bad_bstring; |
} |
- if (is_bitstring) |
- fprintf_filtered (stream, "%d", element); |
- else if (element) |
+ if (element) |
{ |
if (need_comma) |
fputs_filtered (", ", stream); |
@@ -409,10 +402,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, |
} |
} |
done: |
- if (is_bitstring) |
- fputs_filtered ("'", stream); |
- else |
- fputs_filtered ("]", stream); |
+ fputs_filtered ("]", stream); |
} |
break; |
@@ -585,7 +575,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
fprintf_filtered (stream, ", "); |
else if (n_baseclasses > 0) |
{ |
- if (options->pretty) |
+ if (options->prettyformat) |
{ |
fprintf_filtered (stream, "\n"); |
print_spaces_filtered (2 + 2 * recurse, stream); |
@@ -596,7 +586,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
} |
fields_seen = 1; |
- if (options->pretty) |
+ if (options->prettyformat) |
{ |
fprintf_filtered (stream, "\n"); |
print_spaces_filtered (2 + 2 * recurse, stream); |
@@ -605,36 +595,17 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
{ |
wrap_here (n_spaces (2 + 2 * recurse)); |
} |
- if (options->inspect_it) |
- { |
- if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR) |
- fputs_filtered ("\"( ptr \"", stream); |
- else |
- fputs_filtered ("\"( nodef \"", stream); |
- if (field_is_static (&TYPE_FIELD (type, i))) |
- fputs_filtered ("static ", stream); |
- fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), |
- language_cplus, |
- DMGL_PARAMS | DMGL_ANSI); |
- fputs_filtered ("\" \"", stream); |
- fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), |
- language_cplus, |
- DMGL_PARAMS | DMGL_ANSI); |
- fputs_filtered ("\") \"", stream); |
- } |
- else |
- { |
- annotate_field_begin (TYPE_FIELD_TYPE (type, i)); |
- |
- if (field_is_static (&TYPE_FIELD (type, i))) |
- fputs_filtered ("static ", stream); |
- fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), |
- language_cplus, |
- DMGL_PARAMS | DMGL_ANSI); |
- annotate_field_name_end (); |
- fputs_filtered (" = ", stream); |
- annotate_field_value (); |
- } |
+ |
+ annotate_field_begin (TYPE_FIELD_TYPE (type, i)); |
+ |
+ if (field_is_static (&TYPE_FIELD (type, i))) |
+ fputs_filtered ("static ", stream); |
+ fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), |
+ language_cplus, |
+ DMGL_PARAMS | DMGL_ANSI); |
+ annotate_field_name_end (); |
+ fputs_filtered (" = ", stream); |
+ annotate_field_value (); |
if (!field_is_static (&TYPE_FIELD (type, i)) |
&& TYPE_FIELD_PACKED (type, i)) |
@@ -658,7 +629,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
else if (!value_bits_valid (val, TYPE_FIELD_BITPOS (type, i), |
TYPE_FIELD_BITSIZE (type, i))) |
{ |
- val_print_optimized_out (stream); |
+ val_print_optimized_out (val, stream); |
} |
else |
{ |
@@ -686,7 +657,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
v = value_field_bitfield (type, i, valaddr, offset, val); |
if (v == NULL) |
- val_print_optimized_out (stream); |
+ val_print_optimized_out (NULL, stream); |
else |
pascal_object_print_static_field (v, stream, recurse + 1, |
options); |
@@ -717,7 +688,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, |
dont_print_statmem_obstack = tmp_obstack; |
} |
- if (options->pretty) |
+ if (options->prettyformat) |
{ |
fprintf_filtered (stream, "\n"); |
print_spaces_filtered (2 * recurse, stream); |
@@ -797,8 +768,11 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr, |
if (boffset < 0 || boffset >= TYPE_LENGTH (type)) |
{ |
- /* FIXME (alloc): not safe is baseclass is really really big. */ |
- gdb_byte *buf = alloca (TYPE_LENGTH (baseclass)); |
+ gdb_byte *buf; |
+ struct cleanup *back_to; |
+ |
+ buf = xmalloc (TYPE_LENGTH (baseclass)); |
+ back_to = make_cleanup (xfree, buf); |
base_valaddr = buf; |
if (target_read_memory (address + boffset, buf, |
@@ -807,12 +781,13 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr, |
address = address + boffset; |
thisoffset = 0; |
boffset = 0; |
+ do_cleanups (back_to); |
} |
else |
base_valaddr = valaddr; |
} |
- if (options->pretty) |
+ if (options->prettyformat) |
{ |
fprintf_filtered (stream, "\n"); |
print_spaces_filtered (2 * recurse, stream); |
@@ -869,6 +844,12 @@ pascal_object_print_static_field (struct value *val, |
struct type *type = value_type (val); |
struct value_print_options opts; |
+ if (value_entirely_optimized_out (val)) |
+ { |
+ val_print_optimized_out (val, stream); |
+ return; |
+ } |
+ |
if (TYPE_CODE (type) == TYPE_CODE_STRUCT) |
{ |
CORE_ADDR *first_dont_print, addr; |