mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
gdb/gdbserver:
2011-11-05 Yao Qi <yao@codesourcery.com> * tracepoint.c (gdb_collect): Loop over tracepoints of same address as TPOINT's. gdb/testsuite: 2011-11-05 Yao Qi <yao@codesourcery.com> * gdb.trace/trace-break.exp: Add test on setting two fast tracepoints at the same address.
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
2011-11-05 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* tracepoint.c (gdb_collect): Loop over tracepoints of same
|
||||
address as TPOINT's.
|
||||
|
||||
2011-11-02 Stan Shebs <stan@codesourcery.com>
|
||||
|
||||
* tracepoint.c (agent_mem_read_string): New function.
|
||||
|
@ -5480,14 +5480,9 @@ gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
|
||||
if (!tracing)
|
||||
return;
|
||||
|
||||
if (!tpoint->enabled)
|
||||
return;
|
||||
|
||||
ctx.base.type = fast_tracepoint;
|
||||
ctx.regs = regs;
|
||||
ctx.regcache_initted = 0;
|
||||
ctx.tpoint = tpoint;
|
||||
|
||||
/* Wrap the regblock in a register cache (in the stack, we don't
|
||||
want to malloc here). */
|
||||
ctx.regspace = alloca (register_cache_size ());
|
||||
@ -5497,30 +5492,49 @@ gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Test the condition if present, and collect if true. */
|
||||
if (tpoint->cond == NULL
|
||||
|| condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
|
||||
tpoint))
|
||||
for (ctx.tpoint = tpoint;
|
||||
ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address;
|
||||
ctx.tpoint = ctx.tpoint->next)
|
||||
{
|
||||
collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
|
||||
tpoint->address, tpoint);
|
||||
if (!ctx.tpoint->enabled)
|
||||
continue;
|
||||
|
||||
/* Note that this will cause original insns to be written back
|
||||
to where we jumped from, but that's OK because we're jumping
|
||||
back to the next whole instruction. This will go badly if
|
||||
instruction restoration is not atomic though. */
|
||||
if (stopping_tracepoint
|
||||
|| trace_buffer_is_full
|
||||
|| expr_eval_result != expr_eval_no_error)
|
||||
stop_tracing ();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If there was a condition and it evaluated to false, the only
|
||||
way we would stop tracing is if there was an error during
|
||||
condition expression evaluation. */
|
||||
if (expr_eval_result != expr_eval_no_error)
|
||||
stop_tracing ();
|
||||
/* Multiple tracepoints of different types, such as fast tracepoint and
|
||||
static tracepoint, can be set at the same address. */
|
||||
if (ctx.tpoint->type != tpoint->type)
|
||||
continue;
|
||||
|
||||
/* Test the condition if present, and collect if true. */
|
||||
if (ctx.tpoint->cond == NULL
|
||||
|| condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
|
||||
ctx.tpoint))
|
||||
{
|
||||
collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
|
||||
ctx.tpoint->address, ctx.tpoint);
|
||||
|
||||
/* Note that this will cause original insns to be written back
|
||||
to where we jumped from, but that's OK because we're jumping
|
||||
back to the next whole instruction. This will go badly if
|
||||
instruction restoration is not atomic though. */
|
||||
if (stopping_tracepoint
|
||||
|| trace_buffer_is_full
|
||||
|| expr_eval_result != expr_eval_no_error)
|
||||
{
|
||||
stop_tracing ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If there was a condition and it evaluated to false, the only
|
||||
way we would stop tracing is if there was an error during
|
||||
condition expression evaluation. */
|
||||
if (expr_eval_result != expr_eval_no_error)
|
||||
{
|
||||
stop_tracing ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-11-05 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
* gdb.trace/trace-break.exp: Add test on setting two
|
||||
fast tracepoints at the same address.
|
||||
|
||||
2011-11-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/commands.exp (cmd1 error): Fix false ERROR with gdbserver.
|
||||
|
@ -234,6 +234,7 @@ if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0
|
||||
break_trace_same_addr_1 "ftrace" ${break_always_inserted}
|
||||
break_trace_same_addr_2 "trace" "ftrace" ${break_always_inserted}
|
||||
break_trace_same_addr_2 "ftrace" "trace" ${break_always_inserted}
|
||||
break_trace_same_addr_2 "ftrace" "ftrace" ${break_always_inserted}
|
||||
break_trace_same_addr_3 "ftrace" ${break_always_inserted}
|
||||
break_trace_same_addr_4 "ftrace" ${break_always_inserted}
|
||||
}
|
||||
|
Reference in New Issue
Block a user