Home | History | Annotate | Line # | Download | only in gdb
c-valprint.c revision 1.1.1.5
      1 /* Support for printing C values for GDB, the GNU debugger.
      2 
      3    Copyright (C) 1986-2019 Free Software Foundation, Inc.
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "defs.h"
     21 #include "symtab.h"
     22 #include "gdbtypes.h"
     23 #include "expression.h"
     24 #include "value.h"
     25 #include "valprint.h"
     26 #include "language.h"
     27 #include "c-lang.h"
     28 #include "cp-abi.h"
     29 #include "target.h"
     30 #include "objfiles.h"
     31 
     32 
     34 /* A helper for c_textual_element_type.  This checks the name of the
     35    typedef.  This is bogus but it isn't apparent that the compiler
     36    provides us the help we may need.  */
     37 
     38 static int
     39 textual_name (const char *name)
     40 {
     41   return (!strcmp (name, "wchar_t")
     42 	  || !strcmp (name, "char16_t")
     43 	  || !strcmp (name, "char32_t"));
     44 }
     45 
     46 /* Apply a heuristic to decide whether an array of TYPE or a pointer
     47    to TYPE should be printed as a textual string.  Return non-zero if
     48    it should, or zero if it should be treated as an array of integers
     49    or pointer to integers.  FORMAT is the current format letter, or 0
     50    if none.
     51 
     52    We guess that "char" is a character.  Explicitly signed and
     53    unsigned character types are also characters.  Integer data from
     54    vector types is not.  The user can override this by using the /s
     55    format letter.  */
     56 
     57 int
     58 c_textual_element_type (struct type *type, char format)
     59 {
     60   struct type *true_type, *iter_type;
     61 
     62   if (format != 0 && format != 's')
     63     return 0;
     64 
     65   /* We also rely on this for its side effect of setting up all the
     66      typedef pointers.  */
     67   true_type = check_typedef (type);
     68 
     69   /* TYPE_CODE_CHAR is always textual.  */
     70   if (TYPE_CODE (true_type) == TYPE_CODE_CHAR)
     71     return 1;
     72 
     73   /* Any other character-like types must be integral.  */
     74   if (TYPE_CODE (true_type) != TYPE_CODE_INT)
     75     return 0;
     76 
     77   /* We peel typedefs one by one, looking for a match.  */
     78   iter_type = type;
     79   while (iter_type)
     80     {
     81       /* Check the name of the type.  */
     82       if (TYPE_NAME (iter_type) && textual_name (TYPE_NAME (iter_type)))
     83 	return 1;
     84 
     85       if (TYPE_CODE (iter_type) != TYPE_CODE_TYPEDEF)
     86 	break;
     87 
     88       /* Peel a single typedef.  If the typedef doesn't have a target
     89 	 type, we use check_typedef and hope the result is ok -- it
     90 	 might be for C++, where wchar_t is a built-in type.  */
     91       if (TYPE_TARGET_TYPE (iter_type))
     92 	iter_type = TYPE_TARGET_TYPE (iter_type);
     93       else
     94 	iter_type = check_typedef (iter_type);
     95     }
     96 
     97   if (format == 's')
     98     {
     99       /* Print this as a string if we can manage it.  For now, no wide
    100 	 character support.  */
    101       if (TYPE_CODE (true_type) == TYPE_CODE_INT
    102 	  && TYPE_LENGTH (true_type) == 1)
    103 	return 1;
    104     }
    105   else
    106     {
    107       /* If a one-byte TYPE_CODE_INT is missing the not-a-character
    108 	 flag, then we treat it as text; otherwise, we assume it's
    109 	 being used as data.  */
    110       if (TYPE_CODE (true_type) == TYPE_CODE_INT
    111 	  && TYPE_LENGTH (true_type) == 1
    112 	  && !TYPE_NOTTEXT (true_type))
    113 	return 1;
    114     }
    115 
    116   return 0;
    117 }
    118 
    119 /* Decorations for C.  */
    120 
    121 static const struct generic_val_print_decorations c_decorations =
    122 {
    123   "",
    124   " + ",
    125   " * I",
    126   "true",
    127   "false",
    128   "void",
    129   "{",
    130   "}"
    131 };
    132 
    133 /* Print a pointer based on the type of its target.
    134 
    135    Arguments to this functions are roughly the same as those in c_val_print.
    136    A difference is that ADDRESS is the address to print, with embedded_offset
    137    already added.  UNRESOLVED_ELTTYPE and ELTTYPE represent the pointed type,
    138    respectively before and after check_typedef.  */
    139 
    140 static void
    141 print_unpacked_pointer (struct type *type, struct type *elttype,
    142 			struct type *unresolved_elttype,
    143 			const gdb_byte *valaddr, int embedded_offset,
    144 			CORE_ADDR address, struct ui_file *stream, int recurse,
    145 			const struct value_print_options *options)
    146 {
    147   int want_space = 0;
    148   struct gdbarch *gdbarch = get_type_arch (type);
    149 
    150   if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
    151     {
    152       /* Try to print what function it points to.  */
    153       print_function_pointer_address (options, gdbarch, address, stream);
    154       return;
    155     }
    156 
    157   if (options->symbol_print)
    158     want_space = print_address_demangle (options, gdbarch, address, stream,
    159 					 demangle);
    160   else if (options->addressprint)
    161     {
    162       fputs_filtered (paddress (gdbarch, address), stream);
    163       want_space = 1;
    164     }
    165 
    166   /* For a pointer to a textual type, also print the string
    167      pointed to, unless pointer is null.  */
    168 
    169   if (c_textual_element_type (unresolved_elttype, options->format)
    170       && address != 0)
    171     {
    172       if (want_space)
    173 	fputs_filtered (" ", stream);
    174       val_print_string (unresolved_elttype, NULL, address, -1, stream, options);
    175     }
    176   else if (cp_is_vtbl_member (type))
    177     {
    178       /* Print vtbl's nicely.  */
    179       CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
    180       struct bound_minimal_symbol msymbol =
    181 	lookup_minimal_symbol_by_pc (vt_address);
    182 
    183       /* If 'symbol_print' is set, we did the work above.  */
    184       if (!options->symbol_print
    185 	  && (msymbol.minsym != NULL)
    186 	  && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
    187 	{
    188 	  if (want_space)
    189 	    fputs_filtered (" ", stream);
    190 	  fputs_filtered (" <", stream);
    191 	  fputs_filtered (MSYMBOL_PRINT_NAME (msymbol.minsym), stream);
    192 	  fputs_filtered (">", stream);
    193 	  want_space = 1;
    194 	}
    195 
    196       if (vt_address && options->vtblprint)
    197 	{
    198 	  struct value *vt_val;
    199 	  struct symbol *wsym = NULL;
    200 	  struct type *wtype;
    201 	  struct block *block = NULL;
    202 
    203 	  if (want_space)
    204 	    fputs_filtered (" ", stream);
    205 
    206 	  if (msymbol.minsym != NULL)
    207 	    {
    208 	      const char *search_name
    209 		= MSYMBOL_SEARCH_NAME (msymbol.minsym);
    210 	      wsym = lookup_symbol_search_name (search_name, block,
    211 						VAR_DOMAIN).symbol;
    212 	    }
    213 
    214 	  if (wsym)
    215 	    {
    216 	      wtype = SYMBOL_TYPE (wsym);
    217 	    }
    218 	  else
    219 	    {
    220 	      wtype = unresolved_elttype;
    221 	    }
    222 	  vt_val = value_at (wtype, vt_address);
    223 	  common_val_print (vt_val, stream, recurse + 1, options,
    224 			    current_language);
    225 	  if (options->prettyformat)
    226 	    {
    227 	      fprintf_filtered (stream, "\n");
    228 	      print_spaces_filtered (2 + 2 * recurse, stream);
    229 	    }
    230 	}
    231     }
    232 }
    233 
    234 /* c_val_print helper for TYPE_CODE_ARRAY.  */
    235 
    236 static void
    237 c_val_print_array (struct type *type, const gdb_byte *valaddr,
    238 		   int embedded_offset, CORE_ADDR address,
    239 		   struct ui_file *stream, int recurse,
    240 		   struct value *original_value,
    241 		   const struct value_print_options *options)
    242 {
    243   struct type *unresolved_elttype = TYPE_TARGET_TYPE (type);
    244   struct type *elttype = check_typedef (unresolved_elttype);
    245   struct gdbarch *arch = get_type_arch (type);
    246   int unit_size = gdbarch_addressable_memory_unit_size (arch);
    247 
    248   if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
    249     {
    250       LONGEST low_bound, high_bound;
    251       int eltlen, len;
    252       struct gdbarch *gdbarch = get_type_arch (type);
    253       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    254       unsigned int i = 0;	/* Number of characters printed.  */
    255 
    256       if (!get_array_bounds (type, &low_bound, &high_bound))
    257 	error (_("Could not determine the array high bound"));
    258 
    259       eltlen = TYPE_LENGTH (elttype);
    260       len = high_bound - low_bound + 1;
    261       if (options->prettyformat_arrays)
    262 	{
    263 	  print_spaces_filtered (2 + 2 * recurse, stream);
    264 	}
    265 
    266       /* Print arrays of textual chars with a string syntax, as
    267 	 long as the entire array is valid.  */
    268       if (c_textual_element_type (unresolved_elttype,
    269 				  options->format)
    270 	  && value_bytes_available (original_value, embedded_offset,
    271 				    TYPE_LENGTH (type))
    272 	  && !value_bits_any_optimized_out (original_value,
    273 					    TARGET_CHAR_BIT * embedded_offset,
    274 					    TARGET_CHAR_BIT * TYPE_LENGTH (type)))
    275 	{
    276 	  int force_ellipses = 0;
    277 
    278 	  /* If requested, look for the first null char and only
    279 	     print elements up to it.  */
    280 	  if (options->stop_print_at_null)
    281 	    {
    282 	      unsigned int temp_len;
    283 
    284 	      for (temp_len = 0;
    285 		   (temp_len < len
    286 		    && temp_len < options->print_max
    287 		    && extract_unsigned_integer (valaddr
    288 						 + embedded_offset * unit_size
    289 						 + temp_len * eltlen,
    290 						 eltlen, byte_order) != 0);
    291 		   ++temp_len)
    292 		;
    293 
    294 	      /* Force LA_PRINT_STRING to print ellipses if
    295 		 we've printed the maximum characters and
    296 		 the next character is not \000.  */
    297 	      if (temp_len == options->print_max && temp_len < len)
    298 		{
    299 		  ULONGEST val
    300 		    = extract_unsigned_integer (valaddr
    301 						+ embedded_offset * unit_size
    302 						+ temp_len * eltlen,
    303 						eltlen, byte_order);
    304 		  if (val != 0)
    305 		    force_ellipses = 1;
    306 		}
    307 
    308 	      len = temp_len;
    309 	    }
    310 
    311 	  LA_PRINT_STRING (stream, unresolved_elttype,
    312 			   valaddr + embedded_offset * unit_size, len,
    313 			   NULL, force_ellipses, options);
    314 	  i = len;
    315 	}
    316       else
    317 	{
    318 	  fprintf_filtered (stream, "{");
    319 	  /* If this is a virtual function table, print the 0th
    320 	     entry specially, and the rest of the members
    321 	     normally.  */
    322 	  if (cp_is_vtbl_ptr_type (elttype))
    323 	    {
    324 	      i = 1;
    325 	      fprintf_filtered (stream, _("%d vtable entries"),
    326 				len - 1);
    327 	    }
    328 	  else
    329 	    {
    330 	      i = 0;
    331 	    }
    332 	  val_print_array_elements (type, embedded_offset,
    333 				    address, stream,
    334 				    recurse, original_value, options, i);
    335 	  fprintf_filtered (stream, "}");
    336 	}
    337     }
    338   else
    339     {
    340       /* Array of unspecified length: treat like pointer to first elt.  */
    341       print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr,
    342 			      embedded_offset, address + embedded_offset,
    343 			      stream, recurse, options);
    344     }
    345 }
    346 
    347 /* c_val_print helper for TYPE_CODE_PTR.  */
    348 
    349 static void
    350 c_val_print_ptr (struct type *type, const gdb_byte *valaddr,
    351 		 int embedded_offset, struct ui_file *stream, int recurse,
    352 		 struct value *original_value,
    353 		 const struct value_print_options *options)
    354 {
    355   struct gdbarch *arch = get_type_arch (type);
    356   int unit_size = gdbarch_addressable_memory_unit_size (arch);
    357 
    358   if (options->format && options->format != 's')
    359     {
    360       val_print_scalar_formatted (type, embedded_offset,
    361 				  original_value, options, 0, stream);
    362     }
    363   else if (options->vtblprint && cp_is_vtbl_ptr_type (type))
    364     {
    365       /* Print the unmangled name if desired.  */
    366       /* Print vtable entry - we only get here if we ARE using
    367 	 -fvtable_thunks.  (Otherwise, look under
    368 	 TYPE_CODE_STRUCT.)  */
    369       CORE_ADDR addr
    370 	= extract_typed_address (valaddr + embedded_offset, type);
    371       struct gdbarch *gdbarch = get_type_arch (type);
    372 
    373       print_function_pointer_address (options, gdbarch, addr, stream);
    374     }
    375   else
    376     {
    377       struct type *unresolved_elttype = TYPE_TARGET_TYPE (type);
    378       struct type *elttype = check_typedef (unresolved_elttype);
    379       CORE_ADDR addr = unpack_pointer (type,
    380 				       valaddr + embedded_offset * unit_size);
    381 
    382       print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr,
    383 			      embedded_offset, addr, stream, recurse, options);
    384     }
    385 }
    386 
    387 /* c_val_print helper for TYPE_CODE_STRUCT.  */
    388 
    389 static void
    390 c_val_print_struct (struct type *type, const gdb_byte *valaddr,
    391 		    int embedded_offset, CORE_ADDR address,
    392 		    struct ui_file *stream, int recurse,
    393 		    struct value *original_value,
    394 		    const struct value_print_options *options)
    395 {
    396   if (options->vtblprint && cp_is_vtbl_ptr_type (type))
    397     {
    398       /* Print the unmangled name if desired.  */
    399       /* Print vtable entry - we only get here if NOT using
    400 	 -fvtable_thunks.  (Otherwise, look under
    401 	 TYPE_CODE_PTR.)  */
    402       struct gdbarch *gdbarch = get_type_arch (type);
    403       int offset = (embedded_offset
    404 		    + TYPE_FIELD_BITPOS (type,
    405 					 VTBL_FNADDR_OFFSET) / 8);
    406       struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
    407       CORE_ADDR addr = extract_typed_address (valaddr + offset, field_type);
    408 
    409       print_function_pointer_address (options, gdbarch, addr, stream);
    410     }
    411   else
    412     cp_print_value_fields_rtti (type, valaddr,
    413 				embedded_offset, address,
    414 				stream, recurse,
    415 				original_value, options,
    416 				NULL, 0);
    417 }
    418 
    419 /* c_val_print helper for TYPE_CODE_UNION.  */
    420 
    421 static void
    422 c_val_print_union (struct type *type, const gdb_byte *valaddr,
    423 		   int embedded_offset, CORE_ADDR address,
    424 		   struct ui_file *stream, int recurse,
    425 		   struct value *original_value,
    426 		   const struct value_print_options *options)
    427 {
    428   if (recurse && !options->unionprint)
    429     {
    430       fprintf_filtered (stream, "{...}");
    431      }
    432   else
    433     {
    434       c_val_print_struct (type, valaddr, embedded_offset, address, stream,
    435 			  recurse, original_value, options);
    436     }
    437 }
    438 
    439 /* c_val_print helper for TYPE_CODE_INT.  */
    440 
    441 static void
    442 c_val_print_int (struct type *type, struct type *unresolved_type,
    443 		 const gdb_byte *valaddr, int embedded_offset,
    444 		 struct ui_file *stream, struct value *original_value,
    445 		 const struct value_print_options *options)
    446 {
    447   struct gdbarch *arch = get_type_arch (type);
    448   int unit_size = gdbarch_addressable_memory_unit_size (arch);
    449 
    450   if (options->format || options->output_format)
    451     {
    452       struct value_print_options opts = *options;
    453 
    454       opts.format = (options->format ? options->format
    455 		     : options->output_format);
    456       val_print_scalar_formatted (type, embedded_offset,
    457 				  original_value, &opts, 0, stream);
    458     }
    459   else
    460     {
    461       val_print_scalar_formatted (type, embedded_offset,
    462 				  original_value, options, 0, stream);
    463       /* C and C++ has no single byte int type, char is used
    464 	 instead.  Since we don't know whether the value is really
    465 	 intended to be used as an integer or a character, print
    466 	 the character equivalent as well.  */
    467       if (c_textual_element_type (unresolved_type, options->format))
    468 	{
    469 	  fputs_filtered (" ", stream);
    470 	  LA_PRINT_CHAR (unpack_long (type,
    471 				      valaddr + embedded_offset * unit_size),
    472 			 unresolved_type, stream);
    473 	}
    474     }
    475 }
    476 
    477 /* c_val_print helper for TYPE_CODE_MEMBERPTR.  */
    478 
    479 static void
    480 c_val_print_memberptr (struct type *type, const gdb_byte *valaddr,
    481 		       int embedded_offset, CORE_ADDR address,
    482 		       struct ui_file *stream, int recurse,
    483 		       struct value *original_value,
    484 		       const struct value_print_options *options)
    485 {
    486   if (!options->format)
    487     {
    488       cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
    489     }
    490   else
    491     {
    492       generic_val_print (type, embedded_offset, address, stream,
    493 			 recurse, original_value, options, &c_decorations);
    494     }
    495 }
    496 
    497 /* See val_print for a description of the various parameters of this
    498    function; they are identical.  */
    499 
    500 void
    501 c_val_print (struct type *type,
    502 	     int embedded_offset, CORE_ADDR address,
    503 	     struct ui_file *stream, int recurse,
    504 	     struct value *original_value,
    505 	     const struct value_print_options *options)
    506 {
    507   struct type *unresolved_type = type;
    508   const gdb_byte *valaddr = value_contents_for_printing (original_value);
    509 
    510   type = check_typedef (type);
    511   switch (TYPE_CODE (type))
    512     {
    513     case TYPE_CODE_ARRAY:
    514       c_val_print_array (type, valaddr, embedded_offset, address, stream,
    515 			 recurse, original_value, options);
    516       break;
    517 
    518     case TYPE_CODE_METHODPTR:
    519       cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
    520       break;
    521 
    522     case TYPE_CODE_PTR:
    523       c_val_print_ptr (type, valaddr, embedded_offset, stream, recurse,
    524 		       original_value, options);
    525       break;
    526 
    527     case TYPE_CODE_UNION:
    528       c_val_print_union (type, valaddr, embedded_offset, address, stream,
    529 			 recurse, original_value, options);
    530       break;
    531 
    532     case TYPE_CODE_STRUCT:
    533       c_val_print_struct (type, valaddr, embedded_offset, address, stream,
    534 			  recurse, original_value, options);
    535       break;
    536 
    537     case TYPE_CODE_INT:
    538       c_val_print_int (type, unresolved_type, valaddr, embedded_offset, stream,
    539 		       original_value, options);
    540       break;
    541 
    542     case TYPE_CODE_MEMBERPTR:
    543       c_val_print_memberptr (type, valaddr, embedded_offset, address, stream,
    544 			     recurse, original_value, options);
    545       break;
    546 
    547     case TYPE_CODE_REF:
    548     case TYPE_CODE_RVALUE_REF:
    549     case TYPE_CODE_ENUM:
    550     case TYPE_CODE_FLAGS:
    551     case TYPE_CODE_FUNC:
    552     case TYPE_CODE_METHOD:
    553     case TYPE_CODE_BOOL:
    554     case TYPE_CODE_RANGE:
    555     case TYPE_CODE_FLT:
    556     case TYPE_CODE_DECFLOAT:
    557     case TYPE_CODE_VOID:
    558     case TYPE_CODE_ERROR:
    559     case TYPE_CODE_UNDEF:
    560     case TYPE_CODE_COMPLEX:
    561     case TYPE_CODE_CHAR:
    562     default:
    563       generic_val_print (type, embedded_offset, address,
    564 			 stream, recurse, original_value, options,
    565 			 &c_decorations);
    566       break;
    567     }
    568   gdb_flush (stream);
    569 }
    570 
    571 void
    573 c_value_print (struct value *val, struct ui_file *stream,
    574 	       const struct value_print_options *options)
    575 {
    576   struct type *type, *real_type, *val_type;
    577   int full, using_enc;
    578   LONGEST top;
    579   struct value_print_options opts = *options;
    580 
    581   opts.deref_ref = 1;
    582 
    583   /* If it is a pointer, indicate what it points to.
    584 
    585      Print type also if it is a reference.
    586 
    587      C++: if it is a member pointer, we will take care
    588      of that when we print it.  */
    589 
    590   /* Preserve the original type before stripping typedefs.  We prefer
    591      to pass down the original type when possible, but for local
    592      checks it is better to look past the typedefs.  */
    593   val_type = value_type (val);
    594   type = check_typedef (val_type);
    595 
    596   if (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type))
    597     {
    598       /* Hack:  remove (char *) for char strings.  Their
    599          type is indicated by the quoted string anyway.
    600          (Don't use c_textual_element_type here; quoted strings
    601          are always exactly (char *), (wchar_t *), or the like.  */
    602       if (TYPE_CODE (val_type) == TYPE_CODE_PTR
    603 	  && TYPE_NAME (val_type) == NULL
    604 	  && TYPE_NAME (TYPE_TARGET_TYPE (val_type)) != NULL
    605 	  && (strcmp (TYPE_NAME (TYPE_TARGET_TYPE (val_type)),
    606 		      "char") == 0
    607 	      || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type)))))
    608 	{
    609 	  /* Print nothing.  */
    610 	}
    611       else if (options->objectprint
    612 	       && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
    613 	{
    614 	  int is_ref = TYPE_IS_REFERENCE (type);
    615 	  enum type_code refcode = TYPE_CODE_UNDEF;
    616 
    617 	  if (is_ref)
    618 	    {
    619 	      val = value_addr (val);
    620 	      refcode = TYPE_CODE (type);
    621 	    }
    622 
    623 	  /* Pointer to class, check real type of object.  */
    624 	  fprintf_filtered (stream, "(");
    625 
    626 	  if (value_entirely_available (val))
    627 	    {
    628 	      real_type = value_rtti_indirect_type (val, &full, &top,
    629 						    &using_enc);
    630 	      if (real_type)
    631 		{
    632 		  /* RTTI entry found.  */
    633 		  type = real_type;
    634 
    635 		  /* Need to adjust pointer value.  */
    636 		  val = value_from_pointer (real_type,
    637 					    value_as_address (val) - top);
    638 
    639 		  /* Note: When we look up RTTI entries, we don't get
    640 		     any information on const or volatile
    641 		     attributes.  */
    642 		}
    643 	    }
    644 
    645 	  if (is_ref)
    646 	    {
    647 	      val = value_ref (value_ind (val), refcode);
    648 	      type = value_type (val);
    649 	    }
    650 
    651 	  type_print (type, "", stream, -1);
    652 	  fprintf_filtered (stream, ") ");
    653 	  val_type = type;
    654 	}
    655       else
    656 	{
    657 	  /* normal case */
    658 	  fprintf_filtered (stream, "(");
    659 	  type_print (value_type (val), "", stream, -1);
    660 	  fprintf_filtered (stream, ") ");
    661 	}
    662     }
    663 
    664   if (!value_initialized (val))
    665     fprintf_filtered (stream, " [uninitialized] ");
    666 
    667   if (options->objectprint && (TYPE_CODE (type) == TYPE_CODE_STRUCT))
    668     {
    669       /* Attempt to determine real type of object.  */
    670       real_type = value_rtti_type (val, &full, &top, &using_enc);
    671       if (real_type)
    672 	{
    673 	  /* We have RTTI information, so use it.  */
    674 	  val = value_full_object (val, real_type,
    675 				   full, top, using_enc);
    676 	  fprintf_filtered (stream, "(%s%s) ",
    677 			    TYPE_NAME (real_type),
    678 			    full ? "" : _(" [incomplete object]"));
    679 	  /* Print out object: enclosing type is same as real_type if
    680 	     full.  */
    681 	  val_print (value_enclosing_type (val),
    682 		     0,
    683 		     value_address (val), stream, 0,
    684 		     val, &opts, current_language);
    685 	  return;
    686           /* Note: When we look up RTTI entries, we don't get any
    687              information on const or volatile attributes.  */
    688 	}
    689       else if (type != check_typedef (value_enclosing_type (val)))
    690 	{
    691 	  /* No RTTI information, so let's do our best.  */
    692 	  fprintf_filtered (stream, "(%s ?) ",
    693 			    TYPE_NAME (value_enclosing_type (val)));
    694 	  val_print (value_enclosing_type (val),
    695 		     0,
    696 		     value_address (val), stream, 0,
    697 		     val, &opts, current_language);
    698 	  return;
    699 	}
    700       /* Otherwise, we end up at the return outside this "if".  */
    701     }
    702 
    703   val_print (val_type,
    704 	     value_embedded_offset (val),
    705 	     value_address (val),
    706 	     stream, 0,
    707 	     val, &opts, current_language);
    708 }
    709