Upload Tizen:Base source
[external/gdb.git] / gdb / f-valprint.c
1 /* Support for printing Fortran values for GDB, the GNU debugger.
2
3    Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2003, 2005, 2006,
4    2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5
6    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
7    (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs.
8
9    This file is part of GDB.
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3 of the License, or
14    (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
24 #include "defs.h"
25 #include "gdb_string.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "expression.h"
29 #include "value.h"
30 #include "valprint.h"
31 #include "language.h"
32 #include "f-lang.h"
33 #include "frame.h"
34 #include "gdbcore.h"
35 #include "command.h"
36 #include "block.h"
37
38 #if 0
39 static int there_is_a_visible_common_named (char *);
40 #endif
41
42 extern void _initialize_f_valprint (void);
43 static void info_common_command (char *, int);
44 static void list_all_visible_commons (char *);
45 static void f77_create_arrayprint_offset_tbl (struct type *,
46                                               struct ui_file *);
47 static void f77_get_dynamic_length_of_aggregate (struct type *);
48
49 int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
50
51 /* Array which holds offsets to be applied to get a row's elements
52    for a given array. Array also holds the size of each subarray.  */
53
54 /* The following macro gives us the size of the nth dimension, Where 
55    n is 1 based. */
56
57 #define F77_DIM_SIZE(n) (f77_array_offset_tbl[n][1])
58
59 /* The following gives us the offset for row n where n is 1-based. */
60
61 #define F77_DIM_OFFSET(n) (f77_array_offset_tbl[n][0])
62
63 int
64 f77_get_lowerbound (struct type *type)
65 {
66   if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
67     error (_("Lower bound may not be '*' in F77"));
68
69   return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
70 }
71
72 int
73 f77_get_upperbound (struct type *type)
74 {
75   if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
76     {
77       /* We have an assumed size array on our hands.  Assume that
78          upper_bound == lower_bound so that we show at least 1 element.
79          If the user wants to see more elements, let him manually ask for 'em
80          and we'll subscript the array and show him.  */
81
82       return f77_get_lowerbound (type);
83     }
84
85   return TYPE_ARRAY_UPPER_BOUND_VALUE (type);
86 }
87
88 /* Obtain F77 adjustable array dimensions */
89
90 static void
91 f77_get_dynamic_length_of_aggregate (struct type *type)
92 {
93   int upper_bound = -1;
94   int lower_bound = 1;
95
96   /* Recursively go all the way down into a possibly multi-dimensional
97      F77 array and get the bounds.  For simple arrays, this is pretty
98      easy but when the bounds are dynamic, we must be very careful 
99      to add up all the lengths correctly.  Not doing this right 
100      will lead to horrendous-looking arrays in parameter lists.
101
102      This function also works for strings which behave very 
103      similarly to arrays.  */
104
105   if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY
106       || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRING)
107     f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type));
108
109   /* Recursion ends here, start setting up lengths.  */
110   lower_bound = f77_get_lowerbound (type);
111   upper_bound = f77_get_upperbound (type);
112
113   /* Patch in a valid length value. */
114
115   TYPE_LENGTH (type) =
116     (upper_bound - lower_bound + 1) * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
117 }
118
119 /* Function that sets up the array offset,size table for the array 
120    type "type".  */
121
122 static void
123 f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream)
124 {
125   struct type *tmp_type;
126   int eltlen;
127   int ndimen = 1;
128   int upper, lower;
129
130   tmp_type = type;
131
132   while ((TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY))
133     {
134       upper = f77_get_upperbound (tmp_type);
135       lower = f77_get_lowerbound (tmp_type);
136
137       F77_DIM_SIZE (ndimen) = upper - lower + 1;
138
139       tmp_type = TYPE_TARGET_TYPE (tmp_type);
140       ndimen++;
141     }
142
143   /* Now we multiply eltlen by all the offsets, so that later we 
144      can print out array elements correctly.  Up till now we 
145      know an offset to apply to get the item but we also 
146      have to know how much to add to get to the next item */
147
148   ndimen--;
149   eltlen = TYPE_LENGTH (tmp_type);
150   F77_DIM_OFFSET (ndimen) = eltlen;
151   while (--ndimen > 0)
152     {
153       eltlen *= F77_DIM_SIZE (ndimen + 1);
154       F77_DIM_OFFSET (ndimen) = eltlen;
155     }
156 }
157
158
159
160 /* Actual function which prints out F77 arrays, Valaddr == address in 
161    the superior.  Address == the address in the inferior.  */
162
163 static void
164 f77_print_array_1 (int nss, int ndimensions, struct type *type,
165                    const gdb_byte *valaddr, CORE_ADDR address,
166                    struct ui_file *stream, int recurse,
167                    const struct value *val,
168                    const struct value_print_options *options,
169                    int *elts)
170 {
171   int i;
172
173   if (nss != ndimensions)
174     {
175       for (i = 0; (i < F77_DIM_SIZE (nss) && (*elts) < options->print_max); i++)
176         {
177           fprintf_filtered (stream, "( ");
178           f77_print_array_1 (nss + 1, ndimensions, TYPE_TARGET_TYPE (type),
179                              valaddr + i * F77_DIM_OFFSET (nss),
180                              address + i * F77_DIM_OFFSET (nss),
181                              stream, recurse, val, options, elts);
182           fprintf_filtered (stream, ") ");
183         }
184       if (*elts >= options->print_max && i < F77_DIM_SIZE (nss)) 
185         fprintf_filtered (stream, "...");
186     }
187   else
188     {
189       for (i = 0; i < F77_DIM_SIZE (nss) && (*elts) < options->print_max;
190            i++, (*elts)++)
191         {
192           val_print (TYPE_TARGET_TYPE (type),
193                      valaddr + i * F77_DIM_OFFSET (ndimensions),
194                      0,
195                      address + i * F77_DIM_OFFSET (ndimensions),
196                      stream, recurse, val, options, current_language);
197
198           if (i != (F77_DIM_SIZE (nss) - 1))
199             fprintf_filtered (stream, ", ");
200
201           if ((*elts == options->print_max - 1)
202               && (i != (F77_DIM_SIZE (nss) - 1)))
203             fprintf_filtered (stream, "...");
204         }
205     }
206 }
207
208 /* This function gets called to print an F77 array, we set up some 
209    stuff and then immediately call f77_print_array_1() */
210
211 static void
212 f77_print_array (struct type *type, const gdb_byte *valaddr,
213                  CORE_ADDR address, struct ui_file *stream,
214                  int recurse,
215                  const struct value *val,
216                  const struct value_print_options *options)
217 {
218   int ndimensions;
219   int elts = 0;
220
221   ndimensions = calc_f77_array_dims (type);
222
223   if (ndimensions > MAX_FORTRAN_DIMS || ndimensions < 0)
224     error (_("Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
225            ndimensions, MAX_FORTRAN_DIMS);
226
227   /* Since F77 arrays are stored column-major, we set up an 
228      offset table to get at the various row's elements. The 
229      offset table contains entries for both offset and subarray size. */
230
231   f77_create_arrayprint_offset_tbl (type, stream);
232
233   f77_print_array_1 (1, ndimensions, type, valaddr, address, stream,
234                      recurse, val, options, &elts);
235 }
236 \f
237
238 /* Print data of type TYPE located at VALADDR (within GDB), which came from
239    the inferior at address ADDRESS, onto stdio stream STREAM according to
240    OPTIONS.  The data at VALADDR is in target byte order.
241
242    If the data are a string pointer, returns the number of string characters
243    printed.  */
244
245 int
246 f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
247              CORE_ADDR address, struct ui_file *stream, int recurse,
248              const struct value *original_value,
249              const struct value_print_options *options)
250 {
251   struct gdbarch *gdbarch = get_type_arch (type);
252   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
253   unsigned int i = 0;   /* Number of characters printed */
254   struct type *elttype;
255   LONGEST val;
256   CORE_ADDR addr;
257   int index;
258
259   CHECK_TYPEDEF (type);
260   switch (TYPE_CODE (type))
261     {
262     case TYPE_CODE_STRING:
263       f77_get_dynamic_length_of_aggregate (type);
264       LA_PRINT_STRING (stream, builtin_type (gdbarch)->builtin_char,
265                        valaddr, TYPE_LENGTH (type), NULL, 0, options);
266       break;
267
268     case TYPE_CODE_ARRAY:
269       fprintf_filtered (stream, "(");
270       f77_print_array (type, valaddr, address, stream, recurse, original_value, options);
271       fprintf_filtered (stream, ")");
272       break;
273
274     case TYPE_CODE_PTR:
275       if (options->format && options->format != 's')
276         {
277           print_scalar_formatted (valaddr, type, options, 0, stream);
278           break;
279         }
280       else
281         {
282           addr = unpack_pointer (type, valaddr);
283           elttype = check_typedef (TYPE_TARGET_TYPE (type));
284
285           if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
286             {
287               /* Try to print what function it points to.  */
288               print_address_demangle (gdbarch, addr, stream, demangle);
289               /* Return value is irrelevant except for string pointers.  */
290               return 0;
291             }
292
293           if (options->addressprint && options->format != 's')
294             fputs_filtered (paddress (gdbarch, addr), stream);
295
296           /* For a pointer to char or unsigned char, also print the string
297              pointed to, unless pointer is null.  */
298           if (TYPE_LENGTH (elttype) == 1
299               && TYPE_CODE (elttype) == TYPE_CODE_INT
300               && (options->format == 0 || options->format == 's')
301               && addr != 0)
302             i = val_print_string (TYPE_TARGET_TYPE (type), addr, -1, stream,
303                                   options);
304
305           /* Return number of characters printed, including the terminating
306              '\0' if we reached the end.  val_print_string takes care including
307              the terminating '\0' if necessary.  */
308           return i;
309         }
310       break;
311
312     case TYPE_CODE_REF:
313       elttype = check_typedef (TYPE_TARGET_TYPE (type));
314       if (options->addressprint)
315         {
316           CORE_ADDR addr
317             = extract_typed_address (valaddr + embedded_offset, type);
318
319           fprintf_filtered (stream, "@");
320           fputs_filtered (paddress (gdbarch, addr), stream);
321           if (options->deref_ref)
322             fputs_filtered (": ", stream);
323         }
324       /* De-reference the reference.  */
325       if (options->deref_ref)
326         {
327           if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
328             {
329               struct value *deref_val =
330                 value_at
331                 (TYPE_TARGET_TYPE (type),
332                  unpack_pointer (type, valaddr + embedded_offset));
333
334               common_val_print (deref_val, stream, recurse,
335                                 options, current_language);
336             }
337           else
338             fputs_filtered ("???", stream);
339         }
340       break;
341
342     case TYPE_CODE_FUNC:
343       if (options->format)
344         {
345           print_scalar_formatted (valaddr, type, options, 0, stream);
346           break;
347         }
348       /* FIXME, we should consider, at least for ANSI C language, eliminating
349          the distinction made between FUNCs and POINTERs to FUNCs.  */
350       fprintf_filtered (stream, "{");
351       type_print (type, "", stream, -1);
352       fprintf_filtered (stream, "} ");
353       /* Try to print what function it points to, and its address.  */
354       print_address_demangle (gdbarch, address, stream, demangle);
355       break;
356
357     case TYPE_CODE_INT:
358       if (options->format || options->output_format)
359         {
360           struct value_print_options opts = *options;
361
362           opts.format = (options->format ? options->format
363                          : options->output_format);
364           print_scalar_formatted (valaddr, type, &opts, 0, stream);
365         }
366       else
367         {
368           val_print_type_code_int (type, valaddr, stream);
369           /* C and C++ has no single byte int type, char is used instead.
370              Since we don't know whether the value is really intended to
371              be used as an integer or a character, print the character
372              equivalent as well. */
373           if (TYPE_LENGTH (type) == 1)
374             {
375               fputs_filtered (" ", stream);
376               LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr),
377                              type, stream);
378             }
379         }
380       break;
381
382     case TYPE_CODE_FLAGS:
383       if (options->format)
384           print_scalar_formatted (valaddr, type, options, 0, stream);
385       else
386         val_print_type_code_flags (type, valaddr, stream);
387       break;
388
389     case TYPE_CODE_FLT:
390       if (options->format)
391         print_scalar_formatted (valaddr, type, options, 0, stream);
392       else
393         print_floating (valaddr, type, stream);
394       break;
395
396     case TYPE_CODE_VOID:
397       fprintf_filtered (stream, "VOID");
398       break;
399
400     case TYPE_CODE_ERROR:
401       fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
402       break;
403
404     case TYPE_CODE_RANGE:
405       /* FIXME, we should not ever have to print one of these yet.  */
406       fprintf_filtered (stream, "<range type>");
407       break;
408
409     case TYPE_CODE_BOOL:
410       if (options->format || options->output_format)
411         {
412           struct value_print_options opts = *options;
413
414           opts.format = (options->format ? options->format
415                          : options->output_format);
416           print_scalar_formatted (valaddr, type, &opts, 0, stream);
417         }
418       else
419         {
420           val = extract_unsigned_integer (valaddr,
421                                           TYPE_LENGTH (type), byte_order);
422           if (val == 0)
423             fprintf_filtered (stream, ".FALSE.");
424           else if (val == 1)
425             fprintf_filtered (stream, ".TRUE.");
426           else
427             /* Not a legitimate logical type, print as an integer.  */
428             {
429               /* Bash the type code temporarily.  */
430               TYPE_CODE (type) = TYPE_CODE_INT;
431               val_print (type, valaddr, 0, address, stream, recurse,
432                          original_value, options, current_language);
433               /* Restore the type code so later uses work as intended. */
434               TYPE_CODE (type) = TYPE_CODE_BOOL;
435             }
436         }
437       break;
438
439     case TYPE_CODE_COMPLEX:
440       type = TYPE_TARGET_TYPE (type);
441       fputs_filtered ("(", stream);
442       print_floating (valaddr, type, stream);
443       fputs_filtered (",", stream);
444       print_floating (valaddr + TYPE_LENGTH (type), type, stream);
445       fputs_filtered (")", stream);
446       break;
447
448     case TYPE_CODE_UNDEF:
449       /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
450          dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
451          and no complete type for struct foo in that file.  */
452       fprintf_filtered (stream, "<incomplete type>");
453       break;
454
455     case TYPE_CODE_STRUCT:
456     case TYPE_CODE_UNION:
457       /* Starting from the Fortran 90 standard, Fortran supports derived
458          types.  */
459       fprintf_filtered (stream, "( ");
460       for (index = 0; index < TYPE_NFIELDS (type); index++)
461         {
462           int offset = TYPE_FIELD_BITPOS (type, index) / 8;
463
464           val_print (TYPE_FIELD_TYPE (type, index), valaddr + offset,
465                      embedded_offset, address, stream, recurse + 1,
466                      original_value, options, current_language);
467           if (index != TYPE_NFIELDS (type) - 1)
468             fputs_filtered (", ", stream);
469         }
470       fprintf_filtered (stream, " )");
471       break;     
472
473     default:
474       error (_("Invalid F77 type code %d in symbol table."), TYPE_CODE (type));
475     }
476   gdb_flush (stream);
477   return 0;
478 }
479
480 static void
481 list_all_visible_commons (char *funname)
482 {
483   SAVED_F77_COMMON_PTR tmp;
484
485   tmp = head_common_list;
486
487   printf_filtered (_("All COMMON blocks visible at this level:\n\n"));
488
489   while (tmp != NULL)
490     {
491       if (strcmp (tmp->owning_function, funname) == 0)
492         printf_filtered ("%s\n", tmp->name);
493
494       tmp = tmp->next;
495     }
496 }
497
498 /* This function is used to print out the values in a given COMMON 
499    block. It will always use the most local common block of the 
500    given name */
501
502 static void
503 info_common_command (char *comname, int from_tty)
504 {
505   SAVED_F77_COMMON_PTR the_common;
506   COMMON_ENTRY_PTR entry;
507   struct frame_info *fi;
508   char *funname = 0;
509   struct symbol *func;
510
511   /* We have been told to display the contents of F77 COMMON 
512      block supposedly visible in this function.  Let us 
513      first make sure that it is visible and if so, let 
514      us display its contents */
515
516   fi = get_selected_frame (_("No frame selected"));
517
518   /* The following is generally ripped off from stack.c's routine 
519      print_frame_info() */
520
521   func = find_pc_function (get_frame_pc (fi));
522   if (func)
523     {
524       /* In certain pathological cases, the symtabs give the wrong
525          function (when we are in the first function in a file which
526          is compiled without debugging symbols, the previous function
527          is compiled with debugging symbols, and the "foo.o" symbol
528          that is supposed to tell us where the file with debugging symbols
529          ends has been truncated by ar because it is longer than 15
530          characters).
531
532          So look in the minimal symbol tables as well, and if it comes
533          up with a larger address for the function use that instead.
534          I don't think this can ever cause any problems; there shouldn't
535          be any minimal symbols in the middle of a function.
536          FIXME:  (Not necessarily true.  What about text labels) */
537
538       struct minimal_symbol *msymbol = 
539         lookup_minimal_symbol_by_pc (get_frame_pc (fi));
540
541       if (msymbol != NULL
542           && (SYMBOL_VALUE_ADDRESS (msymbol)
543               > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
544         funname = SYMBOL_LINKAGE_NAME (msymbol);
545       else
546         funname = SYMBOL_LINKAGE_NAME (func);
547     }
548   else
549     {
550       struct minimal_symbol *msymbol =
551         lookup_minimal_symbol_by_pc (get_frame_pc (fi));
552
553       if (msymbol != NULL)
554         funname = SYMBOL_LINKAGE_NAME (msymbol);
555       else /* Got no 'funname', code below will fail.  */
556         error (_("No function found for frame."));
557     }
558
559   /* If comname is NULL, we assume the user wishes to see the 
560      which COMMON blocks are visible here and then return */
561
562   if (comname == 0)
563     {
564       list_all_visible_commons (funname);
565       return;
566     }
567
568   the_common = find_common_for_function (comname, funname);
569
570   if (the_common)
571     {
572       if (strcmp (comname, BLANK_COMMON_NAME_LOCAL) == 0)
573         printf_filtered (_("Contents of blank COMMON block:\n"));
574       else
575         printf_filtered (_("Contents of F77 COMMON block '%s':\n"), comname);
576
577       printf_filtered ("\n");
578       entry = the_common->entries;
579
580       while (entry != NULL)
581         {
582           print_variable_and_value (NULL, entry->symbol, fi, gdb_stdout, 0);
583           entry = entry->next;
584         }
585     }
586   else
587     printf_filtered (_("Cannot locate the common block %s in function '%s'\n"),
588                      comname, funname);
589 }
590
591 /* This function is used to determine whether there is a
592    F77 common block visible at the current scope called 'comname'. */
593
594 #if 0
595 static int
596 there_is_a_visible_common_named (char *comname)
597 {
598   SAVED_F77_COMMON_PTR the_common;
599   struct frame_info *fi;
600   char *funname = 0;
601   struct symbol *func;
602
603   if (comname == NULL)
604     error (_("Cannot deal with NULL common name!"));
605
606   fi = get_selected_frame (_("No frame selected"));
607
608   /* The following is generally ripped off from stack.c's routine 
609      print_frame_info() */
610
611   func = find_pc_function (fi->pc);
612   if (func)
613     {
614       /* In certain pathological cases, the symtabs give the wrong
615          function (when we are in the first function in a file which
616          is compiled without debugging symbols, the previous function
617          is compiled with debugging symbols, and the "foo.o" symbol
618          that is supposed to tell us where the file with debugging symbols
619          ends has been truncated by ar because it is longer than 15
620          characters).
621
622          So look in the minimal symbol tables as well, and if it comes
623          up with a larger address for the function use that instead.
624          I don't think this can ever cause any problems; there shouldn't
625          be any minimal symbols in the middle of a function.
626          FIXME:  (Not necessarily true.  What about text labels) */
627
628       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
629
630       if (msymbol != NULL
631           && (SYMBOL_VALUE_ADDRESS (msymbol)
632               > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
633         funname = SYMBOL_LINKAGE_NAME (msymbol);
634       else
635         funname = SYMBOL_LINKAGE_NAME (func);
636     }
637   else
638     {
639       struct minimal_symbol *msymbol =
640         lookup_minimal_symbol_by_pc (fi->pc);
641
642       if (msymbol != NULL)
643         funname = SYMBOL_LINKAGE_NAME (msymbol);
644     }
645
646   the_common = find_common_for_function (comname, funname);
647
648   return (the_common ? 1 : 0);
649 }
650 #endif
651
652 void
653 _initialize_f_valprint (void)
654 {
655   add_info ("common", info_common_command,
656             _("Print out the values contained in a Fortran COMMON block."));
657   if (xdb_commands)
658     add_com ("lc", class_info, info_common_command,
659              _("Print out the values contained in a Fortran COMMON block."));
660 }