Index: gdb/testsuite/gdb.trace/backtrace.exp |
diff --git a/gdb/testsuite/gdb.trace/backtrace.exp b/gdb/testsuite/gdb.trace/backtrace.exp |
index 5093266bd0490d1de40e362263d7d26d115eae11..c3a7ec3d0d52127fe52d5900724bfc56c60c9a7d 100644 |
--- a/gdb/testsuite/gdb.trace/backtrace.exp |
+++ b/gdb/testsuite/gdb.trace/backtrace.exp |
@@ -1,4 +1,4 @@ |
-# Copyright 1998, 2007-2012 Free Software Foundation, Inc. |
+# Copyright 1998-2013 Free Software Foundation, Inc. |
# |
# This program is free software; you can redistribute it and/or modify |
# it under the terms of the GNU General Public License as published by |
@@ -15,27 +15,26 @@ |
# This file was written by Michael Snyder (msnyder@cygnus.com) |
-load_lib "trace-support.exp"; |
+load_lib "trace-support.exp" |
+standard_testfile actions.c |
+set executable $testfile |
+set expfile $testfile.exp |
-gdb_exit |
-gdb_start |
+if [prepare_for_testing $expfile $executable $srcfile \ |
+ [list debug nowarnings]] { |
+ untested "failed to prepare for trace tests" |
+ return -1 |
+} |
-standard_testfile actions.c |
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ |
- executable {debug nowarnings}] != "" } { |
- untested backtrace.exp |
+if ![runto_main] { |
+ fail "Can't run to main to check for trace support" |
return -1 |
} |
-gdb_load $binfile |
-gdb_test "tstop" ".*" "" |
-gdb_test "tfind none" ".*" "" |
-runto_main |
-gdb_reinitialize_dir $srcdir/$subdir |
if { ![gdb_target_supports_trace] } then { |
unsupported "Current target does not support trace" |
- return 1; |
+ return 1 |
} |
@@ -57,10 +56,10 @@ set arg4 4 |
set arg5 5 |
set arg6 6 |
-set baseline [gdb_find_recursion_test_baseline $srcfile]; |
+set baseline [gdb_find_recursion_test_baseline $srcfile] |
if { $baseline == -1 } { |
fail "Could not find gdb_recursion_test function" |
- return; |
+ return |
} |
set return_me 0 |
@@ -105,7 +104,7 @@ all tests in this module will fail." |
} |
if { $return_me == 1 } then { |
- return -1; |
+ return -1 |
} |
# |
@@ -125,7 +124,7 @@ set tdp6 [gdb_gettpnum $testline6] |
if { $tdp2 <= 0 || $tdp3 <= 0 || \ |
$tdp4 <= 0 || $tdp5 <= 0 || $tdp6 <= 0 } then { |
fail "setting tracepoints failed" |
- return; |
+ return |
} |
#gdb_trace_setactions "setup TP to collect FP" \ |
@@ -156,14 +155,14 @@ gdb_trace_setactions "8.6: setup TP to collect stack mem cast expr" \ |
"$tdp6" \ |
"collect $fpreg, \(\*\(void \*\*\) \($spreg\)\) @ 64" "^$" |
-gdb_test "tstart" ".*" "" |
+gdb_test_no_output "tstart" "" |
gdb_test "break end" ".*" "" |
gdb_test "continue" \ |
"Continuing.*Breakpoint $decimal, end.*" \ |
"run trace experiment" |
-gdb_test "tstop" ".*" "" |
+gdb_test_no_output "tstop" "" |
proc gdb_backtrace_tdp_1 { msg } { |
global gdb_prompt |
@@ -210,24 +209,57 @@ proc gdb_backtrace_tdp_3 { msg } { |
} |
} |
-proc gdb_backtrace_tdp_4 { msg depth } { |
+proc gdb_backtrace_tdp_4 { msg depth traceframe } { |
global gdb_prompt |
- # We are in a trace frame at which we collected all registers, |
- # plus a sizeable hunk of stack memory. This should enable us to |
- # display at least several stack frames worth of backtrace. We'll |
- # assume that if we can't display at least "depth" levels (with |
- # args), it counts as an error. |
+ with_test_prefix "traceframe $traceframe" { |
+ # We are in a trace frame at which we collected all registers, |
+ # plus a sizeable hunk of stack memory. This should enable us to |
+ # display at least several stack frames worth of backtrace. We'll |
+ # assume that if we can't display at least "depth" levels (with |
+ # args), it counts as an error. |
+ |
+ gdb_test_multiple "backtrace" "$msg" { |
+ -re "#$depth\[\t \].*gdb_recursion_test.*depth=\[0-9\]+.*q1=\[0-9\]+.*q2=\[0-9\]+.*q3=\[0-9\]+.*q4=\[0-9\]+.*q5=\[0-9\]+.*q6=\[0-9\]+.*$gdb_prompt $" { |
+ pass "$msg" |
+ } |
+ -re "#$depth\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" { |
+ fail "$msg (args missing from #$depth stack frame)" |
+ } |
+ -re "#\[0-9\]+\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" { |
+ fail "$msg (fewer than $depth stack frames found)" |
+ } |
+ } |
- gdb_test_multiple "backtrace" "$msg" { |
- -re "#$depth\[\t \].*gdb_recursion_test.*depth=\[0-9\]+.*q1=\[0-9\]+.*q2=\[0-9\]+.*q3=\[0-9\]+.*q4=\[0-9\]+.*q5=\[0-9\]+.*q6=\[0-9\]+.*$gdb_prompt $" { |
- pass "$msg" |
+ set output_string0 "" |
+ # Match the output of command 'tdump' and save it in |
+ # $output_string0. |
+ set test "tdump on frame 0" |
+ gdb_test_multiple "tdump" $test { |
+ -re "tdump\[\r\n\]+(.*)\[\r\n\]+$gdb_prompt $" { |
+ set output_string0 $expect_out(1,string) |
+ } |
} |
- -re "#$depth\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" { |
- fail "$msg (args missing from #$depth stack frame)" |
+ |
+ gdb_test "up" ".*" "" |
+ |
+ # Test that command 'tdump' still works properly when the |
+ # selected frame is not the current frame, and save the output |
+ # in $output_string1. |
+ set test "tdump on frame 1" |
+ set output_string1 "" |
+ gdb_test_multiple "tdump" $test { |
+ -re "tdump\[\r\n\]+(.*)\[\r\n\]+$gdb_prompt $" { |
+ set output_string1 $expect_out(1,string) |
+ } |
} |
- -re "#\[0-9\]+\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" { |
- fail "$msg (fewer than $depth stack frames found)" |
+ |
+ # Output of 'tdump' on frame 0 and frame 1 should be |
+ # identical. |
+ if ![string compare $output_string0 $output_string1] { |
+ pass "tdump output" |
+ } else { |
+ fail "tdump output" |
} |
} |
} |
@@ -259,7 +291,7 @@ gdb_backtrace_tdp_3 "8.6: Backtrace, depth == 1, collect args and locals" |
gdb_tfind_test "8.6: find frame 4" "4" "4" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
"TDP $tdp6:" "" |
-gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" |
+gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" 4 |
gdb_tfind_test "8.6: find frame 5" "5" "5" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
@@ -280,7 +312,7 @@ gdb_backtrace_tdp_3 "8.6: Backtrace, depth == 2, collect args and locals" |
gdb_tfind_test "8.6: find frame 9" "9" "9" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
"TDP $tdp6:" "" |
-gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" |
+gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" 9 |
gdb_tfind_test "8.6: find frame 10" "10" "10" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
@@ -301,7 +333,7 @@ gdb_backtrace_tdp_3 "8.6: Backtrace, depth == 3, collect args and locals" |
gdb_tfind_test "8.6: find frame 14" "14" "14" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
"TDP $tdp6:" "" |
-gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" |
+gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" 14 |
gdb_tfind_test "8.6: find frame 15" "15" "15" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
@@ -322,7 +354,7 @@ gdb_backtrace_tdp_3 "8.6: Backtrace, depth == 4, collect args and locals" |
gdb_tfind_test "8.6: find frame 19" "19" "19" |
gdb_test "printf \"TDP \%d:\\n\", \$tracepoint" \ |
"TDP $tdp6:" "" |
-gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" |
+gdb_backtrace_tdp_4 "8.6: Backtrace, depth == 1, collect stack mem expr" "0" 19 |
gdb_test "printf \"x \%d x\\n\", depth == 3" \ |
"x 0 x" \ |