From 2b4cd2dd7cc5cfe0a754627347c3a3f42edfbe48 Mon Sep 17 00:00:00 2001 From: fxcoudert Date: Tue, 19 Oct 2010 12:30:35 +0000 Subject: [PATCH] PR fortran/43414 * dwarf2out.c (add_calling_convention_attribute): Flag main Fortran subroutine with DW_AT_main_subprogram. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165699 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2out.c | 19 +++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e124df7..38d07c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-10-19 Francois-Xavier Coudert + + PR fortran/43414 + * dwarf2out.c (add_calling_convention_attribute): Flag main + Fortran subroutine with DW_AT_main_subprogram. + 2010-10-19 Nick Clifton * config/rx/rx.c (rx_function_value): Small integer types are diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 47d98f3..d19a5cd 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -17848,14 +17848,21 @@ add_calling_convention_attribute (dw_die_ref subr_die, tree decl) 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. */ -- 2.7.4