summaryrefslogtreecommitdiff
path: root/gdb/cp-valprint.c
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@specifix.com>2010-12-31 22:59:51 +0000
committerMichael Snyder <msnyder@specifix.com>2010-12-31 22:59:51 +0000
commit4b1d7842adfc9887086cea526e5ca5e923e48422 (patch)
tree111d3852e82a916629399ffd1587ed51e587b009 /gdb/cp-valprint.c
parent063d51569a462844484401166c2fb3a46691668a (diff)
downloadgdb-4b1d7842adfc9887086cea526e5ca5e923e48422.tar.gz
2010-12-31 Michael Snyder <msnyder@vmware.com>
* charset.c: Comment cleanup and long line wrapping. * charset.h: Ditto. * c-lang.c: Ditto. * c-lang.h: Ditto. * coff-pe-read.c: Ditto. * coff-pe-read.h: Ditto. * coffread.c: Ditto. * command.h: Ditto. * complaints.c: Ditto. * complaints.h: Ditto. * completer.c: Ditto. * completer.h: Ditto. * corefile.c: Ditto. * corelow.c: Ditto. * core-regset.c: Ditto. * cp-abi.c: Ditto. * cp-abi.h: Ditto. * cp-namespace.c: Ditto. * cp-support.c: Ditto. * cp-support.h: Ditto. * cp-valprint.c: Ditto. * cp-typeprint.c: Ditto. * c-valprint.c: Ditto.
Diffstat (limited to 'gdb/cp-valprint.c')
-rw-r--r--gdb/cp-valprint.c215
1 files changed, 122 insertions, 93 deletions
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index e65c12bbd7f..a55255f9311 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -38,7 +38,7 @@
#include "language.h"
#include "python/python.h"
-/* Controls printing of vtbl's */
+/* Controls printing of vtbl's. */
static void
show_vtblprint (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
@@ -62,9 +62,11 @@ Printing of object's derived type based on vtable info is %s.\n"),
static void
show_static_field_print (struct ui_file *file, int from_tty,
- struct cmd_list_element *c, const char *value)
+ struct cmd_list_element *c,
+ const char *value)
{
- fprintf_filtered (file, _("Printing of C++ static members is %s.\n"),
+ fprintf_filtered (file,
+ _("Printing of C++ static members is %s.\n"),
value);
}
@@ -79,10 +81,12 @@ static void cp_print_static_field (struct type *, struct value *,
struct ui_file *, int,
const struct value_print_options *);
-static void cp_print_value (struct type *, struct type *, const gdb_byte *,
- int, CORE_ADDR, struct ui_file *, int,
- const struct value *,
- const struct value_print_options *, struct type **);
+static void cp_print_value (struct type *, struct type *,
+ const gdb_byte *, int,
+ CORE_ADDR, struct ui_file *,
+ int, const struct value *,
+ const struct value_print_options *,
+ struct type **);
/* GCC versions after 2.4.5 use this. */
@@ -105,19 +109,19 @@ cp_is_vtbl_ptr_type (struct type *type)
int
cp_is_vtbl_member (struct type *type)
{
- /* With older versions of g++, the vtbl field pointed to an array
- of structures. Nowadays it points directly to the structure. */
+ /* With older versions of g++, the vtbl field pointed to an array of
+ structures. Nowadays it points directly to the structure. */
if (TYPE_CODE (type) == TYPE_CODE_PTR)
{
type = TYPE_TARGET_TYPE (type);
if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
{
type = TYPE_TARGET_TYPE (type);
- if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
- || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
+ if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
+ || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
{
/* Virtual functions tables are full of pointers
- to virtual functions. */
+ to virtual functions. */
return cp_is_vtbl_ptr_type (type);
}
}
@@ -127,9 +131,10 @@ cp_is_vtbl_member (struct type *type)
}
else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
{
- /* The type name of the thunk pointer is NULL when using dwarf2.
- We could test for a pointer to a function, but there is
- no type info for the virtual table either, so it wont help. */
+ /* The type name of the thunk pointer is NULL when using
+ dwarf2. We could test for a pointer to a function, but
+ there is no type info for the virtual table either, so it
+ wont help. */
return cp_is_vtbl_ptr_type (type);
}
}
@@ -137,24 +142,26 @@ cp_is_vtbl_member (struct type *type)
}
/* Mutually recursive subroutines of cp_print_value and c_val_print to
- print out a structure's fields: cp_print_value_fields and cp_print_value.
+ print out a structure's fields: cp_print_value_fields and
+ cp_print_value.
- TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
- same meanings as in cp_print_value and c_val_print.
+ TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the same
+ meanings as in cp_print_value and c_val_print.
- 2nd argument REAL_TYPE is used to carry over the type of the derived
- class across the recursion to base classes.
+ 2nd argument REAL_TYPE is used to carry over the type of the
+ derived class across the recursion to base classes.
- DONT_PRINT is an array of baseclass types that we
- should not print, or zero if called from top level. */
+ DONT_PRINT is an array of baseclass types that we should not print,
+ or zero if called from top level. */
void
cp_print_value_fields (struct type *type, struct type *real_type,
- const gdb_byte *valaddr, int offset, CORE_ADDR address,
- struct ui_file *stream, int recurse,
- const struct value *val,
+ const gdb_byte *valaddr, int offset,
+ CORE_ADDR address, struct ui_file *stream,
+ int recurse, const struct value *val,
const struct value_print_options *options,
- struct type **dont_print_vb, int dont_print_statmem)
+ struct type **dont_print_vb,
+ int dont_print_statmem)
{
int i, len, n_baseclasses;
int fields_seen = 0;
@@ -164,12 +171,14 @@ cp_print_value_fields (struct type *type, struct type *real_type,
if (recurse == 0)
{
- /* Any object can be left on obstacks only during an unexpected error. */
+ /* Any object can be left on obstacks only during an unexpected
+ error. */
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
{
obstack_free (&dont_print_statmem_obstack, NULL);
- obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
+ obstack_begin (&dont_print_statmem_obstack,
+ 32 * sizeof (CORE_ADDR));
}
if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
{
@@ -187,8 +196,10 @@ cp_print_value_fields (struct type *type, struct type *real_type,
duplicates of virtual baseclasses. */
if (n_baseclasses > 0)
- cp_print_value (type, real_type, valaddr, offset, address, stream,
- recurse + 1, val, options, dont_print_vb);
+ cp_print_value (type, real_type, valaddr,
+ offset, address, stream,
+ recurse + 1, val, options,
+ dont_print_vb);
/* Second, print out data fields */
@@ -253,11 +264,13 @@ cp_print_value_fields (struct type *type, struct type *real_type,
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),
+ fprintf_symbol_filtered (stream,
+ TYPE_FIELD_NAME (type, i),
current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
fputs_filtered ("\" \"", stream);
- fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
+ fprintf_symbol_filtered (stream,
+ TYPE_FIELD_NAME (type, i),
current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
fputs_filtered ("\") \"", stream);
@@ -268,11 +281,13 @@ cp_print_value_fields (struct type *type, struct type *real_type,
if (field_is_static (&TYPE_FIELD (type, i)))
fputs_filtered ("static ", stream);
- fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
+ fprintf_symbol_filtered (stream,
+ TYPE_FIELD_NAME (type, i),
current_language->la_language,
DMGL_PARAMS | DMGL_ANSI);
annotate_field_name_end ();
- /* do not print leading '=' in case of anonymous unions */
+ /* Do not print leading '=' in case of anonymous
+ unions. */
if (strcmp (TYPE_FIELD_NAME (type, i), ""))
fputs_filtered (" = ", stream);
annotate_field_value ();
@@ -283,8 +298,8 @@ cp_print_value_fields (struct type *type, struct type *real_type,
{
struct value *v;
- /* Bitfields require special handling, especially due to byte
- order problems. */
+ /* Bitfields require special handling, especially due to
+ byte order problems. */
if (TYPE_FIELD_IGNORE (type, i))
{
fputs_filtered ("<optimized out or zero length>", stream);
@@ -297,7 +312,8 @@ cp_print_value_fields (struct type *type, struct type *real_type,
{
fputs_filtered (_("<synthetic pointer>"), stream);
}
- else if (!value_bits_valid (val, TYPE_FIELD_BITPOS (type, i),
+ else if (!value_bits_valid (val,
+ TYPE_FIELD_BITPOS (type, i),
TYPE_FIELD_BITSIZE (type, i)))
{
fputs_filtered (_("<value optimized out>"), stream);
@@ -319,7 +335,8 @@ cp_print_value_fields (struct type *type, struct type *real_type,
{
if (TYPE_FIELD_IGNORE (type, i))
{
- fputs_filtered ("<optimized out or zero length>", stream);
+ fputs_filtered ("<optimized out or zero length>",
+ stream);
}
else if (field_is_static (&TYPE_FIELD (type, i)))
{
@@ -328,8 +345,9 @@ cp_print_value_fields (struct type *type, struct type *real_type,
if (v == NULL)
fputs_filtered ("<optimized out>", stream);
else
- cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
- stream, recurse + 1, options);
+ cp_print_static_field (TYPE_FIELD_TYPE (type, i),
+ v, stream, recurse + 1,
+ options);
}
else
{
@@ -337,7 +355,8 @@ cp_print_value_fields (struct type *type, struct type *real_type,
opts.deref_ref = 0;
val_print (TYPE_FIELD_TYPE (type, i),
- valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8,
+ valaddr,
+ offset + TYPE_FIELD_BITPOS (type, i) / 8,
address,
stream, recurse + 1, val, &opts,
current_language);
@@ -351,16 +370,17 @@ cp_print_value_fields (struct type *type, struct type *real_type,
int obstack_final_size =
obstack_object_size (&dont_print_statmem_obstack);
- if (obstack_final_size > statmem_obstack_initial_size) {
- /* In effect, a pop of the printed-statics stack. */
+ if (obstack_final_size > statmem_obstack_initial_size)
+ {
+ /* In effect, a pop of the printed-statics stack. */
- void *free_to_ptr =
- obstack_next_free (&dont_print_statmem_obstack) -
- (obstack_final_size - statmem_obstack_initial_size);
+ void *free_to_ptr =
+ obstack_next_free (&dont_print_statmem_obstack) -
+ (obstack_final_size - statmem_obstack_initial_size);
- obstack_free (&dont_print_statmem_obstack,
- free_to_ptr);
- }
+ obstack_free (&dont_print_statmem_obstack,
+ free_to_ptr);
+ }
if (last_set_recurse != recurse)
{
@@ -370,8 +390,9 @@ cp_print_value_fields (struct type *type, struct type *real_type,
if (obstack_final_size > stat_array_obstack_initial_size)
{
void *free_to_ptr =
- obstack_next_free (&dont_print_stat_array_obstack) -
- (obstack_final_size - stat_array_obstack_initial_size);
+ obstack_next_free (&dont_print_stat_array_obstack)
+ - (obstack_final_size
+ - stat_array_obstack_initial_size);
obstack_free (&dont_print_stat_array_obstack,
free_to_ptr);
@@ -419,9 +440,9 @@ cp_print_value_fields_rtti (struct type *type,
/* Ugh, we have to convert back to a value here. */
value = value_from_contents_and_address (type, valaddr + offset,
address + offset);
- /* We don't actually care about most of the result here -- just the
- type. We already have the correct offset, due to how val_print
- was initially called. */
+ /* We don't actually care about most of the result here -- just
+ the type. We already have the correct offset, due to how
+ val_print was initially called. */
real_type = value_rtti_type (value, &full, &top, &using_enc);
}
@@ -433,14 +454,14 @@ cp_print_value_fields_rtti (struct type *type,
dont_print_vb, dont_print_statmem);
}
-/* Special val_print routine to avoid printing multiple copies of virtual
- baseclasses. */
+/* Special val_print routine to avoid printing multiple copies of
+ virtual baseclasses. */
static void
cp_print_value (struct type *type, struct type *real_type,
- const gdb_byte *valaddr, int offset, CORE_ADDR address,
- struct ui_file *stream, int recurse,
- const struct value *val,
+ const gdb_byte *valaddr, int offset,
+ CORE_ADDR address, struct ui_file *stream,
+ int recurse, const struct value *val,
const struct value_print_options *options,
struct type **dont_print_vb)
{
@@ -453,9 +474,9 @@ cp_print_value (struct type *type, struct type *real_type,
if (dont_print_vb == 0)
{
- /* If we're at top level, carve out a completely fresh
- chunk of the obstack and use that until this particular
- invocation returns. */
+ /* If we're at top level, carve out a completely fresh chunk of
+ the obstack and use that until this particular invocation
+ returns. */
/* Bump up the high-water mark. Now alpha is omega. */
obstack_finish (&dont_print_vb_obstack);
}
@@ -473,8 +494,8 @@ cp_print_value (struct type *type, struct type *real_type,
struct type **first_dont_print
= (struct type **) obstack_base (&dont_print_vb_obstack);
- int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
- - first_dont_print;
+ int j = (struct type **)
+ obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
while (--j >= 0)
if (baseclass == first_dont_print[j])
@@ -486,20 +507,22 @@ cp_print_value (struct type *type, struct type *real_type,
thisoffset = offset;
thistype = real_type;
- boffset = baseclass_offset (type, i, valaddr + offset, address + offset);
+ boffset = baseclass_offset (type, i, valaddr + offset,
+ address + offset);
skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
if (BASETYPE_VIA_VIRTUAL (type, i))
{
- /* The virtual base class pointer might have been
- clobbered by the user program. Make sure that it
- still points to a valid memory location. */
+ /* The virtual base class pointer might have been clobbered
+ by the user program. Make sure that it still points to a
+ valid memory location. */
if (boffset != -1
&& ((boffset + offset) < 0
|| (boffset + offset) >= TYPE_LENGTH (real_type)))
{
- /* FIXME (alloca): unsafe if baseclass is really really large. */
+ /* FIXME (alloca): unsafe if baseclass is really really
+ large. */
gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
base_valaddr = buf;
@@ -517,15 +540,15 @@ cp_print_value (struct type *type, struct type *real_type,
else
base_valaddr = valaddr;
- /* now do the printing */
+ /* Now do the printing. */
if (options->pretty)
{
fprintf_filtered (stream, "\n");
print_spaces_filtered (2 * recurse, stream);
}
fputs_filtered ("<", stream);
- /* Not sure what the best notation is in the case where there is no
- baseclass name. */
+ /* Not sure what the best notation is in the case where there is
+ no baseclass name. */
fputs_filtered (basename ? basename : "", stream);
fputs_filtered ("> = ", stream);
@@ -542,8 +565,8 @@ cp_print_value (struct type *type, struct type *real_type,
result = apply_val_pretty_printer (baseclass, base_valaddr,
thisoffset + boffset,
address,
- stream, recurse, val,
- options,
+ stream, recurse,
+ val, options,
current_language);
if (!result)
@@ -571,11 +594,10 @@ cp_print_value (struct type *type, struct type *real_type,
}
}
-/* Print value of a static member.
- To avoid infinite recursion when printing a class that contains
- a static instance of the class, we keep the addresses of all printed
- static member classes in an obstack and refuse to print them more
- than once.
+/* Print value of a static member. To avoid infinite recursion when
+ printing a class that contains a static instance of the class, we
+ keep the addresses of all printed static member classes in an
+ obstack and refuse to print them more than once.
VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
have the same meanings as in c_val_print. */
@@ -618,8 +640,8 @@ cp_print_static_field (struct type *type,
cp_print_value_fields (type, value_enclosing_type (val),
value_contents_for_printing (val),
value_embedded_offset (val), addr,
- stream, recurse,
- val, options, NULL, 1);
+ stream, recurse, val,
+ options, NULL, 1);
return;
}
@@ -645,23 +667,25 @@ cp_print_static_field (struct type *type,
}
}
- obstack_grow (&dont_print_stat_array_obstack, (char *) &target_type,
+ obstack_grow (&dont_print_stat_array_obstack,
+ (char *) &target_type,
sizeof (struct type *));
}
opts = *options;
opts.deref_ref = 0;
val_print (type, value_contents_for_printing (val),
- value_embedded_offset (val), value_address (val),
- stream, recurse,
- val, &opts, current_language);
+ value_embedded_offset (val),
+ value_address (val),
+ stream, recurse, val,
+ &opts, current_language);
}
-/* Find the field in *DOMAIN, or its non-virtual base classes, with bit offset
- OFFSET. Set *DOMAIN to the containing type and *FIELDNO to the containing
- field number. If OFFSET is not exactly at the start of some field, set
- *DOMAIN to NULL. */
+/* Find the field in *DOMAIN, or its non-virtual base classes, with
+ bit offset OFFSET. Set *DOMAIN to the containing type and *FIELDNO
+ to the containing field number. If OFFSET is not exactly at the
+ start of some field, set *DOMAIN to NULL. */
static void
cp_find_class_member (struct type **domain_p, int *fieldno,
@@ -716,7 +740,9 @@ cp_print_class_member (const gdb_byte *valaddr, struct type *type,
LONGEST val;
unsigned int fieldno;
- val = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
+ val = extract_signed_integer (valaddr,
+ TYPE_LENGTH (type),
+ byte_order);
/* Pointers to data members are usually byte offsets into an object.
Because a data member can have offset zero, and a NULL pointer to
@@ -781,7 +807,10 @@ Show printing of object's derived type based on vtable info."), NULL,
show_objectprint,
&setprintlist, &showprintlist);
- obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (struct type *));
- obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
- obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
+ obstack_begin (&dont_print_stat_array_obstack,
+ 32 * sizeof (struct type *));
+ obstack_begin (&dont_print_statmem_obstack,
+ 32 * sizeof (CORE_ADDR));
+ obstack_begin (&dont_print_vb_obstack,
+ 32 * sizeof (struct type *));
}