aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2010-03-28 23:17:57 +0000
committerPedro Alves <palves@redhat.com>2010-03-28 23:17:57 +0000
commit6e79d367079170a0d69cadae27a003be49314f1b (patch)
tree4cf2a9b65bd4508569bb80d71f5b665e80eb98d5
parentf7b9ed90a2551b051c4437196ae09c86a8232b43 (diff)
downloadgdb-6e79d367079170a0d69cadae27a003be49314f1b.zip
gdb-6e79d367079170a0d69cadae27a003be49314f1b.tar.gz
gdb-6e79d367079170a0d69cadae27a003be49314f1b.tar.bz2
* 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.
-rw-r--r--gdb/testsuite/ChangeLog21
-rw-r--r--gdb/testsuite/gdb.trace/collection.exp143
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 <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
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" "" ""
-
-
-