Bug 302751

Summary: [RHEL 5] GDB fails to break in the $delete destructor
Product: Red Hat Enterprise Linux 5 Reporter: Jan Kratochvil <jan.kratochvil>
Component: gdbAssignee: Jan Kratochvil <jan.kratochvil>
Status: CLOSED ERRATA QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 5.1CC: cagney
Target Milestone: ---Keywords: Patch
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: RHBA-2008-0332 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-05-21 16:55:27 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 298061    
Bug Blocks:    

Description Jan Kratochvil 2007-09-24 08:04:35 UTC
Description of problem:
When I am trying to set breakpoint on a destructor, which has virtual destructor
in its inheritance, using 'b class::~class' form, gdb sets the breakpoint, but
it does not get hit when program is run. Gdb most likely setting this breakpoint
on a incorrect PC address, or setting it on non in-charge destructor, which
never gets called.


How reproducible:
See attached testcase


-- Additional comment from jan.kratochvil on 2007-09-20 10:26 EST --
[...]

Comment 1 lists the command 'b class::~class', I agree this command does not
target the destructor variant used in the testcase.

(1) Please use apostrophes to quote the destructor (/constructor) names
    themselves, such as:
    (gdb) b 'my::~my'

(2) You may use <tab>-completion if you use the quotation as above:
    (gdb) b 'my::~my<tab>

(3) In this specific testcase of the provided it_file 101926
               you should use:
    (gdb) b 'my::~my$delete()'

(4) There is a break-point menu provided if the specified name qualifies for
    multiple functions:
    (gdb) b 'A::A'
    [0] cancel
    [1] all
    [2] A::A() at /tmp/constructor.C:9
    [3] A::A(int) at /tmp/constructor.C:10
    [4] A::A(long) at /tmp/constructor.C:11
    [5] A::A$base() at /tmp/constructor.C:9

    It may be considered a Bug in the Red Hat branch of the GDB that it does not
    offer the `$delete' destructor variants in this menu.  Therefore
    (gdb) b 'my::~my'
    only resolves to a single destructor instance and thus no menu is displayed.
    With the proposed fix there would be some menu like:
    (gdb) b 'my::~my'
    [0] cancel
    [1] all
    [2] my::~my() at destructor.cxx:24
    [3] my::~my$delete() at destructor.cxx:24

(5) Another Bug targets the proper rewrite of this constructors/destructors
    handling by GDB.  The current Jeff Johnston's patches use the .symtab
    section and depend on the DW_AT_MIPS_linkage_name DWARF tags.  This is
    wrong as it should all be based on the unnamed DWARF .debug_info PC ranges.
    I already spent a lot of time on this patch but I still do not have it
    finished right now.  Still I hope to get it upstream submittable soon.


Suggesting to consider this Bug as the target for (4) - to update
add_minsym_members() in gdb-6.3-linespec-20041213.patch to also list the
`$delete' variant of the destructor.  Only the $allocate variant of the
constructors is defined in the patch gdb-6.3-constructor-20041216.patch but
AFAIK gcc never uses this one.  This the patch may also include even this one.


-- Additional comment from jan.kratochvil on 2007-09-21 11:41 EST --
[...]

here is the proposed implementation:

(gdb) b my::~my
[0] cancel
[1] all
[2] my::~my() at destructor.cxx:24
[3] my::~my$delete() at destructor.cxx:24
> 1
Breakpoint 3 at 0x400e2a: file destructor.cxx, line 24.
Breakpoint 4 at 0x400db8: file destructor.cxx, line 24.
warning: Multiple breakpoints were set.
warning: Use the "delete" command to delete unwanted breakpoints.

(gdb) b 25
Breakpoint 1 at 0x400dd1: file destructor.cxx, line 25.
Breakpoint 2 at 0x400e43: file destructor.cxx, line 25.
warning: Multiple breakpoints were set.
warning: Use the "delete" command to delete unwanted breakpoints.

Comment 4 RHEL Program Management 2007-10-16 03:38:37 UTC
This request was evaluated by Red Hat Product Management for inclusion in a Red
Hat Enterprise Linux maintenance release.  Product Management has requested
further review of this request by Red Hat Engineering, for potential
inclusion in a Red Hat Enterprise Linux Update release for currently deployed
products.  This request is not yet committed for inclusion in an Update
release.

Comment 11 errata-xmlrpc 2008-05-21 16:55:27 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2008-0332.html