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