Re: [patch] update_global_location_list my comment fix [Re: [PATCH] Fix breakpoint updates for multi-inferior]

Luis Gustavo
2012-02-24T15:23:35Z

[-- Attachment #1: Type: text/plain, Size: 1582 bytes --]

On 02/09/2012 09:31 AM, Pedro Alves wrote:
> On 02/09/2012 11:04 AM, Luis Gustavo wrote:
>> On 02/09/2012 06:22 AM, Jan Kratochvil wrote:
>>> On Thu, 09 Feb 2012 00:39:42 +0100, Luis Gustavo wrote:
>>>> + /* Sort by pspace. This effectively sorts locations by inferior in
>>>> + a multi-inferior environment. */
>>>> +
>>>> + if (a->pspace != b->pspace)
>>>> + return (a->pspace> b->pspace) - (a->pspace< b->pspace);
>>>
>>> This does not follow the comment I made:
>>>
>>> /* Make the internal GDB representation stable across GDB runs
>>> where A and B memory inside GDB can differ.
>>>
>>> I would prefer there (and it will not fit on a single line :-) ):
>>>
>>> return (a->pspace->num> b->pspace->num) - (a->pspace->num< b->pspace->num);
>>>
>>> NUM should be the same on each GDB run for the same inferior / command file.
>>
>> I would still like to keep an appropriate comment regarding multi-inferiors next to the pspace comparison, like the following... maybe it would've been best to keep the change above your new comment. Here's a new version.
>>
>> What do you think?
>
> We need to sort by pspace even before that, before:
>
> /* Sort permanent breakpoints first. */
> if (a_perm != b_perm)
> return (a_perm< b_perm) - (a_perm> b_perm);
>
> So that you don't get:
>
> #1 PSPACE1 ADDR1 PERM
> #2 PSPACE2 ADDR1 PERM
> #3 PSPACE1 ADDR1
> #4 PSPACE2 ADDR1
>
> But instead:
>
> #1 PSPACE1 ADDR1 PERM
> #2 PSPACE1 ADDR1
> #3 PSPACE2 ADDR1 PERM
> #4 PSPACE2 ADDR1
>

I've checked the following in...

Luis

[-- Attachment #2: 0001-fix_multiprocess_breaks.diff --]
[-- Type: text/x-patch, Size: 947 bytes --]

2012-02-24 Luis Machado <lgustavo@codesourcery.com>

* breakpoint.c (bp_location_compare): Sort by pspace before sorting by
number.

Index: gdb/gdb/breakpoint.c
===================================================================
--- gdb.orig/gdb/breakpoint.c 2012-02-24 12:44:27.582553984 -0200
+++ gdb/gdb/breakpoint.c 2012-02-24 12:44:59.210553984 -0200
@@ -10609,6 +10609,14 @@ bp_location_compare (const void *ap, con
if (a->address != b->address)
return (a->address > b->address) - (a->address < b->address);

+ /* Sort locations at the same address by their pspace number, keeping
+ locations of the same inferior (in a multi-inferior environment)
+ grouped. */
+
+ if (a->pspace->num != b->pspace->num)
+ return ((a->pspace->num > b->pspace->num)
+ - (a->pspace->num < b->pspace->num));
+
/* Sort permanent breakpoints first. */
if (a_perm != b_perm)
return (a_perm < b_perm) - (a_perm > b_perm);