This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: catch signal does not appear multi-inferior safe
- From: Chris January <chris dot january at allinea dot com>
- To: Pedro Alves <palves at redhat dot com>
- Cc: gdb at sourceware dot org
- Date: Thu, 28 Aug 2014 11:58:50 +0100
- Subject: Re: catch signal does not appear multi-inferior safe
- Authentication-results: sourceware.org; auth=none
- References: <1405076204 dot 3524 dot 8 dot camel at chris-xps13> <53F36F39 dot 8090201 at redhat dot com>
Hello Pedro,
On Tue, 2014-08-19 at 16:37 +0100, Pedro Alves wrote:
> On 07/11/2014 11:56 AM, Chris January wrote:
> > It appears to me that the 'catch signal' support in GDB is not
> > multi-inferior safe. Combining the 'catch signal' command with the
> > 'checkpoint' command, for example, results in an internal error:
> >
> > break-catch-sig.c:152: internal-error:
> > signal_catchpoint_remove_location: Assertion `signal_catch_counts[iter]
> >> 0' failed.
> > A problem internal to GDB has been detected,
> > further debugging may prove unreliable.
> > Quit this debugging session? (y or n)
> >
> > see the end of this e-mail for reproducer.
> >
> > When checkpointing / catching a fork signal_catchpoint_remove_location
> > may be called twice in a row - once for the parent and once for the
> > child.
>
> Signal catchpoint locations aren't really per-process; they're
> global. GDB shouldn't be trying to detach them from the child.
> Where is this happening? Is this from detach_breakpoint ? That's
> odd, since that skips bp_loc_other locations?
You are right. I was testing with an old version of GDB (7.6.2). It is
fixed in recent versions by this commit:
commit bd9673a4ded96ea5c108601501c8e59003ea1be6
Author: Philippe Waroquiers <philippe@sourceware.org>
Date: Tue May 21 18:47:05 2013 +0000
Fix internal error caused by interaction between catch signal and
fork
Sorry for the noise!
Regards,
Chris