ada-valprint.c revision 1.1.1.7 1 1.1 christos /* Support for printing Ada values for GDB, the GNU debugger.
2 1.1 christos
3 1.1.1.7 christos Copyright (C) 1986-2020 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos #include <ctype.h>
22 1.1 christos #include "gdbtypes.h"
23 1.1 christos #include "expression.h"
24 1.1 christos #include "value.h"
25 1.1 christos #include "valprint.h"
26 1.1 christos #include "language.h"
27 1.1 christos #include "annotate.h"
28 1.1 christos #include "ada-lang.h"
29 1.1.1.6 christos #include "target-float.h"
30 1.1.1.7 christos #include "cli/cli-style.h"
31 1.1.1.7 christos #include "gdbarch.h"
32 1.1 christos
33 1.1.1.7 christos static int print_field_values (struct value *, struct value *,
34 1.1 christos struct ui_file *, int,
35 1.1 christos const struct value_print_options *,
36 1.1.1.7 christos int, const struct language_defn *);
37 1.1.1.7 christos
38 1.1 christos
39 1.1 christos
41 1.1 christos /* Make TYPE unsigned if its range of values includes no negatives. */
42 1.1 christos static void
43 1.1 christos adjust_type_signedness (struct type *type)
44 1.1.1.7 christos {
45 1.1.1.7 christos if (type != NULL && type->code () == TYPE_CODE_RANGE
46 1.1 christos && type->bounds ()->low.const_val () >= 0)
47 1.1 christos TYPE_UNSIGNED (type) = 1;
48 1.1 christos }
49 1.1 christos
50 1.1 christos /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
51 1.1 christos if non-standard (i.e., other than 1 for numbers, other than lower bound
52 1.1 christos of index type for enumerated type). Returns 1 if something printed,
53 1.1 christos otherwise 0. */
54 1.1 christos
55 1.1 christos static int
56 1.1 christos print_optional_low_bound (struct ui_file *stream, struct type *type,
57 1.1 christos const struct value_print_options *options)
58 1.1 christos {
59 1.1 christos struct type *index_type;
60 1.1 christos LONGEST low_bound;
61 1.1 christos LONGEST high_bound;
62 1.1 christos
63 1.1 christos if (options->print_array_indexes)
64 1.1 christos return 0;
65 1.1 christos
66 1.1 christos if (!get_array_bounds (type, &low_bound, &high_bound))
67 1.1 christos return 0;
68 1.1 christos
69 1.1 christos /* If this is an empty array, then don't print the lower bound.
70 1.1 christos That would be confusing, because we would print the lower bound,
71 1.1 christos followed by... nothing! */
72 1.1 christos if (low_bound > high_bound)
73 1.1 christos return 0;
74 1.1.1.7 christos
75 1.1 christos index_type = type->index_type ();
76 1.1.1.7 christos
77 1.1 christos while (index_type->code () == TYPE_CODE_RANGE)
78 1.1 christos {
79 1.1 christos /* We need to know what the base type is, in order to do the
80 1.1 christos appropriate check below. Otherwise, if this is a subrange
81 1.1 christos of an enumerated type, where the underlying value of the
82 1.1 christos first element is typically 0, we might test the low bound
83 1.1 christos against the wrong value. */
84 1.1 christos index_type = TYPE_TARGET_TYPE (index_type);
85 1.1 christos }
86 1.1.1.6 christos
87 1.1.1.7 christos /* Don't print the lower bound if it's the default one. */
88 1.1 christos switch (index_type->code ())
89 1.1 christos {
90 1.1.1.6 christos case TYPE_CODE_BOOL:
91 1.1 christos case TYPE_CODE_CHAR:
92 1.1 christos if (low_bound == 0)
93 1.1 christos return 0;
94 1.1 christos break;
95 1.1.1.7 christos case TYPE_CODE_ENUM:
96 1.1 christos if (low_bound == 0)
97 1.1.1.7 christos return 0;
98 1.1 christos low_bound = TYPE_FIELD_ENUMVAL (index_type, low_bound);
99 1.1 christos break;
100 1.1 christos case TYPE_CODE_UNDEF:
101 1.1 christos index_type = NULL;
102 1.1 christos /* FALL THROUGH */
103 1.1 christos default:
104 1.1 christos if (low_bound == 1)
105 1.1 christos return 0;
106 1.1 christos break;
107 1.1 christos }
108 1.1 christos
109 1.1 christos ada_print_scalar (index_type, low_bound, stream);
110 1.1 christos fprintf_filtered (stream, " => ");
111 1.1 christos return 1;
112 1.1 christos }
113 1.1 christos
114 1.1.1.7 christos /* Version of val_print_array_elements for GNAT-style packed arrays.
115 1.1.1.7 christos Prints elements of packed array of type TYPE from VALADDR on
116 1.1.1.7 christos STREAM. Formats according to OPTIONS and separates with commas.
117 1.1.1.7 christos RECURSE is the recursion (nesting) level. TYPE must have been
118 1.1 christos decoded (as by ada_coerce_to_simple_array). */
119 1.1 christos
120 1.1 christos static void
121 1.1.1.7 christos val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
122 1.1 christos int offset, struct ui_file *stream,
123 1.1 christos int recurse,
124 1.1 christos const struct value_print_options *options)
125 1.1 christos {
126 1.1 christos unsigned int i;
127 1.1 christos unsigned int things_printed = 0;
128 1.1 christos unsigned len;
129 1.1 christos struct type *elttype, *index_type;
130 1.1 christos unsigned long bitsize = TYPE_FIELD_BITSIZE (type, 0);
131 1.1 christos struct value *mark = value_mark ();
132 1.1 christos LONGEST low = 0;
133 1.1 christos
134 1.1.1.7 christos elttype = TYPE_TARGET_TYPE (type);
135 1.1 christos index_type = type->index_type ();
136 1.1 christos
137 1.1 christos {
138 1.1 christos LONGEST high;
139 1.1 christos
140 1.1 christos if (get_discrete_bounds (index_type, &low, &high) < 0)
141 1.1.1.7 christos len = 1;
142 1.1.1.6 christos else if (low > high)
143 1.1.1.6 christos {
144 1.1.1.6 christos /* The array length should normally be HIGH_POS - LOW_POS + 1.
145 1.1.1.6 christos But in Ada we allow LOW_POS to be greater than HIGH_POS for
146 1.1.1.6 christos empty arrays. In that situation, the array length is just zero,
147 1.1.1.7 christos not negative! */
148 1.1.1.6 christos len = 0;
149 1.1.1.7 christos }
150 1.1.1.7 christos else
151 1.1 christos len = high - low + 1;
152 1.1 christos }
153 1.1.1.7 christos
154 1.1.1.7 christos if (index_type->code () == TYPE_CODE_RANGE)
155 1.1.1.7 christos index_type = TYPE_TARGET_TYPE (index_type);
156 1.1 christos
157 1.1 christos i = 0;
158 1.1 christos annotate_array_section_begin (i, elttype);
159 1.1 christos
160 1.1 christos while (i < len && things_printed < options->print_max)
161 1.1 christos {
162 1.1 christos struct value *v0, *v1;
163 1.1 christos int i0;
164 1.1 christos
165 1.1 christos if (i != 0)
166 1.1 christos {
167 1.1 christos if (options->prettyformat_arrays)
168 1.1 christos {
169 1.1 christos fprintf_filtered (stream, ",\n");
170 1.1 christos print_spaces_filtered (2 + 2 * recurse, stream);
171 1.1 christos }
172 1.1 christos else
173 1.1 christos {
174 1.1 christos fprintf_filtered (stream, ", ");
175 1.1 christos }
176 1.1.1.7 christos }
177 1.1.1.7 christos else if (options->prettyformat_arrays)
178 1.1.1.7 christos {
179 1.1.1.7 christos fprintf_filtered (stream, "\n");
180 1.1.1.7 christos print_spaces_filtered (2 + 2 * recurse, stream);
181 1.1 christos }
182 1.1 christos wrap_here (n_spaces (2 + 2 * recurse));
183 1.1 christos maybe_print_array_index (index_type, i + low, stream, options);
184 1.1 christos
185 1.1 christos i0 = i;
186 1.1 christos v0 = ada_value_primitive_packed_val (NULL, valaddr + offset,
187 1.1 christos (i0 * bitsize) / HOST_CHAR_BIT,
188 1.1 christos (i0 * bitsize) % HOST_CHAR_BIT,
189 1.1 christos bitsize, elttype);
190 1.1 christos while (1)
191 1.1 christos {
192 1.1 christos i += 1;
193 1.1 christos if (i >= len)
194 1.1 christos break;
195 1.1 christos v1 = ada_value_primitive_packed_val (NULL, valaddr + offset,
196 1.1 christos (i * bitsize) / HOST_CHAR_BIT,
197 1.1 christos (i * bitsize) % HOST_CHAR_BIT,
198 1.1.1.3 christos bitsize, elttype);
199 1.1.1.3 christos if (TYPE_LENGTH (check_typedef (value_type (v0)))
200 1.1.1.3 christos != TYPE_LENGTH (check_typedef (value_type (v1))))
201 1.1.1.2 christos break;
202 1.1.1.2 christos if (!value_contents_eq (v0, value_embedded_offset (v0),
203 1.1.1.3 christos v1, value_embedded_offset (v1),
204 1.1 christos TYPE_LENGTH (check_typedef (value_type (v0)))))
205 1.1 christos break;
206 1.1 christos }
207 1.1 christos
208 1.1 christos if (i - i0 > options->repeat_count_threshold)
209 1.1 christos {
210 1.1 christos struct value_print_options opts = *options;
211 1.1 christos
212 1.1.1.7 christos opts.deref_ref = 0;
213 1.1 christos common_val_print (v0, stream, recurse + 1, &opts, current_language);
214 1.1.1.7 christos annotate_elt_rep (i - i0);
215 1.1.1.7 christos fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
216 1.1 christos metadata_style.style ().ptr (), i - i0, nullptr);
217 1.1 christos annotate_elt_rep_end ();
218 1.1 christos
219 1.1 christos }
220 1.1 christos else
221 1.1 christos {
222 1.1 christos int j;
223 1.1 christos struct value_print_options opts = *options;
224 1.1 christos
225 1.1 christos opts.deref_ref = 0;
226 1.1 christos for (j = i0; j < i; j += 1)
227 1.1 christos {
228 1.1 christos if (j > i0)
229 1.1 christos {
230 1.1 christos if (options->prettyformat_arrays)
231 1.1 christos {
232 1.1 christos fprintf_filtered (stream, ",\n");
233 1.1 christos print_spaces_filtered (2 + 2 * recurse, stream);
234 1.1 christos }
235 1.1 christos else
236 1.1 christos {
237 1.1 christos fprintf_filtered (stream, ", ");
238 1.1 christos }
239 1.1 christos wrap_here (n_spaces (2 + 2 * recurse));
240 1.1 christos maybe_print_array_index (index_type, j + low,
241 1.1 christos stream, options);
242 1.1.1.7 christos }
243 1.1.1.7 christos common_val_print (v0, stream, recurse + 1, &opts,
244 1.1 christos current_language);
245 1.1 christos annotate_elt ();
246 1.1 christos }
247 1.1 christos }
248 1.1 christos things_printed += i - i0;
249 1.1 christos }
250 1.1 christos annotate_array_section_end ();
251 1.1 christos if (i < len)
252 1.1 christos {
253 1.1 christos fprintf_filtered (stream, "...");
254 1.1 christos }
255 1.1 christos
256 1.1 christos value_free_to_mark (mark);
257 1.1 christos }
258 1.1 christos
259 1.1 christos /* Print the character C on STREAM as part of the contents of a literal
260 1.1 christos string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
261 1.1 christos of the character. */
262 1.1 christos
263 1.1 christos void
264 1.1 christos ada_emit_char (int c, struct type *type, struct ui_file *stream,
265 1.1 christos int quoter, int type_len)
266 1.1 christos {
267 1.1 christos /* If this character fits in the normal ASCII range, and is
268 1.1 christos a printable character, then print the character as if it was
269 1.1 christos an ASCII character, even if this is a wide character.
270 1.1 christos The UCHAR_MAX check is necessary because the isascii function
271 1.1 christos requires that its argument have a value of an unsigned char,
272 1.1 christos or EOF (EOF is obviously not printable). */
273 1.1 christos if (c <= UCHAR_MAX && isascii (c) && isprint (c))
274 1.1 christos {
275 1.1 christos if (c == quoter && c == '"')
276 1.1 christos fprintf_filtered (stream, "\"\"");
277 1.1 christos else
278 1.1 christos fprintf_filtered (stream, "%c", c);
279 1.1 christos }
280 1.1 christos else
281 1.1 christos fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
282 1.1 christos }
283 1.1 christos
284 1.1 christos /* Character #I of STRING, given that TYPE_LEN is the size in bytes
285 1.1 christos of a character. */
286 1.1 christos
287 1.1 christos static int
288 1.1 christos char_at (const gdb_byte *string, int i, int type_len,
289 1.1 christos enum bfd_endian byte_order)
290 1.1 christos {
291 1.1 christos if (type_len == 1)
292 1.1 christos return string[i];
293 1.1 christos else
294 1.1 christos return (int) extract_unsigned_integer (string + type_len * i,
295 1.1 christos type_len, byte_order);
296 1.1 christos }
297 1.1 christos
298 1.1 christos /* Print a floating-point value of type TYPE, pointed to in GDB by
299 1.1 christos VALADDR, on STREAM. Use Ada formatting conventions: there must be
300 1.1 christos a decimal point, and at least one digit before and after the
301 1.1 christos point. We use the GNAT format for NaNs and infinities. */
302 1.1 christos
303 1.1 christos static void
304 1.1 christos ada_print_floating (const gdb_byte *valaddr, struct type *type,
305 1.1 christos struct ui_file *stream)
306 1.1.1.5 christos {
307 1.1.1.5 christos string_file tmp_stream;
308 1.1.1.5 christos
309 1.1.1.5 christos print_floating (valaddr, type, &tmp_stream);
310 1.1.1.5 christos
311 1.1.1.5 christos std::string &s = tmp_stream.string ();
312 1.1 christos size_t skip_count = 0;
313 1.1 christos
314 1.1 christos /* Modify for Ada rules. */
315 1.1.1.5 christos
316 1.1.1.5 christos size_t pos = s.find ("inf");
317 1.1.1.5 christos if (pos == std::string::npos)
318 1.1.1.5 christos pos = s.find ("Inf");
319 1.1.1.5 christos if (pos == std::string::npos)
320 1.1.1.5 christos pos = s.find ("INF");
321 1.1.1.5 christos if (pos != std::string::npos)
322 1.1.1.5 christos s.replace (pos, 3, "Inf");
323 1.1.1.5 christos
324 1.1.1.5 christos if (pos == std::string::npos)
325 1.1.1.5 christos {
326 1.1.1.5 christos pos = s.find ("nan");
327 1.1.1.5 christos if (pos == std::string::npos)
328 1.1.1.5 christos pos = s.find ("NaN");
329 1.1.1.5 christos if (pos == std::string::npos)
330 1.1.1.5 christos pos = s.find ("Nan");
331 1.1.1.5 christos if (pos != std::string::npos)
332 1.1.1.5 christos {
333 1.1.1.5 christos s[pos] = s[pos + 2] = 'N';
334 1.1.1.5 christos if (s[0] == '-')
335 1.1 christos skip_count = 1;
336 1.1 christos }
337 1.1 christos }
338 1.1.1.5 christos
339 1.1.1.5 christos if (pos == std::string::npos
340 1.1.1.5 christos && s.find ('.') == std::string::npos)
341 1.1.1.5 christos {
342 1.1.1.5 christos pos = s.find ('e');
343 1.1.1.5 christos if (pos == std::string::npos)
344 1.1 christos fprintf_filtered (stream, "%s.0", s.c_str ());
345 1.1.1.5 christos else
346 1.1 christos fprintf_filtered (stream, "%.*s.0%s", (int) pos, s.c_str (), &s[pos]);
347 1.1 christos }
348 1.1.1.5 christos else
349 1.1 christos fprintf_filtered (stream, "%s", &s[skip_count]);
350 1.1 christos }
351 1.1 christos
352 1.1 christos void
353 1.1 christos ada_printchar (int c, struct type *type, struct ui_file *stream)
354 1.1 christos {
355 1.1 christos fputs_filtered ("'", stream);
356 1.1 christos ada_emit_char (c, type, stream, '\'', TYPE_LENGTH (type));
357 1.1 christos fputs_filtered ("'", stream);
358 1.1 christos }
359 1.1 christos
360 1.1 christos /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
361 1.1 christos form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL
362 1.1 christos like a default signed integer. */
363 1.1 christos
364 1.1 christos void
365 1.1 christos ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
366 1.1 christos {
367 1.1 christos unsigned int i;
368 1.1 christos unsigned len;
369 1.1 christos
370 1.1 christos if (!type)
371 1.1 christos {
372 1.1 christos print_longest (stream, 'd', 0, val);
373 1.1 christos return;
374 1.1 christos }
375 1.1 christos
376 1.1 christos type = ada_check_typedef (type);
377 1.1.1.7 christos
378 1.1 christos switch (type->code ())
379 1.1 christos {
380 1.1 christos
381 1.1.1.7 christos case TYPE_CODE_ENUM:
382 1.1 christos len = type->num_fields ();
383 1.1 christos for (i = 0; i < len; i++)
384 1.1 christos {
385 1.1 christos if (TYPE_FIELD_ENUMVAL (type, i) == val)
386 1.1 christos {
387 1.1 christos break;
388 1.1 christos }
389 1.1 christos }
390 1.1 christos if (i < len)
391 1.1.1.7 christos {
392 1.1.1.7 christos fputs_styled (ada_enum_name (TYPE_FIELD_NAME (type, i)),
393 1.1 christos variable_name_style.style (), stream);
394 1.1 christos }
395 1.1 christos else
396 1.1 christos {
397 1.1 christos print_longest (stream, 'd', 0, val);
398 1.1 christos }
399 1.1 christos break;
400 1.1 christos
401 1.1 christos case TYPE_CODE_INT:
402 1.1 christos print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
403 1.1 christos break;
404 1.1 christos
405 1.1 christos case TYPE_CODE_CHAR:
406 1.1 christos LA_PRINT_CHAR (val, type, stream);
407 1.1 christos break;
408 1.1 christos
409 1.1 christos case TYPE_CODE_BOOL:
410 1.1 christos fprintf_filtered (stream, val ? "true" : "false");
411 1.1 christos break;
412 1.1 christos
413 1.1 christos case TYPE_CODE_RANGE:
414 1.1 christos ada_print_scalar (TYPE_TARGET_TYPE (type), val, stream);
415 1.1 christos return;
416 1.1 christos
417 1.1 christos case TYPE_CODE_UNDEF:
418 1.1 christos case TYPE_CODE_PTR:
419 1.1 christos case TYPE_CODE_ARRAY:
420 1.1 christos case TYPE_CODE_STRUCT:
421 1.1 christos case TYPE_CODE_UNION:
422 1.1 christos case TYPE_CODE_FUNC:
423 1.1 christos case TYPE_CODE_FLT:
424 1.1 christos case TYPE_CODE_VOID:
425 1.1 christos case TYPE_CODE_SET:
426 1.1 christos case TYPE_CODE_STRING:
427 1.1 christos case TYPE_CODE_ERROR:
428 1.1 christos case TYPE_CODE_MEMBERPTR:
429 1.1 christos case TYPE_CODE_METHODPTR:
430 1.1 christos case TYPE_CODE_METHOD:
431 1.1 christos case TYPE_CODE_REF:
432 1.1 christos warning (_("internal error: unhandled type in ada_print_scalar"));
433 1.1 christos break;
434 1.1 christos
435 1.1 christos default:
436 1.1 christos error (_("Invalid type code in symbol table."));
437 1.1 christos }
438 1.1 christos }
439 1.1 christos
440 1.1 christos /* Print the character string STRING, printing at most LENGTH characters.
441 1.1 christos Printing stops early if the number hits print_max; repeat counts
442 1.1 christos are printed as appropriate. Print ellipses at the end if we
443 1.1 christos had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
444 1.1 christos TYPE_LEN is the length (1 or 2) of the character type. */
445 1.1 christos
446 1.1 christos static void
447 1.1 christos printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
448 1.1 christos unsigned int length, int force_ellipses, int type_len,
449 1.1 christos const struct value_print_options *options)
450 1.1.1.7 christos {
451 1.1 christos enum bfd_endian byte_order = type_byte_order (elttype);
452 1.1 christos unsigned int i;
453 1.1 christos unsigned int things_printed = 0;
454 1.1 christos int in_quotes = 0;
455 1.1 christos int need_comma = 0;
456 1.1 christos
457 1.1 christos if (length == 0)
458 1.1 christos {
459 1.1 christos fputs_filtered ("\"\"", stream);
460 1.1 christos return;
461 1.1 christos }
462 1.1 christos
463 1.1 christos for (i = 0; i < length && things_printed < options->print_max; i += 1)
464 1.1 christos {
465 1.1 christos /* Position of the character we are examining
466 1.1 christos to see whether it is repeated. */
467 1.1 christos unsigned int rep1;
468 1.1 christos /* Number of repetitions we have detected so far. */
469 1.1 christos unsigned int reps;
470 1.1 christos
471 1.1 christos QUIT;
472 1.1 christos
473 1.1 christos if (need_comma)
474 1.1 christos {
475 1.1 christos fputs_filtered (", ", stream);
476 1.1 christos need_comma = 0;
477 1.1 christos }
478 1.1 christos
479 1.1 christos rep1 = i + 1;
480 1.1 christos reps = 1;
481 1.1 christos while (rep1 < length
482 1.1 christos && char_at (string, rep1, type_len, byte_order)
483 1.1 christos == char_at (string, i, type_len, byte_order))
484 1.1 christos {
485 1.1 christos rep1 += 1;
486 1.1 christos reps += 1;
487 1.1 christos }
488 1.1 christos
489 1.1 christos if (reps > options->repeat_count_threshold)
490 1.1 christos {
491 1.1 christos if (in_quotes)
492 1.1 christos {
493 1.1 christos fputs_filtered ("\", ", stream);
494 1.1 christos in_quotes = 0;
495 1.1 christos }
496 1.1 christos fputs_filtered ("'", stream);
497 1.1 christos ada_emit_char (char_at (string, i, type_len, byte_order),
498 1.1 christos elttype, stream, '\'', type_len);
499 1.1.1.7 christos fputs_filtered ("'", stream);
500 1.1.1.7 christos fprintf_filtered (stream, _(" %p[<repeats %u times>%p]"),
501 1.1 christos metadata_style.style ().ptr (), reps, nullptr);
502 1.1 christos i = rep1 - 1;
503 1.1 christos things_printed += options->repeat_count_threshold;
504 1.1 christos need_comma = 1;
505 1.1 christos }
506 1.1 christos else
507 1.1 christos {
508 1.1 christos if (!in_quotes)
509 1.1 christos {
510 1.1 christos fputs_filtered ("\"", stream);
511 1.1 christos in_quotes = 1;
512 1.1 christos }
513 1.1 christos ada_emit_char (char_at (string, i, type_len, byte_order),
514 1.1 christos elttype, stream, '"', type_len);
515 1.1 christos things_printed += 1;
516 1.1 christos }
517 1.1 christos }
518 1.1 christos
519 1.1 christos /* Terminate the quotes if necessary. */
520 1.1 christos if (in_quotes)
521 1.1 christos fputs_filtered ("\"", stream);
522 1.1 christos
523 1.1 christos if (force_ellipses || i < length)
524 1.1 christos fputs_filtered ("...", stream);
525 1.1 christos }
526 1.1 christos
527 1.1 christos void
528 1.1 christos ada_printstr (struct ui_file *stream, struct type *type,
529 1.1 christos const gdb_byte *string, unsigned int length,
530 1.1 christos const char *encoding, int force_ellipses,
531 1.1 christos const struct value_print_options *options)
532 1.1 christos {
533 1.1 christos printstr (stream, type, string, length, force_ellipses, TYPE_LENGTH (type),
534 1.1 christos options);
535 1.1 christos }
536 1.1 christos
537 1.1.1.7 christos static int
538 1.1.1.7 christos print_variant_part (struct value *value, int field_num,
539 1.1 christos struct value *outer_value,
540 1.1 christos struct ui_file *stream, int recurse,
541 1.1 christos const struct value_print_options *options,
542 1.1 christos int comma_needed,
543 1.1 christos const struct language_defn *language)
544 1.1.1.7 christos {
545 1.1.1.7 christos struct type *type = value_type (value);
546 1.1.1.7 christos struct type *var_type = type->field (field_num).type ();
547 1.1 christos int which = ada_which_variant_applies (var_type, outer_value);
548 1.1 christos
549 1.1 christos if (which < 0)
550 1.1.1.7 christos return 0;
551 1.1.1.7 christos
552 1.1.1.7 christos struct value *variant_field = value_field (value, field_num);
553 1.1.1.7 christos struct value *active_component = value_field (variant_field, which);
554 1.1.1.7 christos return print_field_values (active_component, outer_value, stream, recurse,
555 1.1.1.7 christos options, comma_needed, language);
556 1.1.1.7 christos }
557 1.1.1.7 christos
558 1.1.1.7 christos /* Print out fields of VALUE.
559 1.1.1.7 christos
560 1.1.1.7 christos STREAM, RECURSE, and OPTIONS have the same meanings as in
561 1.1.1.7 christos ada_print_value and ada_value_print.
562 1.1.1.7 christos
563 1.1.1.7 christos OUTER_VALUE gives the enclosing record (used to get discriminant
564 1.1 christos values when printing variant parts).
565 1.1 christos
566 1.1 christos COMMA_NEEDED is 1 if fields have been printed at the current recursion
567 1.1 christos level, so that a comma is needed before any field printed by this
568 1.1 christos call.
569 1.1 christos
570 1.1 christos Returns 1 if COMMA_NEEDED or any fields were printed. */
571 1.1 christos
572 1.1.1.7 christos static int
573 1.1.1.7 christos print_field_values (struct value *value, struct value *outer_value,
574 1.1 christos struct ui_file *stream, int recurse,
575 1.1 christos const struct value_print_options *options,
576 1.1 christos int comma_needed,
577 1.1 christos const struct language_defn *language)
578 1.1 christos {
579 1.1 christos int i, len;
580 1.1.1.7 christos
581 1.1.1.7 christos struct type *type = value_type (value);
582 1.1 christos len = type->num_fields ();
583 1.1 christos
584 1.1 christos for (i = 0; i < len; i += 1)
585 1.1 christos {
586 1.1 christos if (ada_is_ignored_field (type, i))
587 1.1 christos continue;
588 1.1 christos
589 1.1 christos if (ada_is_wrapper_field (type, i))
590 1.1.1.7 christos {
591 1.1.1.7 christos struct value *field_val = ada_value_primitive_field (value, 0,
592 1.1 christos i, type);
593 1.1.1.7 christos comma_needed =
594 1.1.1.7 christos print_field_values (field_val, field_val,
595 1.1.1.7 christos stream, recurse, options,
596 1.1 christos comma_needed, language);
597 1.1 christos continue;
598 1.1 christos }
599 1.1 christos else if (ada_is_variant_part (type, i))
600 1.1 christos {
601 1.1.1.7 christos comma_needed =
602 1.1.1.7 christos print_variant_part (value, i, outer_value, stream, recurse,
603 1.1 christos options, comma_needed, language);
604 1.1 christos continue;
605 1.1 christos }
606 1.1 christos
607 1.1 christos if (comma_needed)
608 1.1 christos fprintf_filtered (stream, ", ");
609 1.1 christos comma_needed = 1;
610 1.1 christos
611 1.1 christos if (options->prettyformat)
612 1.1 christos {
613 1.1 christos fprintf_filtered (stream, "\n");
614 1.1 christos print_spaces_filtered (2 + 2 * recurse, stream);
615 1.1 christos }
616 1.1 christos else
617 1.1 christos {
618 1.1 christos wrap_here (n_spaces (2 + 2 * recurse));
619 1.1 christos }
620 1.1.1.7 christos
621 1.1 christos annotate_field_begin (type->field (i).type ());
622 1.1 christos fprintf_filtered (stream, "%.*s",
623 1.1 christos ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
624 1.1 christos TYPE_FIELD_NAME (type, i));
625 1.1 christos annotate_field_name_end ();
626 1.1 christos fputs_filtered (" => ", stream);
627 1.1 christos annotate_field_value ();
628 1.1 christos
629 1.1 christos if (TYPE_FIELD_PACKED (type, i))
630 1.1 christos {
631 1.1 christos /* Bitfields require special handling, especially due to byte
632 1.1 christos order problems. */
633 1.1 christos if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
634 1.1.1.7 christos {
635 1.1.1.7 christos fputs_styled (_("<optimized out or zero length>"),
636 1.1 christos metadata_style.style (), stream);
637 1.1 christos }
638 1.1 christos else
639 1.1.1.5 christos {
640 1.1 christos struct value *v;
641 1.1 christos int bit_pos = TYPE_FIELD_BITPOS (type, i);
642 1.1 christos int bit_size = TYPE_FIELD_BITSIZE (type, i);
643 1.1 christos struct value_print_options opts;
644 1.1.1.7 christos
645 1.1 christos adjust_type_signedness (type->field (i).type ());
646 1.1.1.7 christos v = ada_value_primitive_packed_val
647 1.1.1.7 christos (value, nullptr,
648 1.1 christos bit_pos / HOST_CHAR_BIT,
649 1.1.1.7 christos bit_pos % HOST_CHAR_BIT,
650 1.1 christos bit_size, type->field (i).type ());
651 1.1 christos opts = *options;
652 1.1.1.7 christos opts.deref_ref = 0;
653 1.1 christos common_val_print (v, stream, recurse + 1, &opts, language);
654 1.1 christos }
655 1.1 christos }
656 1.1 christos else
657 1.1 christos {
658 1.1 christos struct value_print_options opts = *options;
659 1.1 christos
660 1.1.1.7 christos opts.deref_ref = 0;
661 1.1.1.7 christos
662 1.1.1.7 christos struct value *v = value_field (value, i);
663 1.1 christos common_val_print (v, stream, recurse + 1, &opts, language);
664 1.1 christos }
665 1.1 christos annotate_field_end ();
666 1.1 christos }
667 1.1 christos
668 1.1 christos return comma_needed;
669 1.1 christos }
670 1.1 christos
671 1.1 christos /* Implement Ada val_print'ing for the case where TYPE is
672 1.1 christos a TYPE_CODE_ARRAY of characters. */
673 1.1 christos
674 1.1 christos static void
675 1.1.1.7 christos ada_val_print_string (struct type *type, const gdb_byte *valaddr,
676 1.1 christos int offset_aligned,
677 1.1 christos struct ui_file *stream, int recurse,
678 1.1 christos const struct value_print_options *options)
679 1.1.1.7 christos {
680 1.1 christos enum bfd_endian byte_order = type_byte_order (type);
681 1.1 christos struct type *elttype = TYPE_TARGET_TYPE (type);
682 1.1 christos unsigned int eltlen;
683 1.1 christos unsigned int len;
684 1.1 christos
685 1.1 christos /* We know that ELTTYPE cannot possibly be null, because we assume
686 1.1 christos that we're called only when TYPE is a string-like type.
687 1.1 christos Similarly, the size of ELTTYPE should also be non-null, since
688 1.1 christos it's a character-like type. */
689 1.1 christos gdb_assert (elttype != NULL);
690 1.1 christos gdb_assert (TYPE_LENGTH (elttype) != 0);
691 1.1 christos
692 1.1 christos eltlen = TYPE_LENGTH (elttype);
693 1.1 christos len = TYPE_LENGTH (type) / eltlen;
694 1.1 christos
695 1.1 christos /* If requested, look for the first null char and only print
696 1.1 christos elements up to it. */
697 1.1 christos if (options->stop_print_at_null)
698 1.1 christos {
699 1.1 christos int temp_len;
700 1.1 christos
701 1.1 christos /* Look for a NULL char. */
702 1.1 christos for (temp_len = 0;
703 1.1 christos (temp_len < len
704 1.1 christos && temp_len < options->print_max
705 1.1 christos && char_at (valaddr + offset_aligned,
706 1.1 christos temp_len, eltlen, byte_order) != 0);
707 1.1 christos temp_len += 1);
708 1.1 christos len = temp_len;
709 1.1 christos }
710 1.1 christos
711 1.1 christos printstr (stream, elttype, valaddr + offset_aligned, len, 0,
712 1.1 christos eltlen, options);
713 1.1 christos }
714 1.1 christos
715 1.1 christos /* Implement Ada val_print-ing for GNAT arrays (Eg. fat pointers,
716 1.1 christos thin pointers, etc). */
717 1.1 christos
718 1.1.1.7 christos static void
719 1.1 christos ada_val_print_gnat_array (struct value *val,
720 1.1.1.7 christos struct ui_file *stream, int recurse,
721 1.1 christos const struct value_print_options *options)
722 1.1.1.7 christos {
723 1.1.1.7 christos scoped_value_mark free_values;
724 1.1.1.7 christos
725 1.1 christos struct type *type = ada_check_typedef (value_type (val));
726 1.1 christos
727 1.1 christos /* If this is a reference, coerce it now. This helps taking care
728 1.1 christos of the case where ADDRESS is meaningless because original_value
729 1.1 christos was not an lval. */
730 1.1.1.7 christos val = coerce_ref (val);
731 1.1 christos if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
732 1.1 christos val = ada_coerce_to_simple_array_ptr (val);
733 1.1 christos else
734 1.1 christos val = ada_coerce_to_simple_array (val);
735 1.1 christos if (val == NULL)
736 1.1.1.7 christos {
737 1.1 christos gdb_assert (type->code () == TYPE_CODE_TYPEDEF);
738 1.1 christos fprintf_filtered (stream, "0x0");
739 1.1 christos }
740 1.1.1.7 christos else
741 1.1.1.7 christos common_val_print (val, stream, recurse, options,
742 1.1 christos language_def (language_ada));
743 1.1 christos }
744 1.1.1.7 christos
745 1.1.1.7 christos /* Implement Ada value_print'ing for the case where TYPE is a
746 1.1 christos TYPE_CODE_PTR. */
747 1.1 christos
748 1.1.1.7 christos static void
749 1.1.1.7 christos ada_value_print_ptr (struct value *val,
750 1.1.1.7 christos struct ui_file *stream, int recurse,
751 1.1 christos const struct value_print_options *options)
752 1.1.1.7 christos {
753 1.1 christos common_val_print (val, stream, recurse, options, language_def (language_c));
754 1.1.1.7 christos
755 1.1 christos struct type *type = ada_check_typedef (value_type (val));
756 1.1 christos if (ada_is_tag_type (type))
757 1.1.1.7 christos {
758 1.1 christos gdb::unique_xmalloc_ptr<char> name = ada_tag_name (val);
759 1.1 christos
760 1.1.1.7 christos if (name != NULL)
761 1.1 christos fprintf_filtered (stream, " (%s)", name.get ());
762 1.1 christos }
763 1.1 christos }
764 1.1 christos
765 1.1 christos /* Implement Ada val_print'ing for the case where TYPE is
766 1.1 christos a TYPE_CODE_INT or TYPE_CODE_RANGE. */
767 1.1 christos
768 1.1.1.7 christos static void
769 1.1.1.7 christos ada_value_print_num (struct value *val, struct ui_file *stream, int recurse,
770 1.1 christos const struct value_print_options *options)
771 1.1.1.7 christos {
772 1.1.1.7 christos struct type *type = ada_check_typedef (value_type (val));
773 1.1.1.7 christos const gdb_byte *valaddr = value_contents_for_printing (val);
774 1.1.1.7 christos
775 1.1 christos if (ada_is_gnat_encoded_fixed_point_type (type))
776 1.1.1.6 christos {
777 1.1.1.7 christos struct value *scale = ada_scaling_factor (type);
778 1.1.1.7 christos val = value_cast (value_type (scale), val);
779 1.1.1.6 christos val = value_binop (val, scale, BINOP_MUL);
780 1.1.1.6 christos
781 1.1.1.6 christos const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11g" : "%.17g";
782 1.1.1.7 christos std::string str
783 1.1.1.6 christos = target_float_to_string (value_contents (val), value_type (val), fmt);
784 1.1 christos fputs_filtered (str.c_str (), stream);
785 1.1 christos return;
786 1.1.1.7 christos }
787 1.1.1.7 christos else if (type->code () == TYPE_CODE_RANGE
788 1.1.1.7 christos && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM
789 1.1.1.7 christos || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_BOOL
790 1.1.1.7 christos || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR))
791 1.1.1.7 christos {
792 1.1.1.7 christos /* For enum-valued ranges, we want to recurse, because we'll end
793 1.1.1.7 christos up printing the constant's name rather than its numeric
794 1.1.1.7 christos value. Character and fixed-point types are also printed
795 1.1 christos differently, so recuse for those as well. */
796 1.1.1.7 christos struct type *target_type = TYPE_TARGET_TYPE (type);
797 1.1.1.7 christos val = value_cast (target_type, val);
798 1.1.1.7 christos common_val_print (val, stream, recurse + 1, options,
799 1.1 christos language_def (language_ada));
800 1.1 christos return;
801 1.1 christos }
802 1.1 christos else
803 1.1 christos {
804 1.1 christos int format = (options->format ? options->format
805 1.1 christos : options->output_format);
806 1.1 christos
807 1.1 christos if (format)
808 1.1 christos {
809 1.1 christos struct value_print_options opts = *options;
810 1.1 christos
811 1.1.1.7 christos opts.format = format;
812 1.1 christos value_print_scalar_formatted (val, &opts, 0, stream);
813 1.1 christos }
814 1.1 christos else if (ada_is_system_address_type (type))
815 1.1 christos {
816 1.1 christos /* FIXME: We want to print System.Address variables using
817 1.1 christos the same format as for any access type. But for some
818 1.1 christos reason GNAT encodes the System.Address type as an int,
819 1.1 christos so we have to work-around this deficiency by handling
820 1.1 christos System.Address values as a special case. */
821 1.1 christos
822 1.1 christos struct gdbarch *gdbarch = get_type_arch (type);
823 1.1.1.7 christos struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
824 1.1 christos CORE_ADDR addr = extract_typed_address (valaddr, ptr_type);
825 1.1 christos
826 1.1 christos fprintf_filtered (stream, "(");
827 1.1 christos type_print (type, "", stream, -1);
828 1.1 christos fprintf_filtered (stream, ") ");
829 1.1 christos fputs_filtered (paddress (gdbarch, addr), stream);
830 1.1 christos }
831 1.1 christos else
832 1.1.1.7 christos {
833 1.1 christos value_print_scalar_formatted (val, options, 0, stream);
834 1.1 christos if (ada_is_character_type (type))
835 1.1 christos {
836 1.1 christos LONGEST c;
837 1.1 christos
838 1.1.1.7 christos fputs_filtered (" ", stream);
839 1.1 christos c = unpack_long (type, valaddr);
840 1.1 christos ada_printchar (c, type, stream);
841 1.1 christos }
842 1.1 christos }
843 1.1 christos return;
844 1.1 christos }
845 1.1 christos }
846 1.1 christos
847 1.1 christos /* Implement Ada val_print'ing for the case where TYPE is
848 1.1 christos a TYPE_CODE_ENUM. */
849 1.1 christos
850 1.1.1.7 christos static void
851 1.1.1.7 christos ada_val_print_enum (struct value *value, struct ui_file *stream, int recurse,
852 1.1 christos const struct value_print_options *options)
853 1.1 christos {
854 1.1 christos int i;
855 1.1 christos unsigned int len;
856 1.1 christos LONGEST val;
857 1.1 christos
858 1.1 christos if (options->format)
859 1.1.1.7 christos {
860 1.1 christos value_print_scalar_formatted (value, options, 0, stream);
861 1.1 christos return;
862 1.1 christos }
863 1.1.1.7 christos
864 1.1.1.7 christos struct type *type = ada_check_typedef (value_type (value));
865 1.1.1.7 christos const gdb_byte *valaddr = value_contents_for_printing (value);
866 1.1.1.7 christos int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
867 1.1.1.7 christos
868 1.1 christos len = type->num_fields ();
869 1.1 christos val = unpack_long (type, valaddr + offset_aligned);
870 1.1 christos for (i = 0; i < len; i++)
871 1.1 christos {
872 1.1 christos QUIT;
873 1.1 christos if (val == TYPE_FIELD_ENUMVAL (type, i))
874 1.1 christos break;
875 1.1 christos }
876 1.1 christos
877 1.1 christos if (i < len)
878 1.1 christos {
879 1.1 christos const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
880 1.1 christos
881 1.1.1.7 christos if (name[0] == '\'')
882 1.1.1.7 christos fprintf_filtered (stream, "%ld %ps", (long) val,
883 1.1.1.7 christos styled_string (variable_name_style.style (),
884 1.1 christos name));
885 1.1.1.7 christos else
886 1.1 christos fputs_styled (name, variable_name_style.style (), stream);
887 1.1 christos }
888 1.1 christos else
889 1.1 christos print_longest (stream, 'd', 0, val);
890 1.1 christos }
891 1.1.1.7 christos
892 1.1.1.7 christos /* Implement Ada val_print'ing for the case where the type is
893 1.1 christos TYPE_CODE_STRUCT or TYPE_CODE_UNION. */
894 1.1 christos
895 1.1.1.7 christos static void
896 1.1.1.7 christos ada_val_print_struct_union (struct value *value,
897 1.1.1.7 christos struct ui_file *stream,
898 1.1.1.7 christos int recurse,
899 1.1 christos const struct value_print_options *options)
900 1.1.1.7 christos {
901 1.1 christos if (ada_is_bogus_array_descriptor (value_type (value)))
902 1.1 christos {
903 1.1 christos fprintf_filtered (stream, "(...?)");
904 1.1 christos return;
905 1.1 christos }
906 1.1 christos
907 1.1 christos fprintf_filtered (stream, "(");
908 1.1.1.7 christos
909 1.1.1.7 christos if (print_field_values (value, value, stream, recurse, options,
910 1.1 christos 0, language_def (language_ada)) != 0
911 1.1 christos && options->prettyformat)
912 1.1 christos {
913 1.1 christos fprintf_filtered (stream, "\n");
914 1.1 christos print_spaces_filtered (2 * recurse, stream);
915 1.1 christos }
916 1.1 christos
917 1.1 christos fprintf_filtered (stream, ")");
918 1.1 christos }
919 1.1.1.7 christos
920 1.1.1.7 christos /* Implement Ada value_print'ing for the case where TYPE is a
921 1.1 christos TYPE_CODE_ARRAY. */
922 1.1 christos
923 1.1.1.7 christos static void
924 1.1.1.7 christos ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
925 1.1 christos const struct value_print_options *options)
926 1.1.1.7 christos {
927 1.1.1.7 christos struct type *type = ada_check_typedef (value_type (val));
928 1.1 christos
929 1.1 christos /* For an array of characters, print with string syntax. */
930 1.1 christos if (ada_is_string_type (type)
931 1.1 christos && (options->format == 0 || options->format == 's'))
932 1.1.1.7 christos {
933 1.1.1.7 christos const gdb_byte *valaddr = value_contents_for_printing (val);
934 1.1.1.7 christos int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
935 1.1.1.7 christos
936 1.1 christos ada_val_print_string (type, valaddr, offset_aligned, stream, recurse,
937 1.1 christos options);
938 1.1 christos return;
939 1.1 christos }
940 1.1 christos
941 1.1 christos fprintf_filtered (stream, "(");
942 1.1 christos print_optional_low_bound (stream, type, options);
943 1.1.1.7 christos if (TYPE_FIELD_BITSIZE (type, 0) > 0)
944 1.1.1.7 christos {
945 1.1.1.7 christos const gdb_byte *valaddr = value_contents_for_printing (val);
946 1.1.1.7 christos int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr;
947 1.1.1.7 christos val_print_packed_array_elements (type, valaddr, offset_aligned,
948 1.1.1.7 christos stream, recurse, options);
949 1.1 christos }
950 1.1.1.7 christos else
951 1.1 christos value_print_array_elements (val, stream, recurse, options, 0);
952 1.1 christos fprintf_filtered (stream, ")");
953 1.1 christos }
954 1.1 christos
955 1.1 christos /* Implement Ada val_print'ing for the case where TYPE is
956 1.1 christos a TYPE_CODE_REF. */
957 1.1 christos
958 1.1 christos static void
959 1.1 christos ada_val_print_ref (struct type *type, const gdb_byte *valaddr,
960 1.1 christos int offset, int offset_aligned, CORE_ADDR address,
961 1.1.1.5 christos struct ui_file *stream, int recurse,
962 1.1.1.7 christos struct value *original_value,
963 1.1 christos const struct value_print_options *options)
964 1.1 christos {
965 1.1 christos /* For references, the debugger is expected to print the value as
966 1.1 christos an address if DEREF_REF is null. But printing an address in place
967 1.1 christos of the object value would be confusing to an Ada programmer.
968 1.1 christos So, for Ada values, we print the actual dereferenced value
969 1.1 christos regardless. */
970 1.1 christos struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type));
971 1.1 christos struct value *deref_val;
972 1.1 christos CORE_ADDR deref_val_int;
973 1.1.1.7 christos
974 1.1 christos if (elttype->code () == TYPE_CODE_UNDEF)
975 1.1.1.7 christos {
976 1.1.1.7 christos fputs_styled ("<ref to undefined type>", metadata_style.style (),
977 1.1 christos stream);
978 1.1 christos return;
979 1.1 christos }
980 1.1 christos
981 1.1 christos deref_val = coerce_ref_if_computed (original_value);
982 1.1 christos if (deref_val)
983 1.1 christos {
984 1.1 christos if (ada_is_tagged_type (value_type (deref_val), 1))
985 1.1 christos deref_val = ada_tag_value_at_base_address (deref_val);
986 1.1 christos
987 1.1.1.7 christos common_val_print (deref_val, stream, recurse + 1, options,
988 1.1 christos language_def (language_ada));
989 1.1 christos return;
990 1.1 christos }
991 1.1 christos
992 1.1 christos deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
993 1.1 christos if (deref_val_int == 0)
994 1.1 christos {
995 1.1 christos fputs_filtered ("(null)", stream);
996 1.1 christos return;
997 1.1 christos }
998 1.1 christos
999 1.1 christos deref_val
1000 1.1 christos = ada_value_ind (value_from_pointer (lookup_pointer_type (elttype),
1001 1.1 christos deref_val_int));
1002 1.1 christos if (ada_is_tagged_type (value_type (deref_val), 1))
1003 1.1 christos deref_val = ada_tag_value_at_base_address (deref_val);
1004 1.1.1.2 christos
1005 1.1.1.2 christos /* Make sure that the object does not have an unreasonable size
1006 1.1.1.2 christos before trying to print it. This can happen for instance with
1007 1.1.1.2 christos references to dynamic objects whose contents is uninitialized
1008 1.1.1.2 christos (Eg: an array whose bounds are not set yet). */
1009 1.1.1.2 christos ada_ensure_varsize_limit (value_type (deref_val));
1010 1.1.1.5 christos
1011 1.1.1.5 christos if (value_lazy (deref_val))
1012 1.1.1.5 christos value_fetch_lazy (deref_val);
1013 1.1.1.7 christos
1014 1.1.1.7 christos common_val_print (deref_val, stream, recurse + 1,
1015 1.1 christos options, language_def (language_ada));
1016 1.1 christos }
1017 1.1.1.7 christos
1018 1.1.1.7 christos /* See the comment on ada_value_print. This function differs in that
1019 1.1.1.7 christos it does not catch evaluation errors (leaving that to
1020 1.1 christos ada_value_print). */
1021 1.1 christos
1022 1.1.1.7 christos static void
1023 1.1.1.7 christos ada_value_print_1 (struct value *val, struct ui_file *stream, int recurse,
1024 1.1 christos const struct value_print_options *options)
1025 1.1.1.7 christos {
1026 1.1 christos struct type *type = ada_check_typedef (value_type (val));
1027 1.1 christos
1028 1.1 christos if (ada_is_array_descriptor_type (type)
1029 1.1.1.7 christos || (ada_is_constrained_packed_array_type (type)
1030 1.1 christos && type->code () != TYPE_CODE_PTR))
1031 1.1.1.7 christos {
1032 1.1 christos ada_val_print_gnat_array (val, stream, recurse, options);
1033 1.1 christos return;
1034 1.1 christos }
1035 1.1.1.7 christos
1036 1.1.1.7 christos val = ada_to_fixed_value (val);
1037 1.1.1.7 christos type = value_type (val);
1038 1.1 christos struct type *saved_type = type;
1039 1.1.1.7 christos
1040 1.1.1.7 christos const gdb_byte *valaddr = value_contents_for_printing (val);
1041 1.1.1.7 christos CORE_ADDR address = value_address (val);
1042 1.1.1.7 christos gdb::array_view<const gdb_byte> view
1043 1.1.1.7 christos = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
1044 1.1.1.7 christos type = ada_check_typedef (resolve_dynamic_type (type, view, address));
1045 1.1.1.7 christos if (type != saved_type)
1046 1.1.1.7 christos {
1047 1.1.1.7 christos val = value_copy (val);
1048 1.1.1.7 christos deprecated_set_value_type (val, type);
1049 1.1.1.7 christos }
1050 1.1.1.7 christos
1051 1.1 christos switch (type->code ())
1052 1.1 christos {
1053 1.1.1.7 christos default:
1054 1.1.1.7 christos common_val_print (val, stream, recurse, options,
1055 1.1 christos language_def (language_c));
1056 1.1 christos break;
1057 1.1 christos
1058 1.1.1.7 christos case TYPE_CODE_PTR:
1059 1.1 christos ada_value_print_ptr (val, stream, recurse, options);
1060 1.1 christos break;
1061 1.1 christos
1062 1.1 christos case TYPE_CODE_INT:
1063 1.1.1.7 christos case TYPE_CODE_RANGE:
1064 1.1 christos ada_value_print_num (val, stream, recurse, options);
1065 1.1 christos break;
1066 1.1 christos
1067 1.1.1.7 christos case TYPE_CODE_ENUM:
1068 1.1 christos ada_val_print_enum (val, stream, recurse, options);
1069 1.1 christos break;
1070 1.1 christos
1071 1.1.1.7 christos case TYPE_CODE_FLT:
1072 1.1.1.7 christos if (options->format)
1073 1.1.1.7 christos {
1074 1.1.1.7 christos common_val_print (val, stream, recurse, options,
1075 1.1.1.7 christos language_def (language_c));
1076 1.1.1.7 christos break;
1077 1.1.1.7 christos }
1078 1.1.1.7 christos
1079 1.1 christos ada_print_floating (valaddr, type, stream);
1080 1.1 christos break;
1081 1.1 christos
1082 1.1 christos case TYPE_CODE_UNION:
1083 1.1.1.7 christos case TYPE_CODE_STRUCT:
1084 1.1 christos ada_val_print_struct_union (val, stream, recurse, options);
1085 1.1 christos break;
1086 1.1 christos
1087 1.1.1.7 christos case TYPE_CODE_ARRAY:
1088 1.1 christos ada_value_print_array (val, stream, recurse, options);
1089 1.1 christos return;
1090 1.1 christos
1091 1.1.1.7 christos case TYPE_CODE_REF:
1092 1.1.1.7 christos ada_val_print_ref (type, valaddr, 0, 0,
1093 1.1.1.7 christos address, stream, recurse, val,
1094 1.1 christos options);
1095 1.1 christos break;
1096 1.1 christos }
1097 1.1 christos }
1098 1.1.1.7 christos
1099 1.1 christos /* See ada-lang.h. */
1100 1.1 christos
1101 1.1.1.7 christos void
1102 1.1.1.7 christos ada_value_print_inner (struct value *val, struct ui_file *stream,
1103 1.1.1.7 christos int recurse,
1104 1.1 christos const struct value_print_options *options)
1105 1.1.1.7 christos {
1106 1.1 christos try
1107 1.1.1.7 christos {
1108 1.1 christos ada_value_print_1 (val, stream, recurse, options);
1109 1.1.1.7 christos }
1110 1.1.1.3 christos catch (const gdb_exception_error &except)
1111 1.1.1.7 christos {
1112 1.1.1.7 christos fprintf_styled (stream, metadata_style.style (),
1113 1.1.1.7 christos _("<error reading variable: %s>"),
1114 1.1.1.3 christos except.what ());
1115 1.1 christos }
1116 1.1 christos }
1117 1.1 christos
1118 1.1 christos void
1119 1.1 christos ada_value_print (struct value *val0, struct ui_file *stream,
1120 1.1 christos const struct value_print_options *options)
1121 1.1 christos {
1122 1.1.1.6 christos struct value *val = ada_to_fixed_value (val0);
1123 1.1 christos struct type *type = ada_check_typedef (value_type (val));
1124 1.1 christos struct value_print_options opts;
1125 1.1 christos
1126 1.1.1.7 christos /* If it is a pointer, indicate what it points to. */
1127 1.1 christos if (type->code () == TYPE_CODE_PTR)
1128 1.1 christos {
1129 1.1 christos /* Hack: don't print (char *) for char strings. Their
1130 1.1 christos type is indicated by the quoted string anyway. */
1131 1.1.1.7 christos if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
1132 1.1 christos || TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_INT
1133 1.1 christos || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
1134 1.1 christos {
1135 1.1 christos fprintf_filtered (stream, "(");
1136 1.1 christos type_print (type, "", stream, -1);
1137 1.1 christos fprintf_filtered (stream, ") ");
1138 1.1 christos }
1139 1.1 christos }
1140 1.1 christos else if (ada_is_array_descriptor_type (type))
1141 1.1 christos {
1142 1.1 christos /* We do not print the type description unless TYPE is an array
1143 1.1 christos access type (this is encoded by the compiler as a typedef to
1144 1.1.1.7 christos a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
1145 1.1 christos if (type->code () == TYPE_CODE_TYPEDEF)
1146 1.1 christos {
1147 1.1 christos fprintf_filtered (stream, "(");
1148 1.1 christos type_print (type, "", stream, -1);
1149 1.1 christos fprintf_filtered (stream, ") ");
1150 1.1 christos }
1151 1.1 christos }
1152 1.1 christos else if (ada_is_bogus_array_descriptor (type))
1153 1.1 christos {
1154 1.1 christos fprintf_filtered (stream, "(");
1155 1.1 christos type_print (type, "", stream, -1);
1156 1.1 christos fprintf_filtered (stream, ") (...?)");
1157 1.1 christos return;
1158 1.1 christos }
1159 1.1 christos
1160 1.1 christos opts = *options;
1161 1.1.1.7 christos opts.deref_ref = 1;
1162 1.1 christos common_val_print (val, stream, 0, &opts, current_language);
1163 }
1164