Fix argument to compiled_cond, and add cases for compiled-condition.
This patch fixes the argument passed to compiled_cond. It should be regs buffer instead of tracepoint_hit_ctx. Test case is added as well for testing compiled-cond. gdb/gdbserver/ChangeLog 2015-09-16 Wei-cheng Wang <cole945@gmail.com> * tracepoint.c (eval_result_type): Change prototype. (condition_true_at_tracepoint): Fix argument to compiled_cond. gdb/testsuite/ChangeLog 2015-09-16 Wei-cheng Wang <cole945@gmail.com> * gdb.trace/ftrace.exp: (test_ftrace_condition) New function for testing bytecode compilation.
This commit is contained in:
parent
1ed415e2b9
commit
d78908cff5
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-16 Wei-cheng Wang <cole945@gmail.com>
|
||||||
|
|
||||||
|
* tracepoint.c (eval_result_type): Change prototype.
|
||||||
|
(condition_true_at_tracepoint): Fix argument to compiled_cond.
|
||||||
|
|
||||||
2015-09-15 Pedro Alves <palves@redhat.com>
|
2015-09-15 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* remote-utils.c (prepare_resume_reply) <TARGET_WAITKIND_EXECD>:
|
* remote-utils.c (prepare_resume_reply) <TARGET_WAITKIND_EXECD>:
|
||||||
|
|
|
@ -695,7 +695,7 @@ enum tracepoint_type
|
||||||
|
|
||||||
struct tracepoint_hit_ctx;
|
struct tracepoint_hit_ctx;
|
||||||
|
|
||||||
typedef enum eval_result_type (*condfn) (struct tracepoint_hit_ctx *,
|
typedef enum eval_result_type (*condfn) (unsigned char *,
|
||||||
ULONGEST *);
|
ULONGEST *);
|
||||||
|
|
||||||
/* The definition of a tracepoint. */
|
/* The definition of a tracepoint. */
|
||||||
|
@ -4907,7 +4907,10 @@ condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
|
||||||
used. */
|
used. */
|
||||||
#ifdef IN_PROCESS_AGENT
|
#ifdef IN_PROCESS_AGENT
|
||||||
if (tpoint->compiled_cond)
|
if (tpoint->compiled_cond)
|
||||||
err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (ctx, &value);
|
{
|
||||||
|
struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx;
|
||||||
|
err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (fctx->regs, &value);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-16 Wei-cheng Wang <cole945@gmail.com>
|
||||||
|
|
||||||
|
* gdb.trace/ftrace.exp: (test_ftrace_condition) New function
|
||||||
|
for testing bytecode compilation.
|
||||||
|
|
||||||
2015-09-16 Pedro Alves <palves@redhat.com>
|
2015-09-16 Pedro Alves <palves@redhat.com>
|
||||||
Sandra Loosemore <sandra@codesourcery.com>
|
Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,42 @@ proc test_fast_tracepoints {} {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test compiled-condition
|
||||||
|
# CONDEXP is the condition expression to be compiled.
|
||||||
|
# VAR is the variable to be collected for testing.
|
||||||
|
# LIST is a list of expected values of VAR should be collected
|
||||||
|
# based on the CONDEXP.
|
||||||
|
proc test_ftrace_condition { condexp var list } \
|
||||||
|
{ with_test_prefix "ond $condexp" \
|
||||||
|
{
|
||||||
|
global executable
|
||||||
|
global hex
|
||||||
|
|
||||||
|
clean_restart ${executable}
|
||||||
|
if ![runto_main] {
|
||||||
|
fail "Can't run to main to check for trace support"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test "break end" ".*" ""
|
||||||
|
gdb_test "tvariable \$tsv = 0"
|
||||||
|
gdb_test "ftrace set_point if $condexp" "Fast tracepoint .*"
|
||||||
|
gdb_trace_setactions "set action for tracepoint .*" "" \
|
||||||
|
"collect $var" "^$"
|
||||||
|
|
||||||
|
gdb_test_no_output "tstart" ""
|
||||||
|
gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" ""
|
||||||
|
gdb_test_no_output "tstop" ""
|
||||||
|
|
||||||
|
set i 0
|
||||||
|
foreach expval $list {
|
||||||
|
gdb_test "tfind" "Found trace frame $i, tracepoint .*" "tfind frame $i"
|
||||||
|
gdb_test "print $var" "\\$\[0-9\]+ = $expval\[\r\n\]" "expect $expval"
|
||||||
|
set i [expr $i + 1]
|
||||||
|
}
|
||||||
|
gdb_test "tfind" "Target failed to find requested trace frame\."
|
||||||
|
}}
|
||||||
|
|
||||||
gdb_reinitialize_dir $srcdir/$subdir
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
|
||||||
if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
|
if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
|
||||||
|
@ -186,3 +222,31 @@ if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
|
||||||
}
|
}
|
||||||
|
|
||||||
test_fast_tracepoints
|
test_fast_tracepoints
|
||||||
|
|
||||||
|
# Test conditional goto and simple expression.
|
||||||
|
test_ftrace_condition "globvar > 7" "globvar" { 8 9 10 }
|
||||||
|
test_ftrace_condition "globvar < 4" "globvar" { 1 2 3 }
|
||||||
|
test_ftrace_condition "globvar >= 7" "globvar" { 7 8 9 10 }
|
||||||
|
test_ftrace_condition "globvar <= 4" "globvar" { 1 2 3 4 }
|
||||||
|
test_ftrace_condition "globvar == 5" "globvar" { 5 }
|
||||||
|
test_ftrace_condition "globvar != 5" "globvar" { 1 2 3 4 6 7 8 9 10 }
|
||||||
|
test_ftrace_condition "globvar > 3 && globvar < 7" "globvar" { 4 5 6 }
|
||||||
|
test_ftrace_condition "globvar < 3 || globvar > 7" "globvar" { 1 2 8 9 10 }
|
||||||
|
test_ftrace_condition "(globvar << 2) + 1 == 29" "globvar" { 7 }
|
||||||
|
test_ftrace_condition "(globvar >> 2) == 2" "globvar" { 8 9 10 }
|
||||||
|
|
||||||
|
# Test emit_call by accessing trace state variables.
|
||||||
|
test_ftrace_condition "(\$tsv = \$tsv + 2) > 10" "globvar" { 6 7 8 9 10 }
|
||||||
|
|
||||||
|
# This expression is used for testing emit_reg.
|
||||||
|
if [is_amd64_regs_target] {
|
||||||
|
set arg0exp "\$rdi"
|
||||||
|
} elseif [is_x86_like_target] {
|
||||||
|
set arg0exp "*(int *) (\$ebp + 8)"
|
||||||
|
} else {
|
||||||
|
set arg0exp ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if { "$arg0exp" != "" } {
|
||||||
|
test_ftrace_condition "($arg0exp > 500)" "globvar" { 6 7 8 9 10 }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue