https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87362
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #7) > The following makes it work for a simple C int main() {}. It's also a little > bit less hacky... > > Index: gcc/dwarf2out.c > =================================================================== > --- gcc/dwarf2out.c (revision 264418) > +++ gcc/dwarf2out.c (working copy) > @@ -26896,6 +26896,10 @@ dwarf2out_decl (tree decl) > static void > dwarf2out_function_decl (tree decl) > { > + if (in_lto_p) > + /* This helps debuggers to build a symbol table. */ > + if (dw_die_ref die = lookup_decl_die (decl)) > + add_linkage_attr (die, decl); > dwarf2out_decl (decl); > call_arg_locations = NULL; > call_arg_loc_last = NULL; Doesn't seem to help gdb at all. Maybe gdb pulls in all the early CUs because of the stray DIEs we have for optimized out functions, like <2><423bc64>: Abbrev Number: 5 (DW_TAG_subprogram) <423bc65> DW_AT_abstract_origin: <0x3419cf1> <423bc69> DW_AT_sibling : <0x423bc73> <3><423bc6d>: Abbrev Number: 6 (DW_TAG_formal_parameter) <423bc6e> DW_AT_abstract_origin: <0x3419cfe> <3><423bc72>: Abbrev Number: 0 since we create them at tree streaming time rather than when actually outputting them (PR83941). My idea for that is to create those lazily somehow, like having dwarf2out_register_external_die populate an on-the-side representation and lookup_decl_die querying that if the DIE wasn't created already. I also notice that breaking on a function doesn't seem to work (if there are only inline/IPA optimized instances(?)). gdb doesn't stop. auto-completion also takes ages. So whatever gdb does it isn't very efficient ;)