Found this while reading the code. Filing it so it's not forgotten. read_partial_die has this: case DW_AT_calling_convention: /* 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, because it's a necessary piece of information in Fortran, and because DW_CC_program is the only piece of debugging information whose definition refers to a 'main program' at all, several compilers have begun marking Fortran main programs with DW_CC_program --- even when those functions use the standard calling conventions. So until DWARF specifies a way to provide this information and compilers pick up the new representation, we'll support this practice. */ if (DW_UNSND (&attr) == DW_CC_program && cu->language == language_fortran) { set_main_name (part_die->name); /* As this DIE has a static linkage the name would be difficult to look up later. */ language_of_main = language_fortran; } break; I couldn't see the corresponding support in .gdb_index handling.
Updating this to reflect the lack of "main name" handling. gdb still supports the calling convention hack, but there's a DWARF way to achieve this as well now.
Created attachment 13332 [details] start of a patch I started a patch to add this, but: * It would require a change to gold as well; * It would require a change to binutils for the dumping; * Ideally, if we're bumping the version anyway, we'd add data addresses to the address map (this would be useful for Rust); * but, I feel that gdb index ought to be deprecated anyway, so it's hard to motivate
This was fixed by the commit in bug #24549.