1 /* Support for printing Modula 2 values for GDB, the GNU debugger.
3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1996, 1998, 2000, 2005, 2006,
4 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
6 This file is part of GDB.
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 3 of the License, or
11 (at your option) any later version.
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.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "expression.h"
28 #include "typeprint.h"
33 static int print_unpacked_pointer (struct type
*type
,
34 CORE_ADDR address
, CORE_ADDR addr
,
35 const struct value_print_options
*options
,
36 struct ui_file
*stream
);
38 m2_print_array_contents (struct type
*type
, const gdb_byte
*valaddr
,
39 int embedded_offset
, CORE_ADDR address
,
40 struct ui_file
*stream
, int recurse
,
41 const struct value
*val
,
42 const struct value_print_options
*options
,
46 /* Print function pointer with inferior address ADDRESS onto stdio
50 print_function_pointer_address (struct gdbarch
*gdbarch
, CORE_ADDR address
,
51 struct ui_file
*stream
, int addressprint
)
53 CORE_ADDR func_addr
= gdbarch_convert_from_func_ptr_addr (gdbarch
, address
,
56 /* If the function pointer is represented by a description, print the
57 address of the description. */
58 if (addressprint
&& func_addr
!= address
)
60 fputs_filtered ("@", stream
);
61 fputs_filtered (paddress (gdbarch
, address
), stream
);
62 fputs_filtered (": ", stream
);
64 print_address_demangle (gdbarch
, func_addr
, stream
, demangle
);
67 /* get_long_set_bounds - assigns the bounds of the long set to low and
71 get_long_set_bounds (struct type
*type
, LONGEST
*low
, LONGEST
*high
)
75 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
)
77 len
= TYPE_NFIELDS (type
);
78 i
= TYPE_N_BASECLASSES (type
);
81 *low
= TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, i
)));
82 *high
= TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
,
86 error (_("expecting long_set"));
91 m2_print_long_set (struct type
*type
, const gdb_byte
*valaddr
,
92 int embedded_offset
, CORE_ADDR address
,
93 struct ui_file
*stream
)
97 LONGEST previous_low
= 0;
98 LONGEST previous_high
= 0;
99 LONGEST i
, low_bound
, high_bound
;
100 LONGEST field_low
, field_high
;
106 CHECK_TYPEDEF (type
);
108 fprintf_filtered (stream
, "{");
109 len
= TYPE_NFIELDS (type
);
110 if (get_long_set_bounds (type
, &low_bound
, &high_bound
))
112 field
= TYPE_N_BASECLASSES (type
);
113 range
= TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, field
));
117 fprintf_filtered (stream
, " %s }", _("<unknown bounds of set>"));
121 target
= TYPE_TARGET_TYPE (range
);
123 if (get_discrete_bounds (range
, &field_low
, &field_high
) >= 0)
125 for (i
= low_bound
; i
<= high_bound
; i
++)
127 bitval
= value_bit_index (TYPE_FIELD_TYPE (type
, field
),
128 (TYPE_FIELD_BITPOS (type
, field
) / 8) +
129 valaddr
+ embedded_offset
, i
);
131 error (_("bit test is out of range"));
138 fprintf_filtered (stream
, ", ");
139 print_type_scalar (target
, i
, stream
);
150 if (previous_low
+1 < previous_high
)
151 fprintf_filtered (stream
, "..");
152 if (previous_low
+1 < previous_high
)
153 print_type_scalar (target
, previous_high
, stream
);
162 range
= TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, field
));
163 if (get_discrete_bounds (range
, &field_low
, &field_high
) < 0)
165 target
= TYPE_TARGET_TYPE (range
);
170 if (previous_low
+1 < previous_high
)
172 fprintf_filtered (stream
, "..");
173 print_type_scalar (target
, previous_high
, stream
);
177 fprintf_filtered (stream
, "}");
182 m2_print_unbounded_array (struct type
*type
, const gdb_byte
*valaddr
,
183 int embedded_offset
, CORE_ADDR address
,
184 struct ui_file
*stream
, int recurse
,
185 const struct value_print_options
*options
)
187 struct type
*content_type
;
192 CHECK_TYPEDEF (type
);
193 content_type
= TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type
, 0));
195 addr
= unpack_pointer (TYPE_FIELD_TYPE (type
, 0),
196 (TYPE_FIELD_BITPOS (type
, 0) / 8) +
197 valaddr
+ embedded_offset
);
199 val
= value_at_lazy (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type
, 0)),
201 len
= unpack_field_as_long (type
, valaddr
+ embedded_offset
, 1);
203 fprintf_filtered (stream
, "{");
204 m2_print_array_contents (value_type (val
), value_contents(val
),
205 value_embedded_offset (val
), addr
, stream
,
206 recurse
, NULL
, options
, len
);
207 fprintf_filtered (stream
, ", HIGH = %d}", (int) len
);
211 print_unpacked_pointer (struct type
*type
,
212 CORE_ADDR address
, CORE_ADDR addr
,
213 const struct value_print_options
*options
,
214 struct ui_file
*stream
)
216 struct gdbarch
*gdbarch
= get_type_arch (type
);
217 struct type
*elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
219 if (TYPE_CODE (elttype
) == TYPE_CODE_FUNC
)
221 /* Try to print what function it points to. */
222 print_function_pointer_address (gdbarch
, addr
, stream
,
223 options
->addressprint
);
224 /* Return value is irrelevant except for string pointers. */
228 if (options
->addressprint
&& options
->format
!= 's')
229 fputs_filtered (paddress (gdbarch
, address
), stream
);
231 /* For a pointer to char or unsigned char, also print the string
232 pointed to, unless pointer is null. */
234 if (TYPE_LENGTH (elttype
) == 1
235 && TYPE_CODE (elttype
) == TYPE_CODE_INT
236 && (options
->format
== 0 || options
->format
== 's')
238 return val_print_string (TYPE_TARGET_TYPE (type
), NULL
, addr
, -1,
245 print_variable_at_address (struct type
*type
,
246 const gdb_byte
*valaddr
,
247 struct ui_file
*stream
,
249 const struct value_print_options
*options
)
251 struct gdbarch
*gdbarch
= get_type_arch (type
);
252 CORE_ADDR addr
= unpack_pointer (type
, valaddr
);
253 struct type
*elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
255 fprintf_filtered (stream
, "[");
256 fputs_filtered (paddress (gdbarch
, addr
), stream
);
257 fprintf_filtered (stream
, "] : ");
259 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
261 struct value
*deref_val
=
262 value_at (TYPE_TARGET_TYPE (type
), unpack_pointer (type
, valaddr
));
264 common_val_print (deref_val
, stream
, recurse
, options
, current_language
);
267 fputs_filtered ("???", stream
);
271 /* m2_print_array_contents - prints out the contents of an
272 array up to a max_print values.
273 It prints arrays of char as a string
274 and all other data types as comma
278 m2_print_array_contents (struct type
*type
, const gdb_byte
*valaddr
,
279 int embedded_offset
, CORE_ADDR address
,
280 struct ui_file
*stream
, int recurse
,
281 const struct value
*val
,
282 const struct value_print_options
*options
,
286 CHECK_TYPEDEF (type
);
288 if (TYPE_LENGTH (type
) > 0)
290 eltlen
= TYPE_LENGTH (type
);
291 if (options
->prettyprint_arrays
)
292 print_spaces_filtered (2 + 2 * recurse
, stream
);
293 /* For an array of chars, print with string syntax. */
295 ((TYPE_CODE (type
) == TYPE_CODE_INT
)
296 || ((current_language
->la_language
== language_m2
)
297 && (TYPE_CODE (type
) == TYPE_CODE_CHAR
)))
298 && (options
->format
== 0 || options
->format
== 's'))
299 val_print_string (type
, NULL
, address
, len
+1, stream
, options
);
302 fprintf_filtered (stream
, "{");
303 val_print_array_elements (type
, valaddr
+ embedded_offset
,
304 address
, stream
, recurse
, val
,
306 fprintf_filtered (stream
, "}");
312 /* Print data of type TYPE located at VALADDR (within GDB), which came from
313 the inferior at address ADDRESS, onto stdio stream STREAM according to
314 OPTIONS. The data at VALADDR is in target byte order.
316 If the data are a string pointer, returns the number of string characters
320 m2_val_print (struct type
*type
, const gdb_byte
*valaddr
, int embedded_offset
,
321 CORE_ADDR address
, struct ui_file
*stream
, int recurse
,
322 const struct value
*original_value
,
323 const struct value_print_options
*options
)
325 struct gdbarch
*gdbarch
= get_type_arch (type
);
326 unsigned int i
= 0; /* Number of characters printed. */
328 struct type
*elttype
;
333 CHECK_TYPEDEF (type
);
334 switch (TYPE_CODE (type
))
336 case TYPE_CODE_ARRAY
:
337 if (TYPE_LENGTH (type
) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0)
339 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
340 eltlen
= TYPE_LENGTH (elttype
);
341 len
= TYPE_LENGTH (type
) / eltlen
;
342 if (options
->prettyprint_arrays
)
343 print_spaces_filtered (2 + 2 * recurse
, stream
);
344 /* For an array of chars, print with string syntax. */
346 ((TYPE_CODE (elttype
) == TYPE_CODE_INT
)
347 || ((current_language
->la_language
== language_m2
)
348 && (TYPE_CODE (elttype
) == TYPE_CODE_CHAR
)))
349 && (options
->format
== 0 || options
->format
== 's'))
351 /* If requested, look for the first null char and only print
352 elements up to it. */
353 if (options
->stop_print_at_null
)
355 unsigned int temp_len
;
357 /* Look for a NULL char. */
359 (valaddr
+ embedded_offset
)[temp_len
]
360 && temp_len
< len
&& temp_len
< options
->print_max
;
365 LA_PRINT_STRING (stream
, TYPE_TARGET_TYPE (type
),
366 valaddr
+ embedded_offset
, len
, NULL
,
372 fprintf_filtered (stream
, "{");
373 val_print_array_elements (type
, valaddr
+ embedded_offset
,
375 recurse
, original_value
,
377 fprintf_filtered (stream
, "}");
381 /* Array of unspecified length: treat like pointer to first elt. */
382 print_unpacked_pointer (type
, address
, address
, options
, stream
);
386 if (TYPE_CONST (type
))
387 print_variable_at_address (type
, valaddr
+ embedded_offset
,
388 stream
, recurse
, options
);
389 else if (options
->format
&& options
->format
!= 's')
390 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
394 addr
= unpack_pointer (type
, valaddr
+ embedded_offset
);
395 print_unpacked_pointer (type
, addr
, address
, options
, stream
);
400 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
401 if (options
->addressprint
)
404 = extract_typed_address (valaddr
+ embedded_offset
, type
);
406 fprintf_filtered (stream
, "@");
407 fputs_filtered (paddress (gdbarch
, addr
), stream
);
408 if (options
->deref_ref
)
409 fputs_filtered (": ", stream
);
411 /* De-reference the reference. */
412 if (options
->deref_ref
)
414 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
416 struct value
*deref_val
=
418 (TYPE_TARGET_TYPE (type
),
419 unpack_pointer (type
, valaddr
+ embedded_offset
));
421 common_val_print (deref_val
, stream
, recurse
, options
,
425 fputs_filtered ("???", stream
);
429 case TYPE_CODE_UNION
:
430 if (recurse
&& !options
->unionprint
)
432 fprintf_filtered (stream
, "{...}");
436 case TYPE_CODE_STRUCT
:
437 if (m2_is_long_set (type
))
438 m2_print_long_set (type
, valaddr
, embedded_offset
, address
,
440 else if (m2_is_unbounded_array (type
))
441 m2_print_unbounded_array (type
, valaddr
, embedded_offset
,
442 address
, stream
, recurse
, options
);
444 cp_print_value_fields (type
, type
, valaddr
, embedded_offset
,
445 address
, stream
, recurse
, original_value
,
452 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
456 len
= TYPE_NFIELDS (type
);
457 val
= unpack_long (type
, valaddr
+ embedded_offset
);
458 for (i
= 0; i
< len
; i
++)
461 if (val
== TYPE_FIELD_BITPOS (type
, i
))
468 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
472 print_longest (stream
, 'd', 0, val
);
479 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
483 /* FIXME, we should consider, at least for ANSI C language, eliminating
484 the distinction made between FUNCs and POINTERs to FUNCs. */
485 fprintf_filtered (stream
, "{");
486 type_print (type
, "", stream
, -1);
487 fprintf_filtered (stream
, "} ");
488 /* Try to print what function it points to, and its address. */
489 print_address_demangle (gdbarch
, address
, stream
, demangle
);
493 if (options
->format
|| options
->output_format
)
495 struct value_print_options opts
= *options
;
497 opts
.format
= (options
->format
? options
->format
498 : options
->output_format
);
499 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
504 val
= unpack_long (type
, valaddr
+ embedded_offset
);
506 fputs_filtered ("FALSE", stream
);
508 fputs_filtered ("TRUE", stream
);
510 fprintf_filtered (stream
, "%ld)", (long int) val
);
514 case TYPE_CODE_RANGE
:
515 if (TYPE_LENGTH (type
) == TYPE_LENGTH (TYPE_TARGET_TYPE (type
)))
517 m2_val_print (TYPE_TARGET_TYPE (type
), valaddr
, embedded_offset
,
518 address
, stream
, recurse
, original_value
, options
);
521 /* FIXME: create_range_type does not set the unsigned bit in a
522 range type (I think it probably should copy it from the target
523 type), so we won't print values which are too large to
524 fit in a signed integer correctly. */
525 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
526 print with the target type, though, because the size of our type
527 and the target type might differ). */
531 if (options
->format
|| options
->output_format
)
533 struct value_print_options opts
= *options
;
535 opts
.format
= (options
->format
? options
->format
536 : options
->output_format
);
537 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
541 val_print_type_code_int (type
, valaddr
+ embedded_offset
, stream
);
545 if (options
->format
|| options
->output_format
)
547 struct value_print_options opts
= *options
;
549 opts
.format
= (options
->format
? options
->format
550 : options
->output_format
);
551 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
556 val
= unpack_long (type
, valaddr
+ embedded_offset
);
557 if (TYPE_UNSIGNED (type
))
558 fprintf_filtered (stream
, "%u", (unsigned int) val
);
560 fprintf_filtered (stream
, "%d", (int) val
);
561 fputs_filtered (" ", stream
);
562 LA_PRINT_CHAR ((unsigned char) val
, type
, stream
);
568 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
571 print_floating (valaddr
+ embedded_offset
, type
, stream
);
574 case TYPE_CODE_METHOD
:
577 case TYPE_CODE_BITSTRING
:
579 elttype
= TYPE_INDEX_TYPE (type
);
580 CHECK_TYPEDEF (elttype
);
581 if (TYPE_STUB (elttype
))
583 fprintf_filtered (stream
, _("<incomplete type>"));
589 struct type
*range
= elttype
;
590 LONGEST low_bound
, high_bound
;
592 int is_bitstring
= TYPE_CODE (type
) == TYPE_CODE_BITSTRING
;
596 fputs_filtered ("B'", stream
);
598 fputs_filtered ("{", stream
);
600 i
= get_discrete_bounds (range
, &low_bound
, &high_bound
);
604 fputs_filtered (_("<error value>"), stream
);
608 for (i
= low_bound
; i
<= high_bound
; i
++)
610 int element
= value_bit_index (type
, valaddr
+ embedded_offset
,
616 goto maybe_bad_bstring
;
619 fprintf_filtered (stream
, "%d", element
);
623 fputs_filtered (", ", stream
);
624 print_type_scalar (range
, i
, stream
);
627 if (i
+ 1 <= high_bound
628 && value_bit_index (type
, valaddr
+ embedded_offset
,
633 fputs_filtered ("..", stream
);
634 while (i
+ 1 <= high_bound
635 && value_bit_index (type
,
636 valaddr
+ embedded_offset
,
639 print_type_scalar (range
, j
, stream
);
645 fputs_filtered ("'", stream
);
647 fputs_filtered ("}", stream
);
652 fprintf_filtered (stream
, "void");
655 case TYPE_CODE_ERROR
:
656 fprintf_filtered (stream
, "%s", TYPE_ERROR_NAME (type
));
659 case TYPE_CODE_UNDEF
:
660 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
661 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
662 and no complete type for struct foo in that file. */
663 fprintf_filtered (stream
, _("<incomplete type>"));
667 error (_("Invalid m2 type code %d in symbol table."), TYPE_CODE (type
));
This page took 0.067964 seconds and 4 git commands to generate.