Bug 13795

Summary: .gdb_index misses main name
Product: gdb Reporter: dje
Component: symtabAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: minor CC: tromey
Priority: P2    
Version: HEAD   
Target Milestone: 15.1   
Host: Target:
Build: Last reconfirmed:
Attachments: start of a patch

Description dje 2012-03-02 17:02:11 UTC
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.
Comment 1 Tom Tromey 2021-02-23 18:57:51 UTC
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.
Comment 2 Tom Tromey 2021-03-28 16:00:03 UTC
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
Comment 3 Tom Tromey 2023-12-10 15:27:25 UTC
This was fixed by the commit in bug #24549.