[patch] Add DW_AT_main_subprogram tag to Fortran main program

FX fxcoudert@gmail.com
Sun Oct 10 09:53:00 GMT 2010


ping


> Updated patch below, against regtested on x86_64-linux. OK to commit?
> 
> 
> 
> 2010-10-03  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
> 
> 	* dwarf2out.c (add_calling_convention_attribute): Flag main
> 	Fortran subroutine with DW_AT_main_subprogram.
> 
> 
> 
> Index: gcc/dwarf2out.c
> ===================================================================
> --- gcc/dwarf2out.c	(revision 164914)
> +++ gcc/dwarf2out.c	(working copy)
> @@ -17841,14 +17841,21 @@ add_calling_convention_attribute (dw_die
>   value = ((enum dwarf_calling_convention)
> 	   targetm.dwarf_calling_convention (TREE_TYPE (decl)));
> 
> -  /* 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, lacking a
> -     better way to signal the Fortran main program, we use this for the
> -     time being, following existing custom.  */
>   if (is_fortran ()
>       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
> -    value = DW_CC_program;
> +    {
> +      /* DWARF 2 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, lacking a
> +	better way to signal the Fortran main program, we used this for 
> +	a long time, following existing custom.  Now, DWARF 4 has 
> +	DW_AT_main_subprogram, which we add below, but some tools still
> +	rely on the old way, which we thus keep.  */
> +      value = DW_CC_program;
> +
> +      if (dwarf_version >= 4 || !dwarf_strict)
> +	add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
> +    }
> 
>   /* Only add the attribute if the backend requests it, and
>      is not DW_CC_normal.  */
> 



More information about the Fortran mailing list