* dwarf2read.c (read_partial_die): check the value
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Thu, 25 Oct 2007 20:54:27 +0000 (20:54 +0000)
committerCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Thu, 25 Oct 2007 20:54:27 +0000 (20:54 +0000)
of DW_AT_calling_convention in Fortran programs.

gdb/ChangeLog
gdb/dwarf2read.c

index f86576c61e88f8199064d633ef61644a0687a499..4995dc2fd338bf41ce8e6cc29dd9f197c492f0af 100644 (file)
@@ -1,3 +1,10 @@
+2007-10-25  Wu Zhou  <woodzltc@cn.ibm.com>
+           Carlos Eduardo Seo  <cseo@linux.vnet.ibm.com>
+           Jim Blandy  <jimb@codesourcery.com>
+
+       * dwarf2read.c (read_partial_die): check the value
+       of DW_AT_calling_convention in Fortran programs.
+
 2007-10-25  Wu Zhou  <woodzltc@cn.ibm.com> 
            Thiago Jung Bauermann  <bauerman@br.ibm.com>
 
index 5d8551956755cef5e740d237e43c44daf4053848..1498d1ff7eb6206f11e41da392b0587cfa98ab94 100644 (file)
@@ -5619,6 +5619,25 @@ read_partial_die (struct partial_die_info *part_die,
         case DW_AT_byte_size:
           part_die->has_byte_size = 1;
           break;
+       case DW_AT_calling_convention:
+         /* DWARF doesn't provide a way to identify a program's source-level
+            entry point.  DW_AT_calling_convention attributes are only meant
+            to describe functions' calling conventions.
+
+            However, because it's a necessary piece of information in
+            Fortran, and because DW_CC_program is the only piece of debugging
+            information whose definition refers to a 'main program' at all,
+            several compilers have begun marking Fortran main programs with
+            DW_CC_program --- even when those functions use the standard
+            calling conventions.
+
+            So until DWARF specifies a way to provide this information and
+            compilers pick up the new representation, we'll support this
+            practice.  */
+         if (DW_UNSND (&attr) == DW_CC_program
+             && cu->language == language_fortran)
+           set_main_name (part_die->name);
+         break;
        default:
          break;
        }