------- Comment #3 from fxcoudert at gcc dot gnu dot org 2009-06-13 06:10 ------- (In reply to comment #2) > We should actually emit DW_AT_calling_convention for the main program.
We currently correctly emit DW_AT_calling_convention. > The DW_AT_entry_point attribute is for alternate entries, which, yes, > we should also emit but don't. Here's an example: subroutine func() entry ent () end subroutine With intel ("ifort -c -g" followed by "readelf -wi"), we get one subprogram and one entry point: <1><ba>: Abbrev Number: 3 (DW_TAG_subprogram) DW_AT_decl_line : 1 DW_AT_decl_column : 12 DW_AT_decl_file : 1 DW_AT_inline : 0 (not inlined) DW_AT_accessibility: 1 (public) DW_AT_type : <b2> DW_AT_prototyped : 0 DW_AT_name : func DW_AT_low_pc : 0 DW_AT_high_pc : 0x2c DW_AT_external : 1 <2><db>: Abbrev Number: 4 (DW_TAG_entry_point) DW_AT_decl_line : 2 DW_AT_decl_column : 9 DW_AT_decl_file : 1 DW_AT_name : ent DW_AT_type : <b2> DW_AT_static_link : 3 byte block: 76 0 6 DW_AT_low_pc : 0x11 while with gfortran we get three subprograms: <1><2d>: Abbrev Number: 2 (DW_TAG_subprogram) DW_AT_external : 1 DW_AT_name : (indirect string, offset: 0x7a): func DW_AT_decl_file : 1 DW_AT_decl_line : 1 DW_AT_low_pc : 0 DW_AT_high_pc : 0x10 DW_AT_frame_base : 0 (location list) <1><49>: Abbrev Number: 3 (DW_TAG_subprogram) DW_AT_external : 1 DW_AT_name : ent DW_AT_decl_file : 1 DW_AT_decl_line : 2 DW_AT_low_pc : 0x10 DW_AT_high_pc : 0x20 DW_AT_frame_base : 0x60 (location list) <1><65>: Abbrev Number: 4 (DW_TAG_subprogram) DW_AT_name : (indirect string, offset: 0x0): master.0.func DW_AT_decl_file : 1 DW_AT_decl_line : 3 DW_AT_low_pc : 0x20 DW_AT_high_pc : 0x2a DW_AT_frame_base : 0xc0 (location list) DW_AT_sibling : <92> -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23280