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 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_print_options
*options
,
45 /* Print function pointer with inferior address ADDRESS onto stdio
49 print_function_pointer_address (struct gdbarch
*gdbarch
, CORE_ADDR address
,
50 struct ui_file
*stream
, int addressprint
)
52 CORE_ADDR func_addr
= gdbarch_convert_from_func_ptr_addr (gdbarch
, address
,
55 /* If the function pointer is represented by a description, print the
56 address of the description. */
57 if (addressprint
&& func_addr
!= address
)
59 fputs_filtered ("@", stream
);
60 fputs_filtered (paddress (gdbarch
, address
), stream
);
61 fputs_filtered (": ", stream
);
63 print_address_demangle (gdbarch
, func_addr
, stream
, demangle
);
66 /* get_long_set_bounds - assigns the bounds of the long set to low and
70 get_long_set_bounds (struct type
*type
, LONGEST
*low
, LONGEST
*high
)
74 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
)
76 len
= TYPE_NFIELDS (type
);
77 i
= TYPE_N_BASECLASSES (type
);
80 *low
= TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, i
)));
81 *high
= TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
,
85 error (_("expecting long_set"));
90 m2_print_long_set (struct type
*type
, const gdb_byte
*valaddr
,
91 int embedded_offset
, CORE_ADDR address
,
92 struct ui_file
*stream
)
96 LONGEST previous_low
= 0;
97 LONGEST previous_high
= 0;
98 LONGEST i
, low_bound
, high_bound
;
99 LONGEST field_low
, field_high
;
105 CHECK_TYPEDEF (type
);
107 fprintf_filtered (stream
, "{");
108 len
= TYPE_NFIELDS (type
);
109 if (get_long_set_bounds (type
, &low_bound
, &high_bound
))
111 field
= TYPE_N_BASECLASSES (type
);
112 range
= TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, field
));
116 fprintf_filtered (stream
, " %s }", _("<unknown bounds of set>"));
120 target
= TYPE_TARGET_TYPE (range
);
122 if (get_discrete_bounds (range
, &field_low
, &field_high
) >= 0)
124 for (i
= low_bound
; i
<= high_bound
; i
++)
126 bitval
= value_bit_index (TYPE_FIELD_TYPE (type
, field
),
127 (TYPE_FIELD_BITPOS (type
, field
) / 8) +
128 valaddr
+ embedded_offset
, i
);
130 error (_("bit test is out of range"));
137 fprintf_filtered (stream
, ", ");
138 print_type_scalar (target
, i
, stream
);
149 if (previous_low
+1 < previous_high
)
150 fprintf_filtered (stream
, "..");
151 if (previous_low
+1 < previous_high
)
152 print_type_scalar (target
, previous_high
, stream
);
161 range
= TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type
, field
));
162 if (get_discrete_bounds (range
, &field_low
, &field_high
) < 0)
164 target
= TYPE_TARGET_TYPE (range
);
169 if (previous_low
+1 < previous_high
)
171 fprintf_filtered (stream
, "..");
172 print_type_scalar (target
, previous_high
, stream
);
176 fprintf_filtered (stream
, "}");
181 m2_print_unbounded_array (struct type
*type
, const gdb_byte
*valaddr
,
182 int embedded_offset
, CORE_ADDR address
,
183 struct ui_file
*stream
, int recurse
,
184 const struct value_print_options
*options
)
186 struct type
*content_type
;
191 CHECK_TYPEDEF (type
);
192 content_type
= TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type
, 0));
194 addr
= unpack_pointer (TYPE_FIELD_TYPE (type
, 0),
195 (TYPE_FIELD_BITPOS (type
, 0) / 8) +
196 valaddr
+ embedded_offset
);
198 val
= value_at_lazy (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type
, 0)),
200 len
= unpack_field_as_long (type
, valaddr
+ embedded_offset
, 1);
202 fprintf_filtered (stream
, "{");
203 m2_print_array_contents (value_type (val
), value_contents(val
),
204 value_embedded_offset (val
), addr
, stream
,
205 recurse
, options
, len
);
206 fprintf_filtered (stream
, ", HIGH = %d}", (int) len
);
210 print_unpacked_pointer (struct type
*type
,
211 CORE_ADDR address
, CORE_ADDR addr
,
212 const struct value_print_options
*options
,
213 struct ui_file
*stream
)
215 struct gdbarch
*gdbarch
= get_type_arch (type
);
216 struct type
*elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
218 if (TYPE_CODE (elttype
) == TYPE_CODE_FUNC
)
220 /* Try to print what function it points to. */
221 print_function_pointer_address (gdbarch
, addr
, stream
,
222 options
->addressprint
);
223 /* Return value is irrelevant except for string pointers. */
227 if (options
->addressprint
&& options
->format
!= 's')
228 fputs_filtered (paddress (gdbarch
, address
), stream
);
230 /* For a pointer to char or unsigned char, also print the string
231 pointed to, unless pointer is null. */
233 if (TYPE_LENGTH (elttype
) == 1
234 && TYPE_CODE (elttype
) == TYPE_CODE_INT
235 && (options
->format
== 0 || options
->format
== 's')
237 return val_print_string (TYPE_TARGET_TYPE (type
), addr
, -1,
244 print_variable_at_address (struct type
*type
,
245 const gdb_byte
*valaddr
,
246 struct ui_file
*stream
,
248 const struct value_print_options
*options
)
250 struct gdbarch
*gdbarch
= get_type_arch (type
);
251 CORE_ADDR addr
= unpack_pointer (type
, valaddr
);
252 struct type
*elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
254 fprintf_filtered (stream
, "[");
255 fputs_filtered (paddress (gdbarch
, addr
), stream
);
256 fprintf_filtered (stream
, "] : ");
258 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
260 struct value
*deref_val
=
261 value_at (TYPE_TARGET_TYPE (type
), unpack_pointer (type
, valaddr
));
263 common_val_print (deref_val
, stream
, recurse
, options
, current_language
);
266 fputs_filtered ("???", stream
);
270 /* m2_print_array_contents - prints out the contents of an
271 array up to a max_print values.
272 It prints arrays of char as a string
273 and all other data types as comma
277 m2_print_array_contents (struct type
*type
, const gdb_byte
*valaddr
,
278 int embedded_offset
, CORE_ADDR address
,
279 struct ui_file
*stream
, int recurse
,
280 const struct value_print_options
*options
,
284 CHECK_TYPEDEF (type
);
286 if (TYPE_LENGTH (type
) > 0)
288 eltlen
= TYPE_LENGTH (type
);
289 if (options
->prettyprint_arrays
)
290 print_spaces_filtered (2 + 2 * recurse
, stream
);
291 /* For an array of chars, print with string syntax. */
293 ((TYPE_CODE (type
) == TYPE_CODE_INT
)
294 || ((current_language
->la_language
== language_m2
)
295 && (TYPE_CODE (type
) == TYPE_CODE_CHAR
)))
296 && (options
->format
== 0 || options
->format
== 's'))
297 val_print_string (type
, address
, len
+1, stream
, options
);
300 fprintf_filtered (stream
, "{");
301 val_print_array_elements (type
, valaddr
+ embedded_offset
,
302 address
, stream
, recurse
, options
, 0);
303 fprintf_filtered (stream
, "}");
309 /* Print data of type TYPE located at VALADDR (within GDB), which came from
310 the inferior at address ADDRESS, onto stdio stream STREAM according to
311 OPTIONS. The data at VALADDR is in target byte order.
313 If the data are a string pointer, returns the number of string characters
317 m2_val_print (struct type
*type
, const gdb_byte
*valaddr
, int embedded_offset
,
318 CORE_ADDR address
, struct ui_file
*stream
, int recurse
,
319 const struct value_print_options
*options
)
321 struct gdbarch
*gdbarch
= get_type_arch (type
);
322 unsigned int i
= 0; /* Number of characters printed */
324 struct type
*elttype
;
329 CHECK_TYPEDEF (type
);
330 switch (TYPE_CODE (type
))
332 case TYPE_CODE_ARRAY
:
333 if (TYPE_LENGTH (type
) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) > 0)
335 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
336 eltlen
= TYPE_LENGTH (elttype
);
337 len
= TYPE_LENGTH (type
) / eltlen
;
338 if (options
->prettyprint_arrays
)
339 print_spaces_filtered (2 + 2 * recurse
, stream
);
340 /* For an array of chars, print with string syntax. */
342 ((TYPE_CODE (elttype
) == TYPE_CODE_INT
)
343 || ((current_language
->la_language
== language_m2
)
344 && (TYPE_CODE (elttype
) == TYPE_CODE_CHAR
)))
345 && (options
->format
== 0 || options
->format
== 's'))
347 /* If requested, look for the first null char and only print
348 elements up to it. */
349 if (options
->stop_print_at_null
)
351 unsigned int temp_len
;
353 /* Look for a NULL char. */
355 (valaddr
+ embedded_offset
)[temp_len
]
356 && temp_len
< len
&& temp_len
< options
->print_max
;
361 LA_PRINT_STRING (stream
, TYPE_TARGET_TYPE (type
),
362 valaddr
+ embedded_offset
, len
, NULL
,
368 fprintf_filtered (stream
, "{");
369 val_print_array_elements (type
, valaddr
+ embedded_offset
,
370 address
, stream
, recurse
, options
, 0);
371 fprintf_filtered (stream
, "}");
375 /* Array of unspecified length: treat like pointer to first elt. */
376 print_unpacked_pointer (type
, address
, address
, options
, stream
);
380 if (TYPE_CONST (type
))
381 print_variable_at_address (type
, valaddr
+ embedded_offset
,
382 stream
, recurse
, options
);
383 else if (options
->format
&& options
->format
!= 's')
384 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
388 addr
= unpack_pointer (type
, valaddr
+ embedded_offset
);
389 print_unpacked_pointer (type
, addr
, address
, options
, stream
);
394 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
395 if (options
->addressprint
)
398 = extract_typed_address (valaddr
+ embedded_offset
, type
);
400 fprintf_filtered (stream
, "@");
401 fputs_filtered (paddress (gdbarch
, addr
), stream
);
402 if (options
->deref_ref
)
403 fputs_filtered (": ", stream
);
405 /* De-reference the reference. */
406 if (options
->deref_ref
)
408 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
410 struct value
*deref_val
=
412 (TYPE_TARGET_TYPE (type
),
413 unpack_pointer (type
, valaddr
+ embedded_offset
));
415 common_val_print (deref_val
, stream
, recurse
, options
,
419 fputs_filtered ("???", stream
);
423 case TYPE_CODE_UNION
:
424 if (recurse
&& !options
->unionprint
)
426 fprintf_filtered (stream
, "{...}");
430 case TYPE_CODE_STRUCT
:
431 if (m2_is_long_set (type
))
432 m2_print_long_set (type
, valaddr
, embedded_offset
, address
,
434 else if (m2_is_unbounded_array (type
))
435 m2_print_unbounded_array (type
, valaddr
, embedded_offset
,
436 address
, stream
, recurse
, options
);
438 cp_print_value_fields (type
, type
, valaddr
, embedded_offset
,
439 address
, stream
, recurse
, options
, NULL
, 0);
445 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
449 len
= TYPE_NFIELDS (type
);
450 val
= unpack_long (type
, valaddr
+ embedded_offset
);
451 for (i
= 0; i
< len
; i
++)
454 if (val
== TYPE_FIELD_BITPOS (type
, i
))
461 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
465 print_longest (stream
, 'd', 0, val
);
472 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
476 /* FIXME, we should consider, at least for ANSI C language, eliminating
477 the distinction made between FUNCs and POINTERs to FUNCs. */
478 fprintf_filtered (stream
, "{");
479 type_print (type
, "", stream
, -1);
480 fprintf_filtered (stream
, "} ");
481 /* Try to print what function it points to, and its address. */
482 print_address_demangle (gdbarch
, address
, stream
, demangle
);
486 if (options
->format
|| options
->output_format
)
488 struct value_print_options opts
= *options
;
490 opts
.format
= (options
->format
? options
->format
491 : options
->output_format
);
492 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
497 val
= unpack_long (type
, valaddr
+ embedded_offset
);
499 fputs_filtered ("FALSE", stream
);
501 fputs_filtered ("TRUE", stream
);
503 fprintf_filtered (stream
, "%ld)", (long int) val
);
507 case TYPE_CODE_RANGE
:
508 if (TYPE_LENGTH (type
) == TYPE_LENGTH (TYPE_TARGET_TYPE (type
)))
510 m2_val_print (TYPE_TARGET_TYPE (type
), valaddr
, embedded_offset
,
511 address
, stream
, recurse
, options
);
514 /* FIXME: create_range_type does not set the unsigned bit in a
515 range type (I think it probably should copy it from the target
516 type), so we won't print values which are too large to
517 fit in a signed integer correctly. */
518 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
519 print with the target type, though, because the size of our type
520 and the target type might differ). */
524 if (options
->format
|| options
->output_format
)
526 struct value_print_options opts
= *options
;
528 opts
.format
= (options
->format
? options
->format
529 : options
->output_format
);
530 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
534 val_print_type_code_int (type
, valaddr
+ embedded_offset
, stream
);
538 if (options
->format
|| options
->output_format
)
540 struct value_print_options opts
= *options
;
542 opts
.format
= (options
->format
? options
->format
543 : options
->output_format
);
544 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
549 val
= unpack_long (type
, valaddr
+ embedded_offset
);
550 if (TYPE_UNSIGNED (type
))
551 fprintf_filtered (stream
, "%u", (unsigned int) val
);
553 fprintf_filtered (stream
, "%d", (int) val
);
554 fputs_filtered (" ", stream
);
555 LA_PRINT_CHAR ((unsigned char) val
, type
, stream
);
561 print_scalar_formatted (valaddr
+ embedded_offset
, type
,
564 print_floating (valaddr
+ embedded_offset
, type
, stream
);
567 case TYPE_CODE_METHOD
:
570 case TYPE_CODE_BITSTRING
:
572 elttype
= TYPE_INDEX_TYPE (type
);
573 CHECK_TYPEDEF (elttype
);
574 if (TYPE_STUB (elttype
))
576 fprintf_filtered (stream
, _("<incomplete type>"));
582 struct type
*range
= elttype
;
583 LONGEST low_bound
, high_bound
;
585 int is_bitstring
= TYPE_CODE (type
) == TYPE_CODE_BITSTRING
;
589 fputs_filtered ("B'", stream
);
591 fputs_filtered ("{", stream
);
593 i
= get_discrete_bounds (range
, &low_bound
, &high_bound
);
597 fputs_filtered (_("<error value>"), stream
);
601 for (i
= low_bound
; i
<= high_bound
; i
++)
603 int element
= value_bit_index (type
, valaddr
+ embedded_offset
,
609 goto maybe_bad_bstring
;
612 fprintf_filtered (stream
, "%d", element
);
616 fputs_filtered (", ", stream
);
617 print_type_scalar (range
, i
, stream
);
620 if (i
+ 1 <= high_bound
621 && value_bit_index (type
, valaddr
+ embedded_offset
,
626 fputs_filtered ("..", stream
);
627 while (i
+ 1 <= high_bound
628 && value_bit_index (type
,
629 valaddr
+ embedded_offset
,
632 print_type_scalar (range
, j
, stream
);
638 fputs_filtered ("'", stream
);
640 fputs_filtered ("}", stream
);
645 fprintf_filtered (stream
, "void");
648 case TYPE_CODE_ERROR
:
649 fprintf_filtered (stream
, _("<error type>"));
652 case TYPE_CODE_UNDEF
:
653 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
654 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
655 and no complete type for struct foo in that file. */
656 fprintf_filtered (stream
, _("<incomplete type>"));
660 error (_("Invalid m2 type code %d in symbol table."), TYPE_CODE (type
));
This page took 0.0560619999999999 seconds and 4 git commands to generate.