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