Created attachment 35754 [details] C reproducer With the recent work for PR debug/65549, we observed a regression in the generated debugging information. Take the attached reproducer, build it and look at the output DWARF: $ gcc -c -O1 -g foo.c $ objdump --dwarf=info foo.o [...] <2><4e>: Abbrev Number: 3 (DW_TAG_GNU_call_site) <4f> DW_AT_low_pc : 0x9 <2><57>: Abbrev Number: 0 There is no DW_AT_abstract_origin attribute anymore, whereas there used to be one. On PowerPC with -mlongcall, for instance, call instructions are indirect and we (at AdaCore) rely on this attribute to determine what function is actually called (it's easier this way than interpreting machine code...). The DWARF proposal for call sites also say debuggers should be able to use this attribute (to build virtual call stacks in the presence of tail calls), but I could not observe this in practice with GDB. (Excepts from the <https://gcc.gnu.org/ml/gcc-patches/2015-06/msg00712.html> thread) As discussed on the corresponding thread on gcc-patches@, I am about to commit a fix on mainline and on the 5.0 branch.
And I'm fixing 4.9 differently.
Author: pmderodat Date: Thu Jun 11 12:40:10 2015 New Revision: 224371 URL: https://gcc.gnu.org/viewcvs?rev=224371&root=gcc&view=rev Log: Restore DW_AT_abstract_origin for cross-unit call sites PR debug/66503 gcc/ChangeLog: * debug.h (struct gcc_debug_hooks): Add a register_main_translation_unit hook. * debug.c (do_nothing_debug_hooks): Provide a function for this new hook. * dbxout.c (dbx_debug_hooks): Likewise. * sdbout.c (sdb_debug_hooks): Likewise. * vmsdbgout.c (vmsdbg_debug_hooks): Likewise. * dwarf2out.c (main_translation_unit): New global variable. (dwarf2out_register_main_translation_unit): New function implementing the new hook. (dwarf2_debug_hooks): Assign dwarf2out_register_main_translation_unit to this new hook. (dwarf2out_init): Associate any main translation unit to comp_unit_die (). * c/c-decl.c (pop_scope): Register the main translation unit through the new debug hook. * cp/decl.c (cxx_init_decl_processing): Likewise. gcc/ada/ChangeLog: * gcc-interface/utils.c (get_global_context): Register the main translation unit through the new debug hook. gcc/fortran/ChangeLog: * f95-lang.c (gfc_create_decls): Register the main translation unit through the new debug hook. Modified: trunk/gcc/ChangeLog trunk/gcc/ada/ChangeLog trunk/gcc/ada/gcc-interface/utils.c trunk/gcc/c/c-decl.c trunk/gcc/cp/decl.c trunk/gcc/dbxout.c trunk/gcc/debug.c trunk/gcc/debug.h trunk/gcc/dwarf2out.c trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/f95-lang.c trunk/gcc/sdbout.c trunk/gcc/vmsdbgout.c
Author: rguenth Date: Thu Jun 11 12:44:56 2015 New Revision: 224372 URL: https://gcc.gnu.org/viewcvs?rev=224372&root=gcc&view=rev Log: 2015-06-11 Richard Biener <rguenther@suse.de> PR middle-end/66503 * dwarf2out.c (resolve_addr): Guard backport of PR66549 with in_lto_p. Modified: branches/gcc-4_9-branch/gcc/ChangeLog branches/gcc-4_9-branch/gcc/dwarf2out.c
Author: pmderodat Date: Thu Jun 11 12:51:04 2015 New Revision: 224373 URL: https://gcc.gnu.org/viewcvs?rev=224373&root=gcc&view=rev Log: Restore DW_AT_abstract_origin for cross-unit call sites PR debug/66503 Backport from mainline gcc/ChangeLog: * debug.h (struct gcc_debug_hooks): Add a register_main_translation_unit hook. * debug.c (do_nothing_debug_hooks): Provide a function for this new hook. * dbxout.c (dbx_debug_hooks): Likewise. * sdbout.c (sdb_debug_hooks): Likewise. * vmsdbgout.c (vmsdbg_debug_hooks): Likewise. * dwarf2out.c (main_translation_unit): New global variable. (dwarf2out_register_main_translation_unit): New function implementing the new hook. (dwarf2_debug_hooks): Assign dwarf2out_register_main_translation_unit to this new hook. (dwarf2out_init): Associate any main translation unit to comp_unit_die (). * c/c-decl.c (pop_scope): Register the main translation unit through the new debug hook. * cp/decl.c (cxx_init_decl_processing): Likewise. gcc/ada/ChangeLog: * gcc-interface/utils.c (get_global_context): Register the main translation unit through the new debug hook. gcc/fortran/ChangeLog: * f95-lang.c (gfc_create_decls): Register the main translation unit through the new debug hook. Modified: branches/gcc-5-branch/gcc/ChangeLog branches/gcc-5-branch/gcc/ada/ChangeLog branches/gcc-5-branch/gcc/ada/gcc-interface/utils.c branches/gcc-5-branch/gcc/c/c-decl.c branches/gcc-5-branch/gcc/cp/decl.c branches/gcc-5-branch/gcc/dbxout.c branches/gcc-5-branch/gcc/debug.c branches/gcc-5-branch/gcc/debug.h branches/gcc-5-branch/gcc/dwarf2out.c branches/gcc-5-branch/gcc/fortran/ChangeLog branches/gcc-5-branch/gcc/fortran/f95-lang.c branches/gcc-5-branch/gcc/sdbout.c branches/gcc-5-branch/gcc/vmsdbgout.c
Fixed.