* d10v-dis.c: Fix formatting.
[deliverable/binutils-gdb.git] / gdb / ch-valprint.c
CommitLineData
c906108c 1/* Support for printing Chill values for GDB, the GNU debugger.
b6ba6518
KB
2 Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 2000
c906108c
SS
4 Free Software Foundation, Inc.
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include "defs.h"
24#include "obstack.h"
25#include "symtab.h"
26#include "gdbtypes.h"
27#include "valprint.h"
28#include "expression.h"
29#include "value.h"
30#include "language.h"
31#include "demangle.h"
c5aa993b 32#include "c-lang.h" /* For c_val_print */
c906108c
SS
33#include "typeprint.h"
34#include "ch-lang.h"
35#include "annotate.h"
36
d9fcf2fb
JM
37static void chill_print_value_fields (struct type *, char *,
38 struct ui_file *, int, int,
39 enum val_prettyprint, struct type **);
c906108c 40
d9fcf2fb
JM
41static void chill_print_type_scalar (struct type *, LONGEST,
42 struct ui_file *);
c906108c 43
d9fcf2fb
JM
44static void chill_val_print_array_elements (struct type *, char *,
45 CORE_ADDR, struct ui_file *,
46 int, int, int,
47 enum val_prettyprint);
c906108c 48\f
c5aa993b 49
c906108c
SS
50/* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
51 Used to print data from type structures in a specified type. For example,
52 array bounds may be characters or booleans in some languages, and this
53 allows the ranges to be printed in their "natural" form rather than as
54 decimal integer values. */
55
56static void
fba45db2 57chill_print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
c906108c
SS
58{
59 switch (TYPE_CODE (type))
60 {
61 case TYPE_CODE_RANGE:
62 if (TYPE_TARGET_TYPE (type))
63 {
64 chill_print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
65 return;
66 }
67 break;
68 case TYPE_CODE_UNDEF:
69 case TYPE_CODE_PTR:
70 case TYPE_CODE_ARRAY:
71 case TYPE_CODE_STRUCT:
72 case TYPE_CODE_UNION:
73 case TYPE_CODE_ENUM:
74 case TYPE_CODE_FUNC:
75 case TYPE_CODE_INT:
76 case TYPE_CODE_FLT:
77 case TYPE_CODE_VOID:
78 case TYPE_CODE_SET:
79 case TYPE_CODE_STRING:
80 case TYPE_CODE_BITSTRING:
81 case TYPE_CODE_ERROR:
82 case TYPE_CODE_MEMBER:
83 case TYPE_CODE_METHOD:
84 case TYPE_CODE_REF:
85 case TYPE_CODE_CHAR:
86 case TYPE_CODE_BOOL:
87 case TYPE_CODE_COMPLEX:
88 case TYPE_CODE_TYPEDEF:
89 default:
90 break;
91 }
92 print_type_scalar (type, val, stream);
93}
94\f
95/* Print the elements of an array.
96 Similar to val_print_array_elements, but prints
97 element indexes (in Chill syntax). */
98
99static void
fba45db2
KB
100chill_val_print_array_elements (struct type *type, char *valaddr,
101 CORE_ADDR address, struct ui_file *stream,
102 int format, int deref_ref, int recurse,
103 enum val_prettyprint pretty)
c906108c
SS
104{
105 unsigned int i = 0;
106 unsigned int things_printed = 0;
107 unsigned len;
108 struct type *elttype;
109 struct type *range_type = TYPE_FIELD_TYPE (type, 0);
110 struct type *index_type = TYPE_TARGET_TYPE (range_type);
111 unsigned eltlen;
112 /* Position of the array element we are examining to see
113 whether it is repeated. */
114 unsigned int rep1;
115 /* Number of repetitions we have detected so far. */
116 unsigned int reps;
c5aa993b
JM
117 LONGEST low_bound = TYPE_FIELD_BITPOS (range_type, 0);
118
c906108c
SS
119 elttype = check_typedef (TYPE_TARGET_TYPE (type));
120 eltlen = TYPE_LENGTH (elttype);
121 len = TYPE_LENGTH (type) / eltlen;
122
123 annotate_array_section_begin (i, elttype);
124
125 for (; i < len && things_printed < print_max; i++)
126 {
127 if (i != 0)
128 {
129 if (prettyprint_arrays)
130 {
131 fprintf_filtered (stream, ",\n");
132 print_spaces_filtered (2 + 2 * recurse, stream);
133 }
134 else
135 {
136 fprintf_filtered (stream, ", ");
137 }
138 }
139 wrap_here (n_spaces (2 + 2 * recurse));
140
141 rep1 = i + 1;
142 reps = 1;
c5aa993b 143 while ((rep1 < len) &&
c906108c
SS
144 !memcmp (valaddr + i * eltlen, valaddr + rep1 * eltlen, eltlen))
145 {
146 ++reps;
147 ++rep1;
148 }
149
150 fputs_filtered ("(", stream);
151 chill_print_type_scalar (index_type, low_bound + i, stream);
152 if (reps > 1)
153 {
154 fputs_filtered (":", stream);
155 chill_print_type_scalar (index_type, low_bound + i + reps - 1,
156 stream);
157 fputs_filtered ("): ", stream);
158 val_print (elttype, valaddr + i * eltlen, 0, 0, stream, format,
159 deref_ref, recurse + 1, pretty);
160
161 i = rep1 - 1;
162 things_printed += 1;
163 }
164 else
165 {
166 fputs_filtered ("): ", stream);
167 val_print (elttype, valaddr + i * eltlen, 0, 0, stream, format,
168 deref_ref, recurse + 1, pretty);
169 annotate_elt ();
170 things_printed++;
171 }
172 }
173 annotate_array_section_end ();
174 if (i < len)
175 {
176 fprintf_filtered (stream, "...");
177 }
178}
179
180/* Print data of type TYPE located at VALADDR (within GDB), which came from
181 the inferior at address ADDRESS, onto stdio stream STREAM according to
182 FORMAT (a letter or 0 for natural format). The data at VALADDR is in
183 target byte order.
184
185 If the data are a string pointer, returns the number of string characters
186 printed.
187
188 If DEREF_REF is nonzero, then dereference references, otherwise just print
189 them like pointers.
190
191 The PRETTY parameter controls prettyprinting. */
192
193int
fba45db2
KB
194chill_val_print (struct type *type, char *valaddr, int embedded_offset,
195 CORE_ADDR address, struct ui_file *stream, int format,
196 int deref_ref, int recurse, enum val_prettyprint pretty)
c906108c
SS
197{
198 LONGEST val;
199 unsigned int i = 0; /* Number of characters printed. */
200 struct type *elttype;
201 CORE_ADDR addr;
202
203 CHECK_TYPEDEF (type);
204
205 switch (TYPE_CODE (type))
206 {
207 case TYPE_CODE_ARRAY:
208 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
209 {
210 if (prettyprint_arrays)
211 {
212 print_spaces_filtered (2 + 2 * recurse, stream);
213 }
214 fprintf_filtered (stream, "[");
215 chill_val_print_array_elements (type, valaddr, address, stream,
c5aa993b 216 format, deref_ref, recurse, pretty);
c906108c
SS
217 fprintf_filtered (stream, "]");
218 }
219 else
220 {
221 error ("unimplemented in chill_val_print; unspecified array length");
222 }
223 break;
224
225 case TYPE_CODE_INT:
226 format = format ? format : output_format;
227 if (format)
228 {
229 print_scalar_formatted (valaddr, type, format, 0, stream);
230 }
231 else
232 {
233 val_print_type_code_int (type, valaddr, stream);
234 }
235 break;
236
237 case TYPE_CODE_CHAR:
238 format = format ? format : output_format;
239 if (format)
240 {
241 print_scalar_formatted (valaddr, type, format, 0, stream);
242 }
243 else
244 {
245 LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr),
246 stream);
247 }
248 break;
249
250 case TYPE_CODE_FLT:
251 if (format)
252 {
253 print_scalar_formatted (valaddr, type, format, 0, stream);
254 }
255 else
256 {
257 print_floating (valaddr, type, stream);
258 }
259 break;
260
261 case TYPE_CODE_BOOL:
262 format = format ? format : output_format;
263 if (format)
264 {
265 print_scalar_formatted (valaddr, type, format, 0, stream);
266 }
267 else
268 {
269 /* FIXME: Why is this using builtin_type_chill_bool not type? */
270 val = unpack_long (builtin_type_chill_bool, valaddr);
271 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
272 }
273 break;
274
275 case TYPE_CODE_UNDEF:
276 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
c5aa993b
JM
277 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
278 and no complete type for struct foo in that file. */
c906108c
SS
279 fprintf_filtered (stream, "<incomplete type>");
280 break;
281
282 case TYPE_CODE_PTR:
283 if (format && format != 's')
284 {
285 print_scalar_formatted (valaddr, type, format, 0, stream);
286 break;
287 }
288 addr = unpack_pointer (type, valaddr);
289 elttype = check_typedef (TYPE_TARGET_TYPE (type));
290
291 /* We assume a NULL pointer is all zeros ... */
292 if (addr == 0)
293 {
294 fputs_filtered ("NULL", stream);
295 return 0;
296 }
c5aa993b 297
c906108c
SS
298 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
299 {
300 /* Try to print what function it points to. */
301 print_address_demangle (addr, stream, demangle);
302 /* Return value is irrelevant except for string pointers. */
303 return (0);
304 }
305 if (addressprint && format != 's')
306 {
307 print_address_numeric (addr, 1, stream);
308 }
c5aa993b 309
c906108c 310 /* For a pointer to char or unsigned char, also print the string
c5aa993b 311 pointed to, unless pointer is null. */
c906108c
SS
312 if (TYPE_LENGTH (elttype) == 1
313 && TYPE_CODE (elttype) == TYPE_CODE_CHAR
314 && (format == 0 || format == 's')
315 && addr != 0
c5aa993b
JM
316 && /* If print_max is UINT_MAX, the alloca below will fail.
317 In that case don't try to print the string. */
c906108c
SS
318 print_max < UINT_MAX)
319 i = val_print_string (addr, -1, TYPE_LENGTH (elttype), stream);
320
321 /* Return number of characters printed, plus one for the
c5aa993b 322 terminating null if we have "reached the end". */
c906108c
SS
323 return (i + (print_max && i != print_max));
324 break;
325
326 case TYPE_CODE_STRING:
327 i = TYPE_LENGTH (type);
328 LA_PRINT_STRING (stream, valaddr, i, 1, 0);
329 /* Return number of characters printed, plus one for the terminating
c5aa993b 330 null if we have "reached the end". */
c906108c
SS
331 return (i + (print_max && i != print_max));
332 break;
333
334 case TYPE_CODE_BITSTRING:
335 case TYPE_CODE_SET:
336 elttype = TYPE_INDEX_TYPE (type);
337 CHECK_TYPEDEF (elttype);
338 if (TYPE_FLAGS (elttype) & TYPE_FLAG_STUB)
339 {
340 fprintf_filtered (stream, "<incomplete type>");
341 gdb_flush (stream);
342 break;
343 }
344 {
345 struct type *range = elttype;
346 LONGEST low_bound, high_bound;
347 int i;
348 int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
349 int need_comma = 0;
350
351 if (is_bitstring)
352 fputs_filtered ("B'", stream);
353 else
354 fputs_filtered ("[", stream);
355
356 i = get_discrete_bounds (range, &low_bound, &high_bound);
357 maybe_bad_bstring:
358 if (i < 0)
359 {
360 fputs_filtered ("<error value>", stream);
361 goto done;
362 }
363
364 for (i = low_bound; i <= high_bound; i++)
365 {
366 int element = value_bit_index (type, valaddr, i);
367 if (element < 0)
368 {
369 i = element;
370 goto maybe_bad_bstring;
371 }
372 if (is_bitstring)
373 fprintf_filtered (stream, "%d", element);
374 else if (element)
375 {
376 if (need_comma)
377 fputs_filtered (", ", stream);
378 chill_print_type_scalar (range, (LONGEST) i, stream);
379 need_comma = 1;
380
381 /* Look for a continuous range of true elements. */
c5aa993b 382 if (i + 1 <= high_bound && value_bit_index (type, valaddr, ++i))
c906108c 383 {
c5aa993b 384 int j = i; /* j is the upper bound so far of the range */
c906108c 385 fputs_filtered (":", stream);
c5aa993b 386 while (i + 1 <= high_bound
c906108c
SS
387 && value_bit_index (type, valaddr, ++i))
388 j = i;
389 chill_print_type_scalar (range, (LONGEST) j, stream);
390 }
391 }
392 }
393 done:
394 if (is_bitstring)
395 fputs_filtered ("'", stream);
396 else
397 fputs_filtered ("]", stream);
398 }
399 break;
400
401 case TYPE_CODE_STRUCT:
402 if (chill_varying_type (type))
403 {
404 struct type *inner = check_typedef (TYPE_FIELD_TYPE (type, 1));
405 long length = unpack_long (TYPE_FIELD_TYPE (type, 0), valaddr);
406 char *data_addr = valaddr + TYPE_FIELD_BITPOS (type, 1) / 8;
c5aa993b 407
c906108c
SS
408 switch (TYPE_CODE (inner))
409 {
410 case TYPE_CODE_STRING:
411 if (length > TYPE_LENGTH (type) - 2)
412 {
413 fprintf_filtered (stream,
c5aa993b 414 "<dynamic length %ld > static length %d> *invalid*",
c906108c
SS
415 length, TYPE_LENGTH (type));
416
417 /* Don't print the string; doing so might produce a
418 segfault. */
419 return length;
420 }
421 LA_PRINT_STRING (stream, data_addr, length, 1, 0);
422 return length;
423 default:
424 break;
425 }
426 }
427 chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
428 0);
429 break;
430
431 case TYPE_CODE_REF:
432 if (addressprint)
c5aa993b 433 {
c906108c
SS
434 fprintf_filtered (stream, "LOC(");
435 print_address_numeric
436 (extract_address (valaddr, TARGET_PTR_BIT / HOST_CHAR_BIT),
437 1,
438 stream);
439 fprintf_filtered (stream, ")");
440 if (deref_ref)
441 fputs_filtered (": ", stream);
c5aa993b 442 }
c906108c
SS
443 /* De-reference the reference. */
444 if (deref_ref)
445 {
446 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_UNDEF)
447 {
448 value_ptr deref_val =
c5aa993b
JM
449 value_at
450 (TYPE_TARGET_TYPE (type),
451 unpack_pointer (lookup_pointer_type (builtin_type_void),
452 valaddr),
453 NULL);
c906108c
SS
454 val_print (VALUE_TYPE (deref_val),
455 VALUE_CONTENTS (deref_val),
c5aa993b 456 0,
c906108c
SS
457 VALUE_ADDRESS (deref_val), stream, format,
458 deref_ref, recurse + 1, pretty);
459 }
460 else
461 fputs_filtered ("???", stream);
462 }
463 break;
464
465 case TYPE_CODE_ENUM:
466 c_val_print (type, valaddr, 0, address, stream, format,
467 deref_ref, recurse, pretty);
468 break;
469
470 case TYPE_CODE_RANGE:
471 if (TYPE_TARGET_TYPE (type))
472 chill_val_print (TYPE_TARGET_TYPE (type), valaddr, 0, address, stream,
473 format, deref_ref, recurse, pretty);
474 break;
475
476 case TYPE_CODE_MEMBER:
477 case TYPE_CODE_UNION:
478 case TYPE_CODE_FUNC:
479 case TYPE_CODE_VOID:
480 case TYPE_CODE_ERROR:
481 default:
482 /* Let's defer printing to the C printer, rather than
c5aa993b 483 print an error message. FIXME! */
c906108c
SS
484 c_val_print (type, valaddr, 0, address, stream, format,
485 deref_ref, recurse, pretty);
486 }
487 gdb_flush (stream);
488 return (0);
489}
490
491/* Mutually recursive subroutines of cplus_print_value and c_val_print to
492 print out a structure's fields: cp_print_value_fields and cplus_print_value.
493
494 TYPE, VALADDR, STREAM, RECURSE, and PRETTY have the
495 same meanings as in cplus_print_value and c_val_print.
496
497 DONT_PRINT is an array of baseclass types that we
498 should not print, or zero if called from top level. */
499
500static void
fba45db2
KB
501chill_print_value_fields (struct type *type, char *valaddr,
502 struct ui_file *stream, int format, int recurse,
503 enum val_prettyprint pretty, struct type **dont_print)
c906108c
SS
504{
505 int i, len;
506 int fields_seen = 0;
507
508 CHECK_TYPEDEF (type);
509
510 fprintf_filtered (stream, "[");
511 len = TYPE_NFIELDS (type);
512 if (len == 0)
513 {
514 fprintf_filtered (stream, "<No data fields>");
515 }
516 else
517 {
518 for (i = 0; i < len; i++)
519 {
520 if (fields_seen)
521 {
522 fprintf_filtered (stream, ", ");
523 }
524 fields_seen = 1;
525 if (pretty)
526 {
527 fprintf_filtered (stream, "\n");
528 print_spaces_filtered (2 + 2 * recurse, stream);
529 }
c5aa993b 530 else
c906108c
SS
531 {
532 wrap_here (n_spaces (2 + 2 * recurse));
533 }
534 fputs_filtered (".", stream);
535 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
536 language_chill, DMGL_NO_OPTS);
537 fputs_filtered (": ", stream);
538 if (TYPE_FIELD_PACKED (type, i))
539 {
540 value_ptr v;
541
542 /* Bitfields require special handling, especially due to byte
c5aa993b 543 order problems. */
c906108c 544 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
c5aa993b 545 unpack_field_as_long (type, valaddr, i));
c906108c
SS
546
547 chill_val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0, 0,
548 stream, format, 0, recurse + 1, pretty);
549 }
550 else
551 {
c5aa993b 552 chill_val_print (TYPE_FIELD_TYPE (type, i),
c906108c
SS
553 valaddr + TYPE_FIELD_BITPOS (type, i) / 8, 0,
554 0, stream, format, 0, recurse + 1, pretty);
555 }
556 }
557 if (pretty)
558 {
559 fprintf_filtered (stream, "\n");
560 print_spaces_filtered (2 * recurse, stream);
561 }
562 }
563 fprintf_filtered (stream, "]");
564}
565\f
566int
fba45db2
KB
567chill_value_print (value_ptr val, struct ui_file *stream, int format,
568 enum val_prettyprint pretty)
c906108c
SS
569{
570 struct type *type = VALUE_TYPE (val);
c5aa993b 571 struct type *real_type = check_typedef (type);
c906108c
SS
572
573 /* If it is a pointer, indicate what it points to.
574
575 Print type also if it is a reference. */
576
577 if (TYPE_CODE (real_type) == TYPE_CODE_PTR ||
578 TYPE_CODE (real_type) == TYPE_CODE_REF)
579 {
580 char *valaddr = VALUE_CONTENTS (val);
581 CORE_ADDR addr = unpack_pointer (type, valaddr);
582 if (TYPE_CODE (type) != TYPE_CODE_PTR || addr != 0)
583 {
584 int i;
585 char *name = TYPE_NAME (type);
586 if (name)
587 fputs_filtered (name, stream);
588 else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)
589 fputs_filtered ("PTR", stream);
590 else
591 {
592 fprintf_filtered (stream, "(");
593 type_print (type, "", stream, -1);
594 fprintf_filtered (stream, ")");
595 }
596 fprintf_filtered (stream, "(");
597 i = val_print (type, valaddr, 0, VALUE_ADDRESS (val),
598 stream, format, 1, 0, pretty);
599 fprintf_filtered (stream, ")");
600 return i;
601 }
602 }
603 return (val_print (type, VALUE_CONTENTS (val), 0,
604 VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
605}
This page took 0.118874 seconds and 4 git commands to generate.