Re: General regressions in gdbserver mode [Re: [rfc target-side break conditions 0/5 v2] General info]

Luis Gustavo
2012-02-25T19:59:17Z

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

Hi Jan,

On 02/25/2012 05:40 PM, Jan Kratochvil wrote:
> On Sat, 25 Feb 2012 19:24:58 +0100, Luis Gustavo wrote:
>> Could please try the following on your side?
>
> Yes, it works for me.
>
> Please check it in, it fixes the regression.
>
>
>> --- a/gdb/gdbserver/mem-break.c
>> +++ b/gdb/gdbserver/mem-break.c
>> @@ -726,20 +726,19 @@ void
>> clear_gdb_breakpoint_conditions (CORE_ADDR addr)
>> {
>> struct breakpoint *bp = find_gdb_breakpoint_at (addr);
>> - struct point_cond_list *cond, **cond_p;
>> + struct point_cond_list *cond, *cond_next;
>>
>> if (bp == NULL || bp->cond_list == NULL)
>> return;
>>
>> cond = bp->cond_list;
>> - cond_p =&bp->cond_list->next;
>>
>> while (cond != NULL)
>> {
>
> cond_next could be decllared inside in this block.
>

Fixed.

>> + cond_next = cond->next;
>
> Isn't missing here also?
> free (cond->cond->bytes);
>
>

It is, thanks. GDBserver does not know free_agent_expr currently, maybe
in the future.

I've checked the following in.

Luis

[-- Attachment #2: mem_fix.diff --]
[-- Type: text/x-patch, Size: 933 bytes --]

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

* mem-break.c (clear_gdb_breakpoint_conditions): Fix de-allocation
of conditions.

diff --git a/gdb/gdbserver/mem-break.c b/gdb/gdbserver/mem-break.c
index c9a6035..6b6b25c 100644
--- a/gdb/gdbserver/mem-break.c
+++ b/gdb/gdbserver/mem-break.c
@@ -726,20 +726,22 @@ void
clear_gdb_breakpoint_conditions (CORE_ADDR addr)
{
struct breakpoint *bp = find_gdb_breakpoint_at (addr);
- struct point_cond_list *cond, **cond_p;
+ struct point_cond_list *cond;

if (bp == NULL || bp->cond_list == NULL)
return;

cond = bp->cond_list;
- cond_p = &bp->cond_list->next;

while (cond != NULL)
{
+ struct point_cond_list *cond_next;
+
+ cond_next = cond->next;
+ free (cond->cond->bytes);
free (cond->cond);
free (cond);
- cond = *cond_p;
- cond_p = &cond->next;
+ cond = cond_next;
}

bp->cond_list = NULL;