This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [patch] Add DW_AT_main_subprogram tag to Fortran main program
> + add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
>
> should be guarded by
> if (dwarf_version >= 4 || !dwarf_strict)
Updated patch below, against regtested on x86_64-linux. OK to commit?
FX
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. */