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