]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/c-valprint.c
* ldmain.c (warning_callback, warning_find_reloc): Prepend
[thirdparty/binutils-gdb.git] / gdb / c-valprint.c
CommitLineData
c906108c 1/* Support for printing C values for GDB, the GNU debugger.
1bac305b
AC
2
3 Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
4754a64e
AC
4 1997, 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation,
5 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
11 the Free Software Foundation; either version 2 of the License, or
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
JM
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
c906108c
SS
23
24#include "defs.h"
309367d4 25#include "gdb_string.h"
c906108c
SS
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "expression.h"
29#include "value.h"
c906108c
SS
30#include "valprint.h"
31#include "language.h"
32#include "c-lang.h"
015a42b4 33#include "cp-abi.h"
e2d0e7eb 34#include "target.h"
c906108c 35\f
c5aa993b 36
6e778545
PS
37/* Print function pointer with inferior address ADDRESS onto stdio
38 stream STREAM. */
39
40static void
41print_function_pointer_address (CORE_ADDR address, struct ui_file *stream)
42{
e2d0e7eb
AC
43 CORE_ADDR func_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
44 address,
45 &current_target);
6e778545
PS
46
47 /* If the function pointer is represented by a description, print the
48 address of the description. */
49 if (addressprint && func_addr != address)
50 {
51 fputs_filtered ("@", stream);
52 print_address_numeric (address, 1, stream);
53 fputs_filtered (": ", stream);
54 }
55 print_address_demangle (func_addr, stream, demangle);
56}
57
58
c906108c
SS
59/* Print data of type TYPE located at VALADDR (within GDB), which came from
60 the inferior at address ADDRESS, onto stdio stream STREAM according to
61 FORMAT (a letter or 0 for natural format). The data at VALADDR is in
62 target byte order.
63
64 If the data are a string pointer, returns the number of string characters
65 printed.
66
67 If DEREF_REF is nonzero, then dereference references, otherwise just print
68 them like pointers.
69
70 The PRETTY parameter controls prettyprinting. */
71
72int
a2bd3dcd 73c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
fba45db2
KB
74 CORE_ADDR address, struct ui_file *stream, int format,
75 int deref_ref, int recurse, enum val_prettyprint pretty)
c906108c 76{
52f0bd74 77 unsigned int i = 0; /* Number of characters printed */
c906108c
SS
78 unsigned len;
79 struct type *elttype;
80 unsigned eltlen;
81 LONGEST val;
82 CORE_ADDR addr;
83
84 CHECK_TYPEDEF (type);
85 switch (TYPE_CODE (type))
86 {
87 case TYPE_CODE_ARRAY:
88 elttype = check_typedef (TYPE_TARGET_TYPE (type));
89 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
90 {
91 eltlen = TYPE_LENGTH (elttype);
92 len = TYPE_LENGTH (type) / eltlen;
93 if (prettyprint_arrays)
94 {
95 print_spaces_filtered (2 + 2 * recurse, stream);
96 }
97 /* For an array of chars, print with string syntax. */
98 if (eltlen == 1 &&
99 ((TYPE_CODE (elttype) == TYPE_CODE_INT)
100 || ((current_language->la_language == language_m2)
101 && (TYPE_CODE (elttype) == TYPE_CODE_CHAR)))
102 && (format == 0 || format == 's'))
103 {
104 /* If requested, look for the first null char and only print
c5aa993b 105 elements up to it. */
c906108c
SS
106 if (stop_print_at_null)
107 {
745b8ca0 108 unsigned int temp_len;
c5aa993b 109
c906108c
SS
110 /* Look for a NULL char. */
111 for (temp_len = 0;
112 (valaddr + embedded_offset)[temp_len]
113 && temp_len < len && temp_len < print_max;
114 temp_len++);
115 len = temp_len;
116 }
c5aa993b 117
c906108c
SS
118 LA_PRINT_STRING (stream, valaddr + embedded_offset, len, eltlen, 0);
119 i = len;
120 }
121 else
122 {
123 fprintf_filtered (stream, "{");
124 /* If this is a virtual function table, print the 0th
c5aa993b 125 entry specially, and the rest of the members normally. */
c906108c
SS
126 if (cp_is_vtbl_ptr_type (elttype))
127 {
128 i = 1;
3d263c1d 129 fprintf_filtered (stream, _("%d vtable entries"), len - 1);
c906108c
SS
130 }
131 else
132 {
133 i = 0;
134 }
135 val_print_array_elements (type, valaddr + embedded_offset, address, stream,
c5aa993b 136 format, deref_ref, recurse, pretty, i);
c906108c
SS
137 fprintf_filtered (stream, "}");
138 }
139 break;
140 }
141 /* Array of unspecified length: treat like pointer to first elt. */
142 addr = address;
143 goto print_unpacked_pointer;
144
145 case TYPE_CODE_PTR:
146 if (format && format != 's')
147 {
148 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
149 break;
150 }
c5aa993b 151 if (vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 152 {
c5aa993b 153 /* Print the unmangled name if desired. */
c906108c
SS
154 /* Print vtable entry - we only get here if we ARE using
155 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
4478b372
JB
156 CORE_ADDR addr
157 = extract_typed_address (valaddr + embedded_offset, type);
6e778545 158 print_function_pointer_address (addr, stream);
c906108c
SS
159 break;
160 }
161 elttype = check_typedef (TYPE_TARGET_TYPE (type));
162 if (TYPE_CODE (elttype) == TYPE_CODE_METHOD)
163 {
164 cp_print_class_method (valaddr + embedded_offset, type, stream);
165 }
166 else if (TYPE_CODE (elttype) == TYPE_CODE_MEMBER)
167 {
168 cp_print_class_member (valaddr + embedded_offset,
169 TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (type)),
170 stream, "&");
171 }
172 else
173 {
174 addr = unpack_pointer (type, valaddr + embedded_offset);
175 print_unpacked_pointer:
c906108c
SS
176
177 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
178 {
179 /* Try to print what function it points to. */
6e778545 180 print_function_pointer_address (addr, stream);
c906108c
SS
181 /* Return value is irrelevant except for string pointers. */
182 return (0);
183 }
184
185 if (addressprint && format != 's')
186 {
187 print_address_numeric (addr, 1, stream);
188 }
189
190 /* For a pointer to char or unsigned char, also print the string
191 pointed to, unless pointer is null. */
192 /* FIXME: need to handle wchar_t here... */
193
194 if (TYPE_LENGTH (elttype) == 1
195 && TYPE_CODE (elttype) == TYPE_CODE_INT
196 && (format == 0 || format == 's')
197 && addr != 0)
198 {
199 i = val_print_string (addr, -1, TYPE_LENGTH (elttype), stream);
200 }
c5aa993b
JM
201 else if (cp_is_vtbl_member (type))
202 {
c906108c
SS
203 /* print vtbl's nicely */
204 CORE_ADDR vt_address = unpack_pointer (type, valaddr + embedded_offset);
205
206 struct minimal_symbol *msymbol =
c5aa993b 207 lookup_minimal_symbol_by_pc (vt_address);
c906108c
SS
208 if ((msymbol != NULL) &&
209 (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
210 {
211 fputs_filtered (" <", stream);
de5ad195 212 fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
c906108c
SS
213 fputs_filtered (">", stream);
214 }
215 if (vt_address && vtblprint)
c5aa993b 216 {
6943961c 217 struct value *vt_val;
c5aa993b
JM
218 struct symbol *wsym = (struct symbol *) NULL;
219 struct type *wtype;
c5aa993b 220 struct block *block = (struct block *) NULL;
c906108c
SS
221 int is_this_fld;
222
223 if (msymbol != NULL)
22abf04a 224 wsym = lookup_symbol (DEPRECATED_SYMBOL_NAME (msymbol), block,
cdef89d0 225 VAR_DOMAIN, &is_this_fld, NULL);
c5aa993b 226
c906108c
SS
227 if (wsym)
228 {
c5aa993b 229 wtype = SYMBOL_TYPE (wsym);
c906108c
SS
230 }
231 else
232 {
c5aa993b 233 wtype = TYPE_TARGET_TYPE (type);
c906108c 234 }
00a4c844 235 vt_val = value_at (wtype, vt_address);
0fd88904 236 val_print (value_type (vt_val), value_contents (vt_val), 0,
c906108c
SS
237 VALUE_ADDRESS (vt_val), stream, format,
238 deref_ref, recurse + 1, pretty);
239 if (pretty)
240 {
241 fprintf_filtered (stream, "\n");
242 print_spaces_filtered (2 + 2 * recurse, stream);
243 }
c5aa993b
JM
244 }
245 }
c906108c
SS
246
247 /* Return number of characters printed, including the terminating
248 '\0' if we reached the end. val_print_string takes care including
249 the terminating '\0' if necessary. */
250 return i;
251 }
252 break;
253
254 case TYPE_CODE_MEMBER:
3d263c1d 255 error (_("not implemented: member type in c_val_print"));
c906108c
SS
256 break;
257
258 case TYPE_CODE_REF:
259 elttype = check_typedef (TYPE_TARGET_TYPE (type));
260 if (TYPE_CODE (elttype) == TYPE_CODE_MEMBER)
c5aa993b 261 {
c906108c
SS
262 cp_print_class_member (valaddr + embedded_offset,
263 TYPE_DOMAIN_TYPE (elttype),
264 stream, "");
265 break;
266 }
267 if (addressprint)
c5aa993b 268 {
4478b372
JB
269 CORE_ADDR addr
270 = extract_typed_address (valaddr + embedded_offset, type);
c906108c 271 fprintf_filtered (stream, "@");
4478b372 272 print_address_numeric (addr, 1, stream);
c906108c
SS
273 if (deref_ref)
274 fputs_filtered (": ", stream);
c5aa993b 275 }
c906108c
SS
276 /* De-reference the reference. */
277 if (deref_ref)
278 {
279 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
280 {
6943961c 281 struct value *deref_val =
c5aa993b
JM
282 value_at
283 (TYPE_TARGET_TYPE (type),
284 unpack_pointer (lookup_pointer_type (builtin_type_void),
00a4c844 285 valaddr + embedded_offset));
df407dfe 286 val_print (value_type (deref_val),
0fd88904 287 value_contents (deref_val),
c5aa993b
JM
288 0,
289 VALUE_ADDRESS (deref_val),
290 stream,
291 format,
292 deref_ref,
293 recurse,
294 pretty);
c906108c
SS
295 }
296 else
297 fputs_filtered ("???", stream);
298 }
299 break;
300
301 case TYPE_CODE_UNION:
302 if (recurse && !unionprint)
303 {
304 fprintf_filtered (stream, "{...}");
305 break;
306 }
307 /* Fall through. */
308 case TYPE_CODE_STRUCT:
015a42b4 309 /*FIXME: Abstract this away */
c5aa993b 310 if (vtblprint && cp_is_vtbl_ptr_type (type))
c906108c 311 {
c5aa993b 312 /* Print the unmangled name if desired. */
c906108c
SS
313 /* Print vtable entry - we only get here if NOT using
314 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
4478b372
JB
315 int offset = (embedded_offset +
316 TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8);
317 struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
318 CORE_ADDR addr
319 = extract_typed_address (valaddr + offset, field_type);
320
6e778545 321 print_function_pointer_address (addr, stream);
c906108c
SS
322 }
323 else
324 cp_print_value_fields (type, type, valaddr, embedded_offset, address, stream, format,
325 recurse, pretty, NULL, 0);
326 break;
327
328 case TYPE_CODE_ENUM:
329 if (format)
330 {
331 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
332 break;
333 }
334 len = TYPE_NFIELDS (type);
335 val = unpack_long (type, valaddr + embedded_offset);
336 for (i = 0; i < len; i++)
337 {
338 QUIT;
339 if (val == TYPE_FIELD_BITPOS (type, i))
340 {
341 break;
342 }
343 }
344 if (i < len)
345 {
346 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
347 }
348 else
349 {
350 print_longest (stream, 'd', 0, val);
351 }
352 break;
353
354 case TYPE_CODE_FUNC:
355 if (format)
356 {
357 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
358 break;
359 }
360 /* FIXME, we should consider, at least for ANSI C language, eliminating
c5aa993b 361 the distinction made between FUNCs and POINTERs to FUNCs. */
c906108c
SS
362 fprintf_filtered (stream, "{");
363 type_print (type, "", stream, -1);
364 fprintf_filtered (stream, "} ");
365 /* Try to print what function it points to, and its address. */
366 print_address_demangle (address, stream, demangle);
367 break;
368
369 case TYPE_CODE_BOOL:
370 format = format ? format : output_format;
371 if (format)
372 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
373 else
374 {
375 val = unpack_long (type, valaddr + embedded_offset);
376 if (val == 0)
377 fputs_filtered ("false", stream);
378 else if (val == 1)
379 fputs_filtered ("true", stream);
380 else
381 print_longest (stream, 'd', 0, val);
382 }
383 break;
384
385 case TYPE_CODE_RANGE:
386 /* FIXME: create_range_type does not set the unsigned bit in a
c5aa993b
JM
387 range type (I think it probably should copy it from the target
388 type), so we won't print values which are too large to
389 fit in a signed integer correctly. */
c906108c 390 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
c5aa993b
JM
391 print with the target type, though, because the size of our type
392 and the target type might differ). */
c906108c
SS
393 /* FALLTHROUGH */
394
395 case TYPE_CODE_INT:
396 format = format ? format : output_format;
397 if (format)
398 {
399 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
400 }
401 else
402 {
403 val_print_type_code_int (type, valaddr + embedded_offset, stream);
404 /* C and C++ has no single byte int type, char is used instead.
405 Since we don't know whether the value is really intended to
406 be used as an integer or a character, print the character
407 equivalent as well. */
408 if (TYPE_LENGTH (type) == 1)
409 {
410 fputs_filtered (" ", stream);
411 LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr + embedded_offset),
412 stream);
413 }
414 }
415 break;
416
417 case TYPE_CODE_CHAR:
418 format = format ? format : output_format;
419 if (format)
420 {
421 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
422 }
423 else
424 {
96baa820
JM
425 val = unpack_long (type, valaddr + embedded_offset);
426 if (TYPE_UNSIGNED (type))
427 fprintf_filtered (stream, "%u", (unsigned int) val);
428 else
429 fprintf_filtered (stream, "%d", (int) val);
c906108c 430 fputs_filtered (" ", stream);
96baa820 431 LA_PRINT_CHAR ((unsigned char) val, stream);
c906108c
SS
432 }
433 break;
434
435 case TYPE_CODE_FLT:
436 if (format)
437 {
438 print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
439 }
440 else
441 {
442 print_floating (valaddr + embedded_offset, type, stream);
443 }
444 break;
445
446 case TYPE_CODE_METHOD:
acf5ed49 447 {
00a4c844 448 struct value *v = value_at (type, address);
0fd88904 449 cp_print_class_method (value_contents (value_addr (v)),
acf5ed49
DJ
450 lookup_pointer_type (type), stream);
451 break;
452 }
c906108c
SS
453
454 case TYPE_CODE_VOID:
455 fprintf_filtered (stream, "void");
456 break;
457
458 case TYPE_CODE_ERROR:
3d263c1d 459 fprintf_filtered (stream, _("<error type>"));
c906108c
SS
460 break;
461
462 case TYPE_CODE_UNDEF:
463 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
c5aa993b
JM
464 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
465 and no complete type for struct foo in that file. */
3d263c1d 466 fprintf_filtered (stream, _("<incomplete type>"));
c906108c
SS
467 break;
468
fca9e603
DJ
469 case TYPE_CODE_COMPLEX:
470 if (format)
471 print_scalar_formatted (valaddr + embedded_offset,
472 TYPE_TARGET_TYPE (type),
473 format, 0, stream);
474 else
475 print_floating (valaddr + embedded_offset, TYPE_TARGET_TYPE (type),
476 stream);
477 fprintf_filtered (stream, " + ");
478 if (format)
479 print_scalar_formatted (valaddr + embedded_offset
480 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
481 TYPE_TARGET_TYPE (type),
482 format, 0, stream);
483 else
484 print_floating (valaddr + embedded_offset
485 + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
486 TYPE_TARGET_TYPE (type),
487 stream);
488 fprintf_filtered (stream, " * I");
489 break;
490
c906108c 491 default:
3d263c1d 492 error (_("Invalid C/C++ type code %d in symbol table."), TYPE_CODE (type));
c906108c
SS
493 }
494 gdb_flush (stream);
495 return (0);
496}
497\f
498int
6943961c 499c_value_print (struct value *val, struct ui_file *stream, int format,
fba45db2 500 enum val_prettyprint pretty)
c906108c 501{
df407dfe 502 struct type *type = value_type (val);
c5aa993b 503 struct type *real_type;
c906108c 504 int full, top, using_enc;
c5aa993b 505
c906108c
SS
506 /* If it is a pointer, indicate what it points to.
507
508 Print type also if it is a reference.
509
510 C++: if it is a member pointer, we will take care
511 of that when we print it. */
512 if (TYPE_CODE (type) == TYPE_CODE_PTR ||
513 TYPE_CODE (type) == TYPE_CODE_REF)
514 {
515 /* Hack: remove (char *) for char strings. Their
c5aa993b 516 type is indicated by the quoted string anyway. */
c906108c
SS
517 if (TYPE_CODE (type) == TYPE_CODE_PTR &&
518 TYPE_NAME (type) == NULL &&
519 TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL &&
bde58177 520 strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0)
c906108c
SS
521 {
522 /* Print nothing */
523 }
524 else if (objectprint && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
c5aa993b 525 {
070ad9f0
DB
526
527 if (TYPE_CODE(type) == TYPE_CODE_REF)
528 {
529 /* Copy value, change to pointer, so we don't get an
530 * error about a non-pointer type in value_rtti_target_type
531 */
6943961c 532 struct value *temparg;
070ad9f0 533 temparg=value_copy(val);
04624583 534 deprecated_set_value_type (temparg, lookup_pointer_type (TYPE_TARGET_TYPE(type)));
070ad9f0
DB
535 val=temparg;
536 }
c5aa993b 537 /* Pointer to class, check real type of object */
c906108c 538 fprintf_filtered (stream, "(");
c4093a6a
JM
539 real_type = value_rtti_target_type (val, &full, &top, &using_enc);
540 if (real_type)
c5aa993b
JM
541 {
542 /* RTTI entry found */
c4093a6a
JM
543 if (TYPE_CODE (type) == TYPE_CODE_PTR)
544 {
545 /* create a pointer type pointing to the real type */
546 type = lookup_pointer_type (real_type);
547 }
548 else
549 {
550 /* create a reference type referencing the real type */
551 type = lookup_reference_type (real_type);
552 }
070ad9f0
DB
553 /* JYG: Need to adjust pointer value. */
554 val->aligner.contents[0] -= top;
555
c4093a6a
JM
556 /* Note: When we look up RTTI entries, we don't get any
557 information on const or volatile attributes */
558 }
559 type_print (type, "", stream, -1);
c906108c 560 fprintf_filtered (stream, ") ");
c5aa993b 561 }
c906108c
SS
562 else
563 {
c5aa993b 564 /* normal case */
c906108c
SS
565 fprintf_filtered (stream, "(");
566 type_print (type, "", stream, -1);
567 fprintf_filtered (stream, ") ");
568 }
569 }
df407dfe 570 if (objectprint && (TYPE_CODE (value_type (val)) == TYPE_CODE_CLASS))
c906108c
SS
571 {
572 /* Attempt to determine real type of object */
573 real_type = value_rtti_type (val, &full, &top, &using_enc);
c5aa993b
JM
574 if (real_type)
575 {
576 /* We have RTTI information, so use it */
577 val = value_full_object (val, real_type, full, top, using_enc);
578 fprintf_filtered (stream, "(%s%s) ",
579 TYPE_NAME (real_type),
3d263c1d 580 full ? "" : _(" [incomplete object]"));
c5aa993b 581 /* Print out object: enclosing type is same as real_type if full */
46615f07
AC
582 return val_print (value_enclosing_type (val),
583 value_contents_all (val), 0,
584 VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
c4093a6a
JM
585 /* Note: When we look up RTTI entries, we don't get any information on
586 const or volatile attributes */
c5aa993b 587 }
4754a64e 588 else if (type != value_enclosing_type (val))
c5aa993b
JM
589 {
590 /* No RTTI information, so let's do our best */
591 fprintf_filtered (stream, "(%s ?) ",
4754a64e 592 TYPE_NAME (value_enclosing_type (val)));
46615f07
AC
593 return val_print (value_enclosing_type (val),
594 value_contents_all (val), 0,
595 VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
c5aa993b 596 }
c906108c
SS
597 /* Otherwise, we end up at the return outside this "if" */
598 }
c5aa993b 599
46615f07 600 return val_print (type, value_contents_all (val),
13c3b5f5 601 value_embedded_offset (val),
df407dfe 602 VALUE_ADDRESS (val) + value_offset (val),
c906108c
SS
603 stream, format, 1, 0, pretty);
604}