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