gdb/
[deliverable/binutils-gdb.git] / gdb / c-valprint.c
CommitLineData
c906108c 1/* Support for printing C values for GDB, the GNU debugger.
1bac305b 2
6aba47ca 3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
7b6bb8da 4 1998, 1999, 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4f2aea11 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
309367d4 23#include "gdb_string.h"
c906108c
SS
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "expression.h"
27#include "value.h"
c906108c
SS
28#include "valprint.h"
29#include "language.h"
30#include "c-lang.h"
015a42b4 31#include "cp-abi.h"
e2d0e7eb 32#include "target.h"
c906108c 33\f
c5aa993b 34
6e778545
PS
35/* Print function pointer with inferior address ADDRESS onto stdio
36 stream STREAM. */
37
38static void
aff410f1
MS
39print_function_pointer_address (struct gdbarch *gdbarch,
40 CORE_ADDR address,
41 struct ui_file *stream,
42 int addressprint)
6e778545 43{
aff410f1
MS
44 CORE_ADDR func_addr
45 = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
46 &current_target);
6e778545 47
aff410f1
MS
48 /* If the function pointer is represented by a description, print
49 the address of the description. */
6e778545
PS
50 if (addressprint && func_addr != address)
51 {
52 fputs_filtered ("@", stream);
5af949e3 53 fputs_filtered (paddress (gdbarch, address), stream);
6e778545
PS
54 fputs_filtered (": ", stream);
55 }
5af949e3 56 print_address_demangle (gdbarch, func_addr, stream, demangle);
6e778545
PS
57}
58
59
96c07c5b 60/* A helper for c_textual_element_type. This checks the name of the
6c7a06a3
TT
61 typedef. This is bogus but it isn't apparent that the compiler
62 provides us the help we may need. */
63
64static int
65textual_name (const char *name)
66{
67 return (!strcmp (name, "wchar_t")
68 || !strcmp (name, "char16_t")
69 || !strcmp (name, "char32_t"));
70}
71
ea37ba09
DJ
72/* Apply a heuristic to decide whether an array of TYPE or a pointer
73 to TYPE should be printed as a textual string. Return non-zero if
74 it should, or zero if it should be treated as an array of integers
aff410f1
MS
75 or pointer to integers. FORMAT is the current format letter, or 0
76 if none.
ea37ba09
DJ
77
78 We guess that "char" is a character. Explicitly signed and
79 unsigned character types are also characters. Integer data from
80 vector types is not. The user can override this by using the /s
81 format letter. */
82
96c07c5b
TT
83int
84c_textual_element_type (struct type *type, char format)
ea37ba09 85{
85e306ed 86 struct type *true_type, *iter_type;
ea37ba09
DJ
87
88 if (format != 0 && format != 's')
89 return 0;
90
85e306ed
TT
91 /* We also rely on this for its side effect of setting up all the
92 typedef pointers. */
93 true_type = check_typedef (type);
94
ea37ba09
DJ
95 /* TYPE_CODE_CHAR is always textual. */
96 if (TYPE_CODE (true_type) == TYPE_CODE_CHAR)
97 return 1;
85e306ed 98
6c7a06a3
TT
99 /* Any other character-like types must be integral. */
100 if (TYPE_CODE (true_type) != TYPE_CODE_INT)
101 return 0;
102
85e306ed
TT
103 /* We peel typedefs one by one, looking for a match. */
104 iter_type = type;
105 while (iter_type)
106 {
107 /* Check the name of the type. */
108 if (TYPE_NAME (iter_type) && textual_name (TYPE_NAME (iter_type)))
109 return 1;
110
111 if (TYPE_CODE (iter_type) != TYPE_CODE_TYPEDEF)
112 break;
113
114 /* Peel a single typedef. If the typedef doesn't have a target
115 type, we use check_typedef and hope the result is ok -- it
116 might be for C++, where wchar_t is a built-in type. */
117 if (TYPE_TARGET_TYPE (iter_type))
118 iter_type = TYPE_TARGET_TYPE (iter_type);
119 else
120 iter_type = check_typedef (iter_type);
121 }
ea37ba09
DJ
122
123 if (format == 's')
124 {
aff410f1
MS
125 /* Print this as a string if we can manage it. For now, no wide
126 character support. */
ea37ba09
DJ
127 if (TYPE_CODE (true_type) == TYPE_CODE_INT
128 && TYPE_LENGTH (true_type) == 1)
129 return 1;
130 }
131 else
132 {
133 /* If a one-byte TYPE_CODE_INT is missing the not-a-character
134 flag, then we treat it as text; otherwise, we assume it's
135 being used as data. */
136 if (TYPE_CODE (true_type) == TYPE_CODE_INT
137 && TYPE_LENGTH (true_type) == 1
138 && !TYPE_NOTTEXT (true_type))
139 return 1;
140 }
141
142 return 0;
143}
144
32b72a42
PA
145/* See val_print for a description of the various parameters of this
146 function; they are identical. The semantics of the return value is
147 also identical to val_print. */
c906108c
SS
148
149int
aff410f1
MS
150c_val_print (struct type *type, const gdb_byte *valaddr,
151 int embedded_offset, CORE_ADDR address,
152 struct ui_file *stream, int recurse,
0e03807e 153 const struct value *original_value,
79a45b7d 154 const struct value_print_options *options)
c906108c 155{
50810684 156 struct gdbarch *gdbarch = get_type_arch (type);
e17a4113 157 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
aff410f1 158 unsigned int i = 0; /* Number of characters printed. */
c906108c 159 unsigned len;
6c7a06a3
TT
160 struct type *elttype, *unresolved_elttype;
161 struct type *unresolved_type = type;
c906108c
SS
162 unsigned eltlen;
163 LONGEST val;
164 CORE_ADDR addr;
165
166 CHECK_TYPEDEF (type);
167 switch (TYPE_CODE (type))
168 {
169 case TYPE_CODE_ARRAY:
6c7a06a3
TT
170 unresolved_elttype = TYPE_TARGET_TYPE (type);
171 elttype = check_typedef (unresolved_elttype);
172 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
c906108c 173 {
dbc98a8b
KW
174 LONGEST low_bound, high_bound;
175
176 if (!get_array_bounds (type, &low_bound, &high_bound))
177 error (_("Could not determine the array high bound"));
178
c906108c 179 eltlen = TYPE_LENGTH (elttype);
dbc98a8b 180 len = high_bound - low_bound + 1;
79a45b7d 181 if (options->prettyprint_arrays)
c906108c
SS
182 {
183 print_spaces_filtered (2 + 2 * recurse, stream);
184 }
ea37ba09 185
0e03807e
TT
186 /* Print arrays of textual chars with a string syntax, as
187 long as the entire array is valid. */
aff410f1
MS
188 if (c_textual_element_type (unresolved_elttype,
189 options->format)
9fc6d940
PA
190 && value_bytes_available (original_value, embedded_offset,
191 TYPE_LENGTH (type))
0e03807e
TT
192 && value_bits_valid (original_value,
193 TARGET_CHAR_BIT * embedded_offset,
194 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
c906108c 195 {
aff410f1
MS
196 /* If requested, look for the first null char and only
197 print elements up to it. */
79a45b7d 198 if (options->stop_print_at_null)
c906108c 199 {
745b8ca0 200 unsigned int temp_len;
c5aa993b 201
c906108c 202 for (temp_len = 0;
6c7a06a3
TT
203 (temp_len < len
204 && temp_len < options->print_max
205 && extract_unsigned_integer (valaddr + embedded_offset
206 + temp_len * eltlen,
421d5d99 207 eltlen, byte_order) != 0);
6c7a06a3
TT
208 ++temp_len)
209 ;
c906108c
SS
210 len = temp_len;
211 }
c5aa993b 212
6c7a06a3 213 LA_PRINT_STRING (stream, unresolved_elttype,
be759fcf
PM
214 valaddr + embedded_offset, len,
215 NULL, 0, options);
c906108c
SS
216 i = len;
217 }
218 else
219 {
220 fprintf_filtered (stream, "{");
221 /* If this is a virtual function table, print the 0th
aff410f1
MS
222 entry specially, and the rest of the members
223 normally. */
c906108c
SS
224 if (cp_is_vtbl_ptr_type (elttype))
225 {
226 i = 1;
aff410f1
MS
227 fprintf_filtered (stream, _("%d vtable entries"),
228 len - 1);
c906108c
SS
229 }
230 else
231 {
232 i = 0;
233 }
490f124f
PA
234 val_print_array_elements (type, valaddr, embedded_offset,
235 address, stream,
236 recurse, original_value, options, i);
c906108c
SS
237 fprintf_filtered (stream, "}");
238 }
239 break;
240 }
aff410f1
MS
241 /* Array of unspecified length: treat like pointer to first
242 elt. */
c906108c
SS
243 addr = address;
244 goto print_unpacked_pointer;
245
0d5de010 246 case TYPE_CODE_MEMBERPTR:
79a45b7d 247 if (options->format)
0d5de010 248 {
ab2188aa
PA
249 val_print_scalar_formatted (type, valaddr, embedded_offset,
250 original_value, options, 0, stream);
0d5de010
DJ
251 break;
252 }
ad4820ab 253 cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
0d5de010
DJ
254 break;
255
256 case TYPE_CODE_METHODPTR:
257 cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
258 break;
259
c906108c 260 case TYPE_CODE_PTR:
79a45b7d 261 if (options->format && options->format != 's')
c906108c 262 {
ab2188aa
PA
263 val_print_scalar_formatted (type, valaddr, embedded_offset,
264 original_value, options, 0, stream);
c906108c
SS
265 break;
266 }
79a45b7d 267 if (options->vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 268 {
c5aa993b 269 /* Print the unmangled name if desired. */
c906108c 270 /* Print vtable entry - we only get here if we ARE using
aff410f1
MS
271 -fvtable_thunks. (Otherwise, look under
272 TYPE_CODE_STRUCT.) */
4478b372
JB
273 CORE_ADDR addr
274 = extract_typed_address (valaddr + embedded_offset, type);
c5504eaf 275
50810684
UW
276 print_function_pointer_address (gdbarch, addr, stream,
277 options->addressprint);
c906108c
SS
278 break;
279 }
6c7a06a3
TT
280 unresolved_elttype = TYPE_TARGET_TYPE (type);
281 elttype = check_typedef (unresolved_elttype);
c906108c
SS
282 {
283 addr = unpack_pointer (type, valaddr + embedded_offset);
284 print_unpacked_pointer:
c906108c
SS
285
286 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
287 {
288 /* Try to print what function it points to. */
50810684 289 print_function_pointer_address (gdbarch, addr, stream,
79a45b7d 290 options->addressprint);
aff410f1
MS
291 /* Return value is irrelevant except for string
292 pointers. */
c906108c
SS
293 return (0);
294 }
295
79a45b7d 296 if (options->addressprint)
5af949e3 297 fputs_filtered (paddress (gdbarch, addr), stream);
c906108c 298
ea37ba09 299 /* For a pointer to a textual type, also print the string
c906108c 300 pointed to, unless pointer is null. */
c906108c 301
aff410f1
MS
302 if (c_textual_element_type (unresolved_elttype,
303 options->format)
79a45b7d 304 && addr != 0)
c906108c 305 {
aff410f1
MS
306 i = val_print_string (unresolved_elttype, NULL,
307 addr, -1,
308 stream, options);
c906108c 309 }
c5aa993b
JM
310 else if (cp_is_vtbl_member (type))
311 {
aff410f1
MS
312 /* Print vtbl's nicely. */
313 CORE_ADDR vt_address = unpack_pointer (type,
314 valaddr
315 + embedded_offset);
c906108c
SS
316
317 struct minimal_symbol *msymbol =
c5aa993b 318 lookup_minimal_symbol_by_pc (vt_address);
5aafa1cc
PM
319 if ((msymbol != NULL)
320 && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
c906108c
SS
321 {
322 fputs_filtered (" <", stream);
de5ad195 323 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
c906108c
SS
324 fputs_filtered (">", stream);
325 }
79a45b7d 326 if (vt_address && options->vtblprint)
c5aa993b 327 {
6943961c 328 struct value *vt_val;
c5aa993b
JM
329 struct symbol *wsym = (struct symbol *) NULL;
330 struct type *wtype;
c5aa993b 331 struct block *block = (struct block *) NULL;
c906108c
SS
332 int is_this_fld;
333
334 if (msymbol != NULL)
aff410f1
MS
335 wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
336 block, VAR_DOMAIN,
337 &is_this_fld);
c5aa993b 338
c906108c
SS
339 if (wsym)
340 {
c5aa993b 341 wtype = SYMBOL_TYPE (wsym);
c906108c
SS
342 }
343 else
344 {
6c7a06a3 345 wtype = unresolved_elttype;
c906108c 346 }
00a4c844 347 vt_val = value_at (wtype, vt_address);
aff410f1
MS
348 common_val_print (vt_val, stream, recurse + 1,
349 options, current_language);
79a45b7d 350 if (options->pretty)
c906108c
SS
351 {
352 fprintf_filtered (stream, "\n");
353 print_spaces_filtered (2 + 2 * recurse, stream);
354 }
c5aa993b
JM
355 }
356 }
c906108c 357
aff410f1
MS
358 /* Return number of characters printed, including the
359 terminating '\0' if we reached the end. val_print_string
360 takes care including the terminating '\0' if
361 necessary. */
c906108c
SS
362 return i;
363 }
364 break;
365
c906108c
SS
366 case TYPE_CODE_REF:
367 elttype = check_typedef (TYPE_TARGET_TYPE (type));
79a45b7d 368 if (options->addressprint)
c5aa993b 369 {
4478b372
JB
370 CORE_ADDR addr
371 = extract_typed_address (valaddr + embedded_offset, type);
c5504eaf 372
c906108c 373 fprintf_filtered (stream, "@");
5af949e3 374 fputs_filtered (paddress (gdbarch, addr), stream);
79a45b7d 375 if (options->deref_ref)
c906108c 376 fputs_filtered (": ", stream);
c5aa993b 377 }
c906108c 378 /* De-reference the reference. */
79a45b7d 379 if (options->deref_ref)
c906108c
SS
380 {
381 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
382 {
6943961c 383 struct value *deref_val =
c5504eaf
MS
384 value_at
385 (TYPE_TARGET_TYPE (type),
386 unpack_pointer (type, valaddr + embedded_offset));
387
79a45b7d
TT
388 common_val_print (deref_val, stream, recurse, options,
389 current_language);
c906108c
SS
390 }
391 else
392 fputs_filtered ("???", stream);
393 }
394 break;
395
396 case TYPE_CODE_UNION:
79a45b7d 397 if (recurse && !options->unionprint)
c906108c
SS
398 {
399 fprintf_filtered (stream, "{...}");
400 break;
401 }
402 /* Fall through. */
403 case TYPE_CODE_STRUCT:
0963b4bd 404 /*FIXME: Abstract this away. */
79a45b7d 405 if (options->vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 406 {
c5aa993b 407 /* Print the unmangled name if desired. */
c906108c 408 /* Print vtable entry - we only get here if NOT using
aff410f1
MS
409 -fvtable_thunks. (Otherwise, look under
410 TYPE_CODE_PTR.) */
411 int offset = (embedded_offset
412 + TYPE_FIELD_BITPOS (type,
413 VTBL_FNADDR_OFFSET) / 8);
414 struct type *field_type = TYPE_FIELD_TYPE (type,
415 VTBL_FNADDR_OFFSET);
4478b372
JB
416 CORE_ADDR addr
417 = extract_typed_address (valaddr + offset, field_type);
418
50810684
UW
419 print_function_pointer_address (gdbarch, addr, stream,
420 options->addressprint);
c906108c
SS
421 }
422 else
edf3d5f3 423 cp_print_value_fields_rtti (type, valaddr,
aff410f1
MS
424 embedded_offset, address,
425 stream, recurse,
426 original_value, options,
427 NULL, 0);
c906108c
SS
428 break;
429
430 case TYPE_CODE_ENUM:
79a45b7d 431 if (options->format)
c906108c 432 {
ab2188aa
PA
433 val_print_scalar_formatted (type, valaddr, embedded_offset,
434 original_value, options, 0, stream);
c906108c
SS
435 break;
436 }
437 len = TYPE_NFIELDS (type);
438 val = unpack_long (type, valaddr + embedded_offset);
439 for (i = 0; i < len; i++)
440 {
441 QUIT;
442 if (val == TYPE_FIELD_BITPOS (type, i))
443 {
444 break;
445 }
446 }
447 if (i < len)
448 {
449 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
450 }
451 else
452 {
453 print_longest (stream, 'd', 0, val);
454 }
455 break;
456
4f2aea11 457 case TYPE_CODE_FLAGS:
79a45b7d 458 if (options->format)
ab2188aa
PA
459 val_print_scalar_formatted (type, valaddr, embedded_offset,
460 original_value, options, 0, stream);
4f2aea11 461 else
aff410f1
MS
462 val_print_type_code_flags (type, valaddr + embedded_offset,
463 stream);
4f2aea11
MK
464 break;
465
c906108c 466 case TYPE_CODE_FUNC:
0d5de010 467 case TYPE_CODE_METHOD:
79a45b7d 468 if (options->format)
c906108c 469 {
ab2188aa
PA
470 val_print_scalar_formatted (type, valaddr, embedded_offset,
471 original_value, options, 0, stream);
c906108c
SS
472 break;
473 }
aff410f1
MS
474 /* FIXME, we should consider, at least for ANSI C language,
475 eliminating the distinction made between FUNCs and POINTERs
476 to FUNCs. */
c906108c
SS
477 fprintf_filtered (stream, "{");
478 type_print (type, "", stream, -1);
479 fprintf_filtered (stream, "} ");
480 /* Try to print what function it points to, and its address. */
5af949e3 481 print_address_demangle (gdbarch, address, stream, demangle);
c906108c
SS
482 break;
483
484 case TYPE_CODE_BOOL:
79a45b7d
TT
485 if (options->format || options->output_format)
486 {
487 struct value_print_options opts = *options;
488 opts.format = (options->format ? options->format
489 : options->output_format);
ab2188aa
PA
490 val_print_scalar_formatted (type, valaddr, embedded_offset,
491 original_value, &opts, 0, stream);
79a45b7d 492 }
c906108c
SS
493 else
494 {
495 val = unpack_long (type, valaddr + embedded_offset);
496 if (val == 0)
497 fputs_filtered ("false", stream);
498 else if (val == 1)
499 fputs_filtered ("true", stream);
500 else
501 print_longest (stream, 'd', 0, val);
502 }
503 break;
504
505 case TYPE_CODE_RANGE:
506 /* FIXME: create_range_type does not set the unsigned bit in a
aff410f1
MS
507 range type (I think it probably should copy it from the
508 target type), so we won't print values which are too large to
c5aa993b 509 fit in a signed integer correctly. */
c906108c 510 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
aff410f1
MS
511 print with the target type, though, because the size of our
512 type and the target type might differ). */
c906108c
SS
513 /* FALLTHROUGH */
514
515 case TYPE_CODE_INT:
79a45b7d 516 if (options->format || options->output_format)
c906108c 517 {
79a45b7d 518 struct value_print_options opts = *options;
c5504eaf 519
79a45b7d
TT
520 opts.format = (options->format ? options->format
521 : options->output_format);
ab2188aa
PA
522 val_print_scalar_formatted (type, valaddr, embedded_offset,
523 original_value, &opts, 0, stream);
c906108c
SS
524 }
525 else
526 {
aff410f1
MS
527 val_print_type_code_int (type, valaddr + embedded_offset,
528 stream);
529 /* C and C++ has no single byte int type, char is used
530 instead. Since we don't know whether the value is really
531 intended to be used as an integer or a character, print
532 the character equivalent as well. */
96c07c5b 533 if (c_textual_element_type (unresolved_type, options->format))
c906108c
SS
534 {
535 fputs_filtered (" ", stream);
447b483c 536 LA_PRINT_CHAR (unpack_long (type, valaddr + embedded_offset),
6c7a06a3 537 unresolved_type, stream);
c906108c
SS
538 }
539 }
540 break;
541
542 case TYPE_CODE_CHAR:
79a45b7d 543 if (options->format || options->output_format)
c906108c 544 {
79a45b7d
TT
545 struct value_print_options opts = *options;
546 opts.format = (options->format ? options->format
547 : options->output_format);
ab2188aa
PA
548 val_print_scalar_formatted (type, valaddr, embedded_offset,
549 original_value, &opts, 0, stream);
c906108c
SS
550 }
551 else
552 {
96baa820
JM
553 val = unpack_long (type, valaddr + embedded_offset);
554 if (TYPE_UNSIGNED (type))
555 fprintf_filtered (stream, "%u", (unsigned int) val);
556 else
557 fprintf_filtered (stream, "%d", (int) val);
c906108c 558 fputs_filtered (" ", stream);
447b483c 559 LA_PRINT_CHAR (val, unresolved_type, stream);
c906108c
SS
560 }
561 break;
562
563 case TYPE_CODE_FLT:
79a45b7d 564 if (options->format)
c906108c 565 {
ab2188aa
PA
566 val_print_scalar_formatted (type, valaddr, embedded_offset,
567 original_value, options, 0, stream);
c906108c
SS
568 }
569 else
570 {
571 print_floating (valaddr + embedded_offset, type, stream);
572 }
573 break;
574
7678ef8f 575 case TYPE_CODE_DECFLOAT:
79a45b7d 576 if (options->format)
ab2188aa
PA
577 val_print_scalar_formatted (type, valaddr, embedded_offset,
578 original_value, options, 0, stream);
7678ef8f 579 else
aff410f1
MS
580 print_decimal_floating (valaddr + embedded_offset,
581 type, stream);
7678ef8f
TJB
582 break;
583
c906108c
SS
584 case TYPE_CODE_VOID:
585 fprintf_filtered (stream, "void");
586 break;
587
588 case TYPE_CODE_ERROR:
b00fdb78 589 fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
c906108c
SS
590 break;
591
592 case TYPE_CODE_UNDEF:
aff410f1
MS
593 /* This happens (without TYPE_FLAG_STUB set) on systems which
594 don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
595 "struct foo *bar" and no complete type for struct foo in that
596 file. */
3d263c1d 597 fprintf_filtered (stream, _("<incomplete type>"));
c906108c
SS
598 break;
599
fca9e603 600 case TYPE_CODE_COMPLEX:
79a45b7d 601 if (options->format)
ab2188aa
PA
602 val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
603 valaddr, embedded_offset,
604 original_value, options, 0, stream);
fca9e603 605 else
aff410f1
MS
606 print_floating (valaddr + embedded_offset,
607 TYPE_TARGET_TYPE (type),
fca9e603
DJ
608 stream);
609 fprintf_filtered (stream, " + ");
79a45b7d 610 if (options->format)
ab2188aa
PA
611 val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
612 valaddr,
613 embedded_offset
614 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
615 original_value,
616 options, 0, stream);
fca9e603
DJ
617 else
618 print_floating (valaddr + embedded_offset
619 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
620 TYPE_TARGET_TYPE (type),
621 stream);
622 fprintf_filtered (stream, " * I");
623 break;
624
c906108c 625 default:
aff410f1
MS
626 error (_("Invalid C/C++ type code %d in symbol table."),
627 TYPE_CODE (type));
c906108c
SS
628 }
629 gdb_flush (stream);
630 return (0);
631}
632\f
633int
79a45b7d
TT
634c_value_print (struct value *val, struct ui_file *stream,
635 const struct value_print_options *options)
c906108c 636{
6c7a06a3 637 struct type *type, *real_type, *val_type;
c906108c 638 int full, top, using_enc;
79a45b7d
TT
639 struct value_print_options opts = *options;
640
641 opts.deref_ref = 1;
c5aa993b 642
c906108c
SS
643 /* If it is a pointer, indicate what it points to.
644
645 Print type also if it is a reference.
646
647 C++: if it is a member pointer, we will take care
648 of that when we print it. */
88750304 649
6c7a06a3
TT
650 /* Preserve the original type before stripping typedefs. We prefer
651 to pass down the original type when possible, but for local
652 checks it is better to look past the typedefs. */
653 val_type = value_type (val);
654 type = check_typedef (val_type);
88750304
DJ
655
656 if (TYPE_CODE (type) == TYPE_CODE_PTR
657 || TYPE_CODE (type) == TYPE_CODE_REF)
c906108c
SS
658 {
659 /* Hack: remove (char *) for char strings. Their
ea37ba09 660 type is indicated by the quoted string anyway.
96c07c5b 661 (Don't use c_textual_element_type here; quoted strings
6c7a06a3
TT
662 are always exactly (char *), (wchar_t *), or the like. */
663 if (TYPE_CODE (val_type) == TYPE_CODE_PTR
664 && TYPE_NAME (val_type) == NULL
665 && TYPE_NAME (TYPE_TARGET_TYPE (val_type)) != NULL
aff410f1
MS
666 && (strcmp (TYPE_NAME (TYPE_TARGET_TYPE (val_type)),
667 "char") == 0
6c7a06a3 668 || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type)))))
c906108c 669 {
aff410f1 670 /* Print nothing. */
c906108c 671 }
79a45b7d
TT
672 else if (options->objectprint
673 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
c5aa993b 674 {
070ad9f0
DB
675
676 if (TYPE_CODE(type) == TYPE_CODE_REF)
677 {
678 /* Copy value, change to pointer, so we don't get an
aff410f1
MS
679 error about a non-pointer type in
680 value_rtti_target_type. */
6943961c 681 struct value *temparg;
070ad9f0 682 temparg=value_copy(val);
aff410f1
MS
683 deprecated_set_value_type
684 (temparg, lookup_pointer_type (TYPE_TARGET_TYPE (type)));
685 val = temparg;
070ad9f0 686 }
aff410f1 687 /* Pointer to class, check real type of object. */
c906108c 688 fprintf_filtered (stream, "(");
aff410f1
MS
689 real_type = value_rtti_target_type (val, &full,
690 &top, &using_enc);
c4093a6a 691 if (real_type)
c5aa993b 692 {
aff410f1 693 /* RTTI entry found. */
c4093a6a
JM
694 if (TYPE_CODE (type) == TYPE_CODE_PTR)
695 {
aff410f1
MS
696 /* Create a pointer type pointing to the real
697 type. */
c4093a6a
JM
698 type = lookup_pointer_type (real_type);
699 }
700 else
701 {
aff410f1
MS
702 /* Create a reference type referencing the real
703 type. */
c4093a6a
JM
704 type = lookup_reference_type (real_type);
705 }
aff410f1 706 /* JYG: Need to adjust pointer value. */
580688f3 707 val = value_from_pointer (type, value_as_address (val) - top);
070ad9f0 708
c4093a6a 709 /* Note: When we look up RTTI entries, we don't get any
aff410f1 710 information on const or volatile attributes. */
c4093a6a
JM
711 }
712 type_print (type, "", stream, -1);
c906108c 713 fprintf_filtered (stream, ") ");
6c7a06a3 714 val_type = type;
c5aa993b 715 }
c906108c
SS
716 else
717 {
c5aa993b 718 /* normal case */
c906108c 719 fprintf_filtered (stream, "(");
88750304 720 type_print (value_type (val), "", stream, -1);
c906108c
SS
721 fprintf_filtered (stream, ") ");
722 }
723 }
88750304 724
42be36b3
CT
725 if (!value_initialized (val))
726 fprintf_filtered (stream, " [uninitialized] ");
727
79a45b7d 728 if (options->objectprint && (TYPE_CODE (type) == TYPE_CODE_CLASS))
c906108c 729 {
aff410f1 730 /* Attempt to determine real type of object. */
c906108c 731 real_type = value_rtti_type (val, &full, &top, &using_enc);
c5aa993b
JM
732 if (real_type)
733 {
aff410f1
MS
734 /* We have RTTI information, so use it. */
735 val = value_full_object (val, real_type,
736 full, top, using_enc);
c5aa993b
JM
737 fprintf_filtered (stream, "(%s%s) ",
738 TYPE_NAME (real_type),
3d263c1d 739 full ? "" : _(" [incomplete object]"));
aff410f1
MS
740 /* Print out object: enclosing type is same as real_type if
741 full. */
46615f07 742 return val_print (value_enclosing_type (val),
0e03807e 743 value_contents_for_printing (val), 0,
42ae5230 744 value_address (val), stream, 0,
0e03807e 745 val, &opts, current_language);
aff410f1
MS
746 /* Note: When we look up RTTI entries, we don't get any
747 information on const or volatile attributes. */
c5aa993b 748 }
88750304 749 else if (type != check_typedef (value_enclosing_type (val)))
c5aa993b 750 {
aff410f1 751 /* No RTTI information, so let's do our best. */
c5aa993b 752 fprintf_filtered (stream, "(%s ?) ",
4754a64e 753 TYPE_NAME (value_enclosing_type (val)));
46615f07 754 return val_print (value_enclosing_type (val),
0e03807e 755 value_contents_for_printing (val), 0,
42ae5230 756 value_address (val), stream, 0,
0e03807e 757 val, &opts, current_language);
c5aa993b 758 }
aff410f1 759 /* Otherwise, we end up at the return outside this "if". */
c906108c 760 }
c5aa993b 761
0e03807e 762 return val_print (val_type, value_contents_for_printing (val),
13c3b5f5 763 value_embedded_offset (val),
42ae5230 764 value_address (val),
0e03807e
TT
765 stream, 0,
766 val, &opts, current_language);
c906108c 767}
This page took 0.810086 seconds and 4 git commands to generate.