Convert generic probe interface to C++ (and perform some cleanups)
[external/binutils.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 }