From 3aafd2ffb61b3afaba478449ec0dbe45f38dac40 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 2 Sep 2013 15:15:57 +0000 Subject: [gdbserver] Fix trace-buffer-size.exp FAILs. I'm seeing trace-buffer-size.exp failing (with gdbserver): (gdb) PASS: gdb.trace/trace-buffer-size.exp: tstatus check 2 show trace-buffer-size 4 Requested size of trace buffer is 4. (gdb) PASS: gdb.trace/trace-buffer-size.exp: show trace buffer size set trace-buffer-size -1 memory clobbered past end of allocated block Remote connection closed (gdb) FAIL: gdb.trace/trace-buffer-size.exp: set trace buffer size 2 set trace-buffer-size unlimited (gdb) PASS: gdb.trace/trace-buffer-size.exp: set trace-buffer-size unlimited That "memory clobbered past end of allocated block" is mcheck triggering. Valgrind shows: ==23624== Invalid write of size 1 ==23624== at 0x418DD8: clear_trace_buffer (tracepoint.c:1443) ==23624== by 0x418F3A: init_trace_buffer (tracepoint.c:1497) ==23624== by 0x41D95B: cmd_bigqtbuffer_size (tracepoint.c:4061) ==23624== by 0x41DEEC: handle_tracepoint_general_set (tracepoint.c:4193) clear_trace_buffer does: static void clear_trace_buffer (void) { trace_buffer_start = trace_buffer_lo; trace_buffer_free = trace_buffer_lo; trace_buffer_end_free = trace_buffer_hi; trace_buffer_wrap = trace_buffer_hi; /* A traceframe with zeroed fields marks the end of trace data. */ ((struct traceframe *) trace_buffer_free)->tpnum = 0; ((struct traceframe *) trace_buffer_free)->data_size = 0; traceframe_read_count = traceframe_write_count = 0; traceframes_created = 0; } And the tpnum+data_size fields are over 4 bytes... This fixes it by ensuring we allocate space at least for an EOB. We have code elsewhere that relies on the EOB being present (like e.g., find_traceframe), so this seems simplest. gdb/gdbserver/ 2013-09-02 Pedro Alves * tracepoint.c (TRACEFRAME_EOB_MARKER_SIZE): New macro. (init_trace_buffer): Ensure at least TRACEFRAME_EOB_MARKER_SIZE is allocated. (trace_buffer_alloc): Use TRACEFRAME_EOB_MARKER_SIZE. --- gdb/gdbserver/ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gdb/gdbserver/ChangeLog') diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 54348e5a732..f0651aa0a95 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2013-09-02 Pedro Alves + + * tracepoint.c (TRACEFRAME_EOB_MARKER_SIZE): New macro. + (init_trace_buffer): Ensure at least TRACEFRAME_EOB_MARKER_SIZE is + allocated. + (trace_buffer_alloc): Use TRACEFRAME_EOB_MARKER_SIZE. + 2013-09-02 Pierre Muller * win32-low.c (child_xfer_memory): Check if ReadProcessMemory -- cgit v1.2.1