This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/54793] New: the location of a formal_parameter is not started from a function entry with -mfentry
- From: "masami.hiramatsu.pt at hitachi dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 03 Oct 2012 13:10:20 +0000
- Subject: [Bug debug/54793] New: the location of a formal_parameter is not started from a function entry with -mfentry
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54793
Bug #: 54793
Summary: the location of a formal_parameter is not started from
a function entry with -mfentry
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: masami.hiramatsu.pt@hitachi.com
With -mfentry, GCC (I've found this with Red Hat 4.7.0-5 and
Red Hat 4.7.2-2 on Fedora 17) generates odd debuginfo about
variable locations.
Here are examples:
-----
<1><9a58>: Abbrev Number: 86 (DW_TAG_subprogram)
<9a59> DW_AT_external : 1
<9a59> DW_AT_name : (indirect string, offset: 0xd82):
unregister_di
e_notifier
<9a5d> DW_AT_decl_file : 1
<9a5e> DW_AT_decl_line : 551
<9a60> DW_AT_prototyped : 1
<9a60> DW_AT_type : <0x7c>
<9a64> DW_AT_low_pc : 0x740
<9a6c> DW_AT_high_pc : 0x75a
<9a74> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<9a76> DW_AT_GNU_all_call_sites: 1
<9a76> DW_AT_sibling : <0x9aac>
<2><9a7a>: Abbrev Number: 87 (DW_TAG_formal_parameter)
<9a7b> DW_AT_name : nb
<9a7e> DW_AT_decl_file : 1
<9a7f> DW_AT_decl_line : 551
<9a81> DW_AT_type : <0x2a96>
<9a85> DW_AT_location : 0x172f (location list)
...
0000172f 0000000000000745 0000000000000750 (DW_OP_reg5 (rdi))
0000172f 0000000000000750 0000000000000757 (DW_OP_reg4 (rsi))
0000172f 0000000000000757 000000000000075a (DW_OP_GNU_entry_value:
(DW_OP_reg5 (rdi)); DW_OP_stack_value)
0000172f <End of list>
-----
As you can see, the location of the parameter "nb", starts from 0x745
but unregister_die_notifier() function itself starts from 0x740.
-----
<1><9aac>: Abbrev Number: 86 (DW_TAG_subprogram)
<9aad> DW_AT_external : 1
<9aad> DW_AT_name : (indirect string, offset: 0x321f): notify_die
<9ab1> DW_AT_decl_file : 1
<9ab2> DW_AT_decl_line : 530
<9ab4> DW_AT_prototyped : 1
<9ab4> DW_AT_type : <0x7c>
<9ab8> DW_AT_low_pc : 0xb0
<9ac0> DW_AT_high_pc : 0xe0
<9ac8> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<9aca> DW_AT_GNU_all_call_sites: 1
<9aca> DW_AT_sibling : <0x9b6c>
<2><9ace>: Abbrev Number: 87 (DW_TAG_formal_parameter)
<9acf> DW_AT_name : val
<9ad3> DW_AT_decl_file : 1
<9ad4> DW_AT_decl_line : 530
<9ad6> DW_AT_type : <0x2b36>
<9ada> DW_AT_location : 0x177b (location list)
...
0000177b 00000000000000b0 00000000000000cd (DW_OP_reg5 (rdi))
0000177b 00000000000000cd 00000000000000dd (DW_OP_reg4 (rsi))
0000177b 00000000000000dd 00000000000000e0 (DW_OP_GNU_entry_value:
(DW_OP_reg5 (rdi)); DW_OP_stack_value)
0000177b <End of list>
-----
However, without fentry call (notifiy_die is marked notrace),
the parameter "val" location start with 0xb0, which is same as
notify_die start address.
URL: https://lkml.org/lkml/2012/10/3/187