* gdb.trace/collection.exp (executable): New.

(binfile): Use it.
	(fpreg, spreg, pcreg): New.
	(test_register): Use gdb_test_multiple.  Pass /x to print.
	(prepare_for_trace_test): New.
	(run_trace_experiment): Use "continue", not gdb_run_cmd.
	(gdb_collect_args_test, gdb_collect_argstruct_test)
	(gdb_collect_argarray_test, gdb_collect_locals_test): Use
	prepare_for_trace_test.
	(gdb_collect_registers_test): Use prepare_for_trace_test.  Use
	fpreg, spreg and pcreg.
	(gdb_collect_expression_test, gdb_collect_globals_test): Use
	prepare_for_trace_test.
	(gdb_trace_collection_test): Use fpreg, spreg and pcreg.  Don't
	try to detect tracing support here.  Don't set breakpoints at
	`begin' or `end' here.
	<global scope>: Use clean_restart.  Run to main before checking
	for tracing support.  Check for for tracing support here.
This commit is contained in:
Pedro Alves 2010-03-28 23:17:57 +00:00
parent f7b9ed90a2
commit 6e79d36707
2 changed files with 83 additions and 81 deletions

View File

@ -1,3 +1,24 @@
2010-03-29 Pedro Alves <pedro@codesourcery.com>
* gdb.trace/collection.exp (executable): New.
(binfile): Use it.
(fpreg, spreg, pcreg): New.
(test_register): Use gdb_test_multiple. Pass /x to print.
(prepare_for_trace_test): New.
(run_trace_experiment): Use "continue", not gdb_run_cmd.
(gdb_collect_args_test, gdb_collect_argstruct_test)
(gdb_collect_argarray_test, gdb_collect_locals_test): Use
prepare_for_trace_test.
(gdb_collect_registers_test): Use prepare_for_trace_test. Use
fpreg, spreg and pcreg.
(gdb_collect_expression_test, gdb_collect_globals_test): Use
prepare_for_trace_test.
(gdb_trace_collection_test): Use fpreg, spreg and pcreg. Don't
try to detect tracing support here. Don't set breakpoints at
`begin' or `end' here.
<global scope>: Use clean_restart. Run to main before checking
for tracing support. Check for for tracing support here.
2010-03-28 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/break-interp.exp (test_core, test_attach, test_ld): Add

View File

@ -24,7 +24,8 @@ set bug_id 0
set testfile "collection"
set srcfile ${testfile}.c
set binfile $objdir/$subdir/$testfile
set executable $testfile
set binfile $objdir/$subdir/$executable
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
executable {debug nowarnings}] != "" } {
@ -45,6 +46,20 @@ if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
set ws "\[\r\n\t \]+"
set cr "\[\r\n\]+"
if [istarget "x86_64-*"] then {
set fpreg "rbp"
set spreg "rsp"
set pcreg "rip"
} elseif [istarget "i?86-*"] then {
set fpreg "ebp"
set spreg "esp"
set pcreg "eip"
} else {
set fpreg "fp"
set spreg "sp"
set pcreg "pc"
}
#
# Utility procs
#
@ -53,36 +68,35 @@ proc test_register { reg test_id } {
global cr
global gdb_prompt
send_gdb "print $reg\n"
gdb_expect {
-re "\\$\[0-9\]+ = \[x0\]+$cr$gdb_prompt " {
gdb_test_multiple "print /x $reg" "" {
-re "\\$\[0-9\]+ = \[x0\]+$cr$gdb_prompt $" {
fail "collect $test_id: collected $reg (zero)"
}
-re "\\$\[0-9\]+ = \[x0-9a-fA-F\]+$cr$gdb_prompt " {
-re "\\$\[0-9\]+ = \[x0-9a-fA-F\]+$cr$gdb_prompt $" {
pass "collect $test_id: collected $reg"
}
-re "\[Ee\]rror.*$gdb_prompt " {
-re "\[Ee\]rror.*$gdb_prompt $" {
fail "collect $test_id: collected $reg (error)"
}
timeout {
fail "collect $test_id: collected $reg (timeout)"
}
}
}
proc prepare_for_trace_test {} {
global executable
clean_restart $executable
runto_main
gdb_test "break begin" "" ""
gdb_test "break end" "" ""
}
proc run_trace_experiment { msg test_func } {
global gdb_prompt
gdb_run_cmd
gdb_expect {
-re ".*Breakpoint \[0-9\]+, begin .*$gdb_prompt $" {
}
-re ".*$gdb_prompt $" {
fail "collect $msg: advance to go"
}
timeout {
fail "collect $msg: advance to go (timeout)"
}
}
gdb_test "continue" \
".*Breakpoint \[0-9\]+, begin .*" \
"collect $msg: advance to begin"
gdb_test "tstart" \
"\[\r\n\]+" \
"collect $msg: start trace experiment"
@ -106,10 +120,7 @@ proc gdb_collect_args_test { myargs msg } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
gdb_test "trace args_test_func" \
"Tracepoint \[0-9\]+ at .*" \
@ -171,10 +182,7 @@ proc gdb_collect_argstruct_test { myargs msg } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
gdb_test "trace argstruct_test_func" \
"Tracepoint \[0-9\]+ at .*" \
@ -210,10 +218,7 @@ proc gdb_collect_argarray_test { myargs msg } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
gdb_test "trace argarray_test_func" \
"Tracepoint \[0-9\]+ at .*" \
@ -249,10 +254,7 @@ proc gdb_collect_locals_test { func mylocs msg } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
# Find the comment-identified line for setting this tracepoint.
set testline 0
@ -330,11 +332,11 @@ proc gdb_collect_locals_test { func mylocs msg } {
proc gdb_collect_registers_test { myregs } {
global cr
global gdb_prompt
global fpreg
global spreg
global pcreg
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
# We'll simply re-use the args_test_function for this test
gdb_test "trace args_test_func" \
@ -347,9 +349,9 @@ proc gdb_collect_registers_test { myregs } {
# Begin the test.
run_trace_experiment $myregs args_test_func
test_register "\$fp" $myregs
test_register "\$sp" $myregs
test_register "\$pc" $myregs
test_register "\$$fpreg" $myregs
test_register "\$$spreg" $myregs
test_register "\$$pcreg" $myregs
gdb_test "tfind none" \
"#0 end .*" \
@ -360,10 +362,7 @@ proc gdb_collect_expression_test { func expr val msg } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
# Find the comment-identified line for setting this tracepoint.
set testline 0
@ -406,10 +405,7 @@ proc gdb_collect_globals_test { } {
global cr
global gdb_prompt
# Make sure we're in a sane starting state.
gdb_test "tstop" "" ""
gdb_test "tfind none" "" ""
gdb_delete_tracepoints
prepare_for_trace_test
# Find the comment-identified line for setting this tracepoint.
set testline 0
@ -485,21 +481,11 @@ proc gdb_collect_globals_test { } {
"collect globals: cease trace debugging"
}
proc gdb_trace_collection_test { } {
global gdb_prompt;
proc gdb_trace_collection_test {} {
global fpreg
global spreg
global pcreg
gdb_test "set width 0" "" ""
delete_breakpoints
# We generously give ourselves one "pass" if we successfully
# detect that this test cannot be run on this target!
if { ![gdb_target_supports_trace] } then {
pass "Current target does not support trace"
return 1;
}
gdb_test "break begin" "" ""
gdb_test "break end" "" ""
gdb_collect_args_test "\$args" \
"args collectively"
gdb_collect_args_test "argc, argi, argf, argd, argstruct, argarray" \
@ -527,9 +513,8 @@ proc gdb_trace_collection_test { } {
gdb_collect_locals_test statlocal_test_func \
"locc, loci, locf, locd, locst, locar" \
"static locals individually"
gdb_collect_registers_test "\$regs"
gdb_collect_registers_test "\$fp, \$sp, \$pc"
gdb_collect_registers_test "\$$fpreg, \$$spreg, \$$pcreg"
gdb_collect_globals_test
#
@ -605,22 +590,18 @@ proc gdb_trace_collection_test { } {
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $binfile
if [target_info exists gdb_stub] {
gdb_step_for_stub;
clean_restart $executable
runto_main
# We generously give ourselves one "pass" if we successfully
# detect that this test cannot be run on this target!
if { ![gdb_target_supports_trace] } then {
pass "Current target does not support trace"
return 1;
}
# Body of test encased in a proc so we can return prematurely.
gdb_trace_collection_test
# Finished!
gdb_test "tfind none" "" ""