Index: dwarf2read.c =================================================================== RCS file: /cvs/src/src/gdb/dwarf2read.c,v retrieving revision 1.60 diff -c -p -r1.60 dwarf2read.c *** dwarf2read.c 22 Jun 2002 00:05:59 -0000 1.60 --- dwarf2read.c 9 Jul 2002 20:42:35 -0000 *************** read_subroutine_type (struct die_info *d *** 3026,3031 **** --- 3026,3053 ---- || cu_language == language_cplus) TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED; + /* Check for the calling convention. A DW_CC_program indicates that + the subroutine is the the "main" of the program. This needs + to be set for languages that don't have a predefined name + for the starting subroutines, such as FORTRAN. */ + attr = dwarf_attr (die, DW_AT_calling_convention); + if (attr && (DW_UNSND (attr) != 0)) + { + switch (DW_UNSND (attr)) + { + case DW_CC_program: + /* Set this subroutine as the "main" subroutine + for the program. */ + TYPE_FLAGS (ftype) |= TYPE_FLAG_MAIN_PROGRAM; + set_main_name (TYPE_NAME (ftype)); + break; + case DW_CC_normal: + case DW_CC_nocall: + default: + break; + } + } + if (die->has_children) { struct die_info *child_die; *************** read_partial_die (struct partial_die_inf *** 3414,3419 **** --- 3436,3442 ---- int found_spec_attr = 0; int has_low_pc_attr = 0; int has_high_pc_attr = 0; + int is_main_program = 0; *part_die = zeroed_partial_die; abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); *************** read_partial_die (struct partial_die_inf *** 3446,3451 **** --- 3469,3486 ---- if (part_die->name == NULL) part_die->name = DW_STRING (&attr); break; + case DW_AT_calling_convention: + switch (DW_UNSND (&attr)) + { + case DW_CC_program: + is_main_program = 1; + break; + case DW_CC_normal: + case DW_CC_nocall: + default: + break; + } + break; case DW_AT_MIPS_linkage_name: part_die->name = DW_STRING (&attr); break; *************** read_partial_die (struct partial_die_inf *** 3489,3494 **** --- 3524,3534 ---- default: break; } + } + + if (is_main_program) + { + set_main_name (part_die->name); } /* If we found a reference attribute and the die has no name, try Index: gdbtypes.h =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.h,v retrieving revision 1.33 diff -c -p -r1.33 gdbtypes.h *** gdbtypes.h 14 Jun 2002 14:34:24 -0000 1.33 --- gdbtypes.h 9 Jul 2002 20:42:35 -0000 *************** enum type_code *** 252,257 **** --- 252,263 ---- #define TYPE_FLAG_VECTOR (1 << 12) #define TYPE_VECTOR(t) (TYPE_FLAGS (t) & TYPE_FLAG_VECTOR) + /* This flag is to indicate that the subprogram type indicates + a the main program. Mainly used to indicate FORTRAN program + scopes. */ + #define TYPE_FLAG_MAIN_PROGRAM (1 << 13) + #define TYPE_MAIN_PROGRAM(t) (TYPE_FLAGS (t) & TYPE_FLAG_MAIN_PROGRAM) + struct main_type { /* Code for kind of type */