From 6e79d367079170a0d69cadae27a003be49314f1b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Sun, 28 Mar 2010 23:17:57 +0000 Subject: [PATCH] * 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. : Use clean_restart. Run to main before checking for tracing support. Check for for tracing support here. --- gdb/testsuite/ChangeLog | 21 +++++ gdb/testsuite/gdb.trace/collection.exp | 143 ++++++++++++++------------------- 2 files changed, 83 insertions(+), 81 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a187318..ee3f082 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,24 @@ +2010-03-29 Pedro Alves + + * 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. + : Use clean_restart. Run to main before checking + for tracing support. Check for for tracing support here. + 2010-03-28 Jan Kratochvil * gdb.base/break-interp.exp (test_core, test_attach, test_ld): Add diff --git a/gdb/testsuite/gdb.trace/collection.exp b/gdb/testsuite/gdb.trace/collection.exp index 6dd12ca..b05aa35 100644 --- a/gdb/testsuite/gdb.trace/collection.exp +++ b/gdb/testsuite/gdb.trace/collection.exp @@ -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; - - 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; - } +proc gdb_trace_collection_test {} { + global fpreg + global spreg + global pcreg - 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" "" "" - - - -- 2.7.4