Remove for_each_inferior
[deliverable/binutils-gdb.git] / gdb / f-valprint.c
1 /* Support for printing Fortran values for GDB, the GNU debugger.
2
3 Copyright (C) 1993-2017 Free Software Foundation, Inc.
4
5 Contributed by Motorola. Adapted from the C definitions by Farooq Butt
6 (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
23 #include "defs.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "value.h"
28 #include "valprint.h"
29 #include "language.h"
30 #include "f-lang.h"
31 #include "frame.h"
32 #include "gdbcore.h"
33 #include "command.h"
34 #include "block.h"
35 #include "dictionary.h"
36
37 static void f77_get_dynamic_length_of_aggregate (struct type *);
38
39 int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
40
41 /* Array which holds offsets to be applied to get a row's elements
42 for a given array. Array also holds the size of each subarray. */
43
44 int
45 f77_get_lowerbound (struct type *type)
46 {
47 if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
48 error (_("Lower bound may not be '*' in F77"));
49
50 return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
51 }
52
53 int
54 f77_get_upperbound (struct type *type)
55 {
56 if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
57 {
58 /* We have an assumed size array on our hands. Assume that
59 upper_bound == lower_bound so that we show at least 1 element.
60 If the user wants to see more elements, let him manually ask for 'em
61 and we'll subscript the array and show him. */
62
63 return f77_get_lowerbound (type);
64 }
65
66 return TYPE_ARRAY_UPPER_BOUND_VALUE (type);
67 }
68
69 /* Obtain F77 adjustable array dimensions. */
70
71 static void
72 f77_get_dynamic_length_of_aggregate (struct type *type)
73 {
74 int upper_bound = -1;
75 int lower_bound = 1;
76
77 /* Recursively go all the way down into a possibly multi-dimensional
78 F77 array and get the bounds. For simple arrays, this is pretty
79 easy but when the bounds are dynamic, we must be very careful
80 to add up all the lengths correctly. Not doing this right
81 will lead to horrendous-looking arrays in parameter lists.
82
83 This function also works for strings which behave very
84 similarly to arrays. */
85
86 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY
87 || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRING)
88 f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type));
89
90 /* Recursion ends here, start setting up lengths. */
91 lower_bound = f77_get_lowerbound (type);
92 upper_bound = f77_get_upperbound (type);
93
94 /* Patch in a valid length value. */
95
96 TYPE_LENGTH (type) =
97 (upper_bound - lower_bound + 1)
98 * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
99 }
100
101 /* Actual function which prints out F77 arrays, Valaddr == address in
102 the superior. Address == the address in the inferior. */
103
104 static void
105 f77_print_array_1 (int nss, int ndimensions, struct type *type,
106 const gdb_byte *valaddr,
107 int embedded_offset, CORE_ADDR address,
108 struct ui_file *stream, int recurse,
109 const struct value *val,
110 const struct value_print_options *options,
111 int *elts)
112 {
113 struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type));
114 CORE_ADDR addr = address + embedded_offset;
115 LONGEST lowerbound, upperbound;
116 int i;
117
118 get_discrete_bounds (range_type, &lowerbound, &upperbound);
119
120 if (nss != ndimensions)
121 {
122 size_t dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type));
123 size_t offs = 0;
124
125 for (i = lowerbound;
126 (i < upperbound + 1 && (*elts) < options->print_max);
127 i++)
128 {
129 struct value *subarray = value_from_contents_and_address
130 (TYPE_TARGET_TYPE (type), value_contents_for_printing_const (val)
131 + offs, addr + offs);
132
133 fprintf_filtered (stream, "( ");
134 f77_print_array_1 (nss + 1, ndimensions, value_type (subarray),
135 value_contents_for_printing (subarray),
136 value_embedded_offset (subarray),
137 value_address (subarray),
138 stream, recurse, subarray, options, elts);
139 offs += dim_size;
140 fprintf_filtered (stream, ") ");
141 }
142 if (*elts >= options->print_max && i < upperbound)
143 fprintf_filtered (stream, "...");
144 }
145 else
146 {
147 for (i = lowerbound; i < upperbound + 1 && (*elts) < options->print_max;
148 i++, (*elts)++)
149 {
150 struct value *elt = value_subscript ((struct value *)val, i);
151
152 val_print (value_type (elt),
153 value_embedded_offset (elt),
154 value_address (elt), stream, recurse,
155 elt, options, current_language);
156
157 if (i != upperbound)
158 fprintf_filtered (stream, ", ");
159
160 if ((*elts == options->print_max - 1)
161 && (i != upperbound))
162 fprintf_filtered (stream, "...");
163 }
164 }
165 }
166
167 /* This function gets called to print an F77 array, we set up some
168 stuff and then immediately call f77_print_array_1(). */
169
170 static void
171 f77_print_array (struct type *type, const gdb_byte *valaddr,
172 int embedded_offset,
173 CORE_ADDR address, struct ui_file *stream,
174 int recurse,
175 const struct value *val,
176 const struct value_print_options *options)
177 {
178 int ndimensions;
179 int elts = 0;
180
181 ndimensions = calc_f77_array_dims (type);
182
183 if (ndimensions > MAX_FORTRAN_DIMS || ndimensions < 0)
184 error (_("\
185 Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
186 ndimensions, MAX_FORTRAN_DIMS);
187
188 f77_print_array_1 (1, ndimensions, type, valaddr, embedded_offset,
189 address, stream, recurse, val, options, &elts);
190 }
191 \f
192
193 /* Decorations for Fortran. */
194
195 static const struct generic_val_print_decorations f_decorations =
196 {
197 "(",
198 ",",
199 ")",
200 ".TRUE.",
201 ".FALSE.",
202 "VOID",
203 "{",
204 "}"
205 };
206
207 /* See val_print for a description of the various parameters of this
208 function; they are identical. */
209
210 void
211 f_val_print (struct type *type, int embedded_offset,
212 CORE_ADDR address, struct ui_file *stream, int recurse,
213 struct value *original_value,
214 const struct value_print_options *options)
215 {
216 struct gdbarch *gdbarch = get_type_arch (type);
217 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
218 int printed_field = 0; /* Number of fields printed. */
219 struct type *elttype;
220 CORE_ADDR addr;
221 int index;
222 const gdb_byte *valaddr =value_contents_for_printing (original_value);
223
224 type = check_typedef (type);
225 switch (TYPE_CODE (type))
226 {
227 case TYPE_CODE_STRING:
228 f77_get_dynamic_length_of_aggregate (type);
229 LA_PRINT_STRING (stream, builtin_type (gdbarch)->builtin_char,
230 valaddr + embedded_offset,
231 TYPE_LENGTH (type), NULL, 0, options);
232 break;
233
234 case TYPE_CODE_ARRAY:
235 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_CHAR)
236 {
237 fprintf_filtered (stream, "(");
238 f77_print_array (type, valaddr, embedded_offset,
239 address, stream, recurse, original_value, options);
240 fprintf_filtered (stream, ")");
241 }
242 else
243 {
244 struct type *ch_type = TYPE_TARGET_TYPE (type);
245
246 f77_get_dynamic_length_of_aggregate (type);
247 LA_PRINT_STRING (stream, ch_type,
248 valaddr + embedded_offset,
249 TYPE_LENGTH (type) / TYPE_LENGTH (ch_type),
250 NULL, 0, options);
251 }
252 break;
253
254 case TYPE_CODE_PTR:
255 if (options->format && options->format != 's')
256 {
257 val_print_scalar_formatted (type, embedded_offset,
258 original_value, options, 0, stream);
259 break;
260 }
261 else
262 {
263 int want_space = 0;
264
265 addr = unpack_pointer (type, valaddr + embedded_offset);
266 elttype = check_typedef (TYPE_TARGET_TYPE (type));
267
268 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
269 {
270 /* Try to print what function it points to. */
271 print_function_pointer_address (options, gdbarch, addr, stream);
272 return;
273 }
274
275 if (options->symbol_print)
276 want_space = print_address_demangle (options, gdbarch, addr,
277 stream, demangle);
278 else if (options->addressprint && options->format != 's')
279 {
280 fputs_filtered (paddress (gdbarch, addr), stream);
281 want_space = 1;
282 }
283
284 /* For a pointer to char or unsigned char, also print the string
285 pointed to, unless pointer is null. */
286 if (TYPE_LENGTH (elttype) == 1
287 && TYPE_CODE (elttype) == TYPE_CODE_INT
288 && (options->format == 0 || options->format == 's')
289 && addr != 0)
290 {
291 if (want_space)
292 fputs_filtered (" ", stream);
293 val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
294 stream, options);
295 }
296 return;
297 }
298 break;
299
300 case TYPE_CODE_INT:
301 if (options->format || options->output_format)
302 {
303 struct value_print_options opts = *options;
304
305 opts.format = (options->format ? options->format
306 : options->output_format);
307 val_print_scalar_formatted (type, embedded_offset,
308 original_value, &opts, 0, stream);
309 }
310 else
311 val_print_scalar_formatted (type, embedded_offset,
312 original_value, options, 0, stream);
313 break;
314
315 case TYPE_CODE_STRUCT:
316 case TYPE_CODE_UNION:
317 /* Starting from the Fortran 90 standard, Fortran supports derived
318 types. */
319 fprintf_filtered (stream, "( ");
320 for (index = 0; index < TYPE_NFIELDS (type); index++)
321 {
322 struct value *field = value_field
323 ((struct value *)original_value, index);
324
325 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, index));
326
327
328 if (TYPE_CODE (field_type) != TYPE_CODE_FUNC)
329 {
330 const char *field_name;
331
332 if (printed_field > 0)
333 fputs_filtered (", ", stream);
334
335 field_name = TYPE_FIELD_NAME (type, index);
336 if (field_name != NULL)
337 {
338 fputs_filtered (field_name, stream);
339 fputs_filtered (" = ", stream);
340 }
341
342 val_print (value_type (field),
343 value_embedded_offset (field),
344 value_address (field), stream, recurse + 1,
345 field, options, current_language);
346
347 ++printed_field;
348 }
349 }
350 fprintf_filtered (stream, " )");
351 break;
352
353 case TYPE_CODE_REF:
354 case TYPE_CODE_FUNC:
355 case TYPE_CODE_FLAGS:
356 case TYPE_CODE_FLT:
357 case TYPE_CODE_VOID:
358 case TYPE_CODE_ERROR:
359 case TYPE_CODE_RANGE:
360 case TYPE_CODE_UNDEF:
361 case TYPE_CODE_COMPLEX:
362 case TYPE_CODE_BOOL:
363 case TYPE_CODE_CHAR:
364 default:
365 generic_val_print (type, embedded_offset, address,
366 stream, recurse, original_value, options,
367 &f_decorations);
368 break;
369 }
370 gdb_flush (stream);
371 }
372
373 static void
374 info_common_command_for_block (const struct block *block, const char *comname,
375 int *any_printed)
376 {
377 struct block_iterator iter;
378 struct symbol *sym;
379 const char *name;
380 struct value_print_options opts;
381
382 get_user_print_options (&opts);
383
384 ALL_BLOCK_SYMBOLS (block, iter, sym)
385 if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
386 {
387 const struct common_block *common = SYMBOL_VALUE_COMMON_BLOCK (sym);
388 size_t index;
389
390 gdb_assert (SYMBOL_CLASS (sym) == LOC_COMMON_BLOCK);
391
392 if (comname && (!SYMBOL_LINKAGE_NAME (sym)
393 || strcmp (comname, SYMBOL_LINKAGE_NAME (sym)) != 0))
394 continue;
395
396 if (*any_printed)
397 putchar_filtered ('\n');
398 else
399 *any_printed = 1;
400 if (SYMBOL_PRINT_NAME (sym))
401 printf_filtered (_("Contents of F77 COMMON block '%s':\n"),
402 SYMBOL_PRINT_NAME (sym));
403 else
404 printf_filtered (_("Contents of blank COMMON block:\n"));
405
406 for (index = 0; index < common->n_entries; index++)
407 {
408 struct value *val = NULL;
409
410 printf_filtered ("%s = ",
411 SYMBOL_PRINT_NAME (common->contents[index]));
412
413 TRY
414 {
415 val = value_of_variable (common->contents[index], block);
416 value_print (val, gdb_stdout, &opts);
417 }
418
419 CATCH (except, RETURN_MASK_ERROR)
420 {
421 printf_filtered ("<error reading variable: %s>", except.message);
422 }
423 END_CATCH
424
425 putchar_filtered ('\n');
426 }
427 }
428 }
429
430 /* This function is used to print out the values in a given COMMON
431 block. It will always use the most local common block of the
432 given name. */
433
434 static void
435 info_common_command (const char *comname, int from_tty)
436 {
437 struct frame_info *fi;
438 const struct block *block;
439 int values_printed = 0;
440
441 /* We have been told to display the contents of F77 COMMON
442 block supposedly visible in this function. Let us
443 first make sure that it is visible and if so, let
444 us display its contents. */
445
446 fi = get_selected_frame (_("No frame selected"));
447
448 /* The following is generally ripped off from stack.c's routine
449 print_frame_info(). */
450
451 block = get_frame_block (fi, 0);
452 if (block == NULL)
453 {
454 printf_filtered (_("No symbol table info available.\n"));
455 return;
456 }
457
458 while (block)
459 {
460 info_common_command_for_block (block, comname, &values_printed);
461 /* After handling the function's top-level block, stop. Don't
462 continue to its superblock, the block of per-file symbols. */
463 if (BLOCK_FUNCTION (block))
464 break;
465 block = BLOCK_SUPERBLOCK (block);
466 }
467
468 if (!values_printed)
469 {
470 if (comname)
471 printf_filtered (_("No common block '%s'.\n"), comname);
472 else
473 printf_filtered (_("No common blocks.\n"));
474 }
475 }
476
477 void
478 _initialize_f_valprint (void)
479 {
480 add_info ("common", info_common_command,
481 _("Print out the values contained in a Fortran COMMON block."));
482 }
This page took 0.0495370000000001 seconds and 4 git commands to generate.