This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug breakpoints/19681] Attempting to set a breakpoint at a label in a C++ constructor causes internal-error: decode_line_full


https://sourceware.org/bugzilla/show_bug.cgi?id=19681

Keith Seitz <keiths at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |keiths at redhat dot com
           Assignee|unassigned at sourceware dot org   |keiths at redhat dot com

--- Comment #1 from Keith Seitz <keiths at redhat dot com> ---
I have been able to reproduce this and take a look.

The linespec parser is working as designed. It properly is figuring out that
the user is looking for a label named "labeldude" in the method A::A(int).

However, when it attempts to convert the parse result to SaLs, the label's
symbol has no address (SYMBOL_VALUE_ADDRESS(sym) == 0). That causes the label
to be skipped, and resultant SaL list is empty (nelts == 0).

Looking over the debug info, the compiler outputs the following DIEs [gcc 6.0.0
20151105 (experimental)]:

 <1><c4>: Abbrev Number: 13 (DW_TAG_subprogram)
    <c5>   DW_AT_specification: <0x3e>
    <c9>   DW_AT_inline      : 2        (declared as inline but ignored)
    <ca>   DW_AT_object_pointer: <0xd2>
    <ce>   DW_AT_sibling     : <0xee>
[snip]
 <2><e6>: Abbrev Number: 16 (DW_TAG_label)
    <e7>   DW_AT_name        : (indirect string, offset: 0x48): labeldude
    <eb>   DW_AT_decl_file   : 1
    <ec>   DW_AT_decl_line   : 5
 <2><ed>: Abbrev Number: 0
[snip]
 <1><f3>: Abbrev Number: 18 (DW_TAG_subprogram)
    <f4>   DW_AT_abstract_origin: <0xc4>
    <f8>   DW_AT_linkage_name: (indirect string, offset: 0x52): _ZN1AC2Ei
    <fc>   DW_AT_object_pointer: <0x116>
    <100>   DW_AT_low_pc      : 0x400624
    <108>   DW_AT_high_pc     : 0x17
    <110>   DW_AT_frame_base  : 1 byte block: 9c        (DW_OP_call_frame_cfa)
    <112>   DW_AT_object_pointer: <0x116>
    <116>   DW_AT_GNU_all_call_sites: 1
[snip]
 <3><12b>: Abbrev Number: 21 (DW_TAG_label)
    <12c>   DW_AT_abstract_origin: <0xe6>
    <130>   DW_AT_low_pc      : 0x40062f
 <3><138>: Abbrev Number: 0

So we have an abstract_origin DIE for the ctor and for the label, and GDB isn't
recognizing this and recording the label's address.

I'll see if I can't work up a patch.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]