This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On 02/25/2012 03:06 PM, Jan Kratochvil wrote:
On Sat, 25 Feb 2012 16:39:55 +0100, Luis Gustavo wrote:
What kind of setup you're using?

Fedora 17 x86_64. It does not crash for me without -lmcheck but it does crash for gdbserver linked with -lmcheck, gdbserver dumps core then.

With valgrind gdbserver prints:

Invalid read of size 8
    at: clear_gdb_breakpoint_conditions (mem-break.c:741)
    by: delete_gdb_breakpoint_at (mem-break.c:715)
    by: x86_remove_point (linux-x86-low.c:593)
    by: linux_remove_point (linux-low.c:4463)
    by: process_serial_event (server.c:3207)
    by: handle_serial_event (server.c:3340)
    by: handle_file_event (event-loop.c:489)
    by: process_event (event-loop.c:244)
    by: start_event_loop (event-loop.c:607)
    by: main (server.c:2773)
  Address 0x56242c8 is 8 bytes inside a block of size 16 free'd
    at: free (vg_replace_malloc.c:427)
    by: clear_gdb_breakpoint_conditions (mem-break.c:740)
    by: delete_gdb_breakpoint_at (mem-break.c:715)
    by: x86_remove_point (linux-x86-low.c:593)
    by: linux_remove_point (linux-low.c:4463)
    by: process_serial_event (server.c:3207)
    by: handle_serial_event (server.c:3340)
    by: handle_file_event (event-loop.c:489)
    by: process_event (event-loop.c:244)
    by: start_event_loop (event-loop.c:607)
    by: main (server.c:2773)


Thanks, Jan

Could please try the following on your side?


I reproduced the crash with -lmcheck and this patch fixed it for me.

Thanks,
Luis

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..69265cb 100644
--- 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 = cond->next;
       free (cond->cond);
       free (cond);
-      cond = *cond_p;
-      cond_p = &cond->next;
+      cond = cond_next;
     }
 
   bp->cond_list = NULL;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]