Bug 66503 - [4.9/5/6 Regression] missing DW_AT_abstract_origin for cross-unit call sites
Summary: [4.9/5/6 Regression] missing DW_AT_abstract_origin for cross-unit call sites
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: debug (show other bugs)
Version: 5.0
: P3 normal
Target Milestone: 4.9.3
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-06-11 09:28 UTC by Pierre-Marie de Rodat
Modified: 2015-06-22 12:03 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments
C reproducer (79 bytes, text/plain)
2015-06-11 09:28 UTC, Pierre-Marie de Rodat
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Pierre-Marie de Rodat 2015-06-11 09:28:38 UTC
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.
Comment 1 Richard Biener 2015-06-11 10:12:52 UTC
And I'm fixing 4.9 differently.
Comment 2 pmderodat 2015-06-11 12:40:41 UTC
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
Comment 3 Richard Biener 2015-06-11 12:45:27 UTC
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
Comment 4 pmderodat 2015-06-11 12:51:36 UTC
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
Comment 5 Richard Biener 2015-06-22 12:03:20 UTC
Fixed.