From patchwork Sun Oct 3 20:05:40 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Add DW_AT_main_subprogram tag to Fortran main program Date: Sun, 03 Oct 2010 10:05:40 -0000 From: FX X-Patchwork-Id: 66604 Message-Id: To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org, gfortran List > + 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 * 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. */