[RFA]: Fix for pending breakpoints in manually loaded/unloaded shlibs

Jeff Johnston jjohnstn@redhat.com
Mon Aug 23 21:33:00 GMT 2004


The updated patch is attached.  The testcase had to be slightly modified to 
match the new warning message format.

2004-08-23  Jeff Johnston  <jjohnstn@redhat.com>

         * observer.sh: Add struct so_list declaration.
         * Makefile.in: Add dependencies on observer.h for solib.c and
         breakpoint.c.
         * breakpoint.c (disable_breakpoints_in_unloaded_shlib): New
         function.
         (_initialize_breakpoint): Register
         disable_breakpoints_in_unloaded_shlib as an observer of the
         "solib unloaded" observation event.
         (re_enable_breakpoints_in_shlibs): For bp_shlib_disabled breakpoints,
         call decode_line_1 so unfound breakpoint errors are silent.
         * solib.c (update_solib_list): When a solib is discovered to have
         been unloaded by the program, notify all observers of the
         "solib unloaded" observation event.


2004-08-23  Jeff Johnston  <jjohnstn@redhat.com>

         * gdb.base/unload.exp: Fix expected warning message to match
         latest format.


Ok to commit?

-- Jeff J.

Jeff Johnston wrote:
> Daniel Jacobowitz wrote:
> 
>> On Wed, Aug 18, 2004 at 03:22:22PM -0400, Jeff Johnston wrote:
>>
>>> Daniel Jacobowitz wrote:
>>>
>>>> On Wed, Aug 11, 2004 at 04:12:07PM -0400, Jeff Johnston wrote:
>>>>
>>>>> +    if (so_name +        && !strcmp (so_name, solib->so_name))
>>>>> +          {
>>>>> +        b->enable_state = bp_shlib_disabled;
>>>>> +        /* At this point, we cannot rely on remove_breakpoint
>>>>> +           succeeding so we must mark the breakpoint as not inserted
>>>>> +           to prevent future errors occurring in 
>>>>> remove_breakpoints.  */
>>>>> +        b->loc->inserted = 0;
>>>>> +        if (!disabled_shlib_breaks)
>>>>> +          {
>>>>> +        target_terminal_ours_for_output ();
>>>>> +        warning ("Temporarily disabling unloaded shared library 
>>>>> breakpoints:");
>>>>> +          }
>>>>> +        disabled_shlib_breaks = 1;
>>>>> +        warning ("breakpoint #%d ", b->number);
>>>>
>>>>
>>>>
>>>> I think you're missing a space after the colon, in the first warning.
>>>> Also, this use of multiple warning() statements is neither i18n
>>>> friendly nor MI/GUI friendly - you may get a separate dialog box for
>>>> each.  I believe other places do this with sprintf; still not 100% i18n
>>>> friendly, but avoids the MI/GUI problems.  I can't find an example
>>>> offhand.
>>>>
>>>
>>> What you do want to see so I don't waste my time on this.  As you 
>>> already know, this routine was copied from the routine which disables 
>>> shared library breakpoints in breakpoint.c.  Is it sufficient to just 
>>> issue the warning that I am temporarily disabling unloaded shared 
>>> library breakpoints and not spell out each breakpoint in turn?  I can 
>>> see this as really annoying and pointless to an end-user if there are 
>>> hundreds or thousands of breakpoints.
>>
>>
>>
>> That's a good idea.  How about this?
>>
>>     target_terminal_ours_for_output ();
>>     warning ("Temporarily disabling breakpoints for unloaded shared 
>> library \"%s\",
>>          so_name);
>>
> 
> Yes, that's exactly what I had in mind.  Consider it done plus your 
> other comments.  Eli, in light of what Daniel and Andrew have said 
> regarding the value of having an observer, may I repost with changes and 
> check the code in?
> 
> -- Jeff J.
> 
> 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: unload.patch2
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20040823/66e3293a/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: unloadtest.patch
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20040823/66e3293a/attachment-0001.ksh>


More information about the Gdb-patches mailing list