[gdb/symtab] Find main language without symtab expansion
authorTom de Vries <tdevries@suse.de>
Sat, 5 Aug 2023 15:57:13 +0000 (17:57 +0200)
committerTom de Vries <tdevries@suse.de>
Sat, 5 Aug 2023 15:57:13 +0000 (17:57 +0200)
commitd06730bc0205f7c35bfccf057ef0ef83a12206d6
tree0af3434d7606e5480588bbd385e8b41e33a2eff5
parentdb583cf8dca39dfb2e3268b657ca33957dc62b6d
[gdb/symtab] Find main language without symtab expansion

When loading an executable using "file a.out", the language is set according
to a.out, which can involve looking up the language of symbol "main", which
will cause the symtab expansion for the containing CU.

Expansion of lto debug info can be slow, so in commit d3214198119 ("[gdb] Use
partial symbol table to find language for main") a feature was added to avoid
the symtab expansion.

This feature stopped working after commit 7f4307436fd ("Fix "start" for D,
Rust, etc").

[ The commit addresses problems related to command start, which requires finding
the main function:
- for language D, "main" was found instead of "D main", and
- for Rust, the correct function was found, but attributed the wrong name
  (not fully qualified). ]

Reimplement the feature by adding
cooked_index_functions::lookup_global_symbol_language.

Tested on x86_64-linux.

PR symtab/30661
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30661
gdb/dwarf2/read.c
gdb/testsuite/gdb.base/main-c.exp [new file with mode: 0644]
gdb/testsuite/gdb.cp/main-cp.exp [new file with mode: 0644]
gdb/testsuite/gdb.cp/main.cc [new file with mode: 0644]