Clean up gdb.trace test results on targets not supporting this feature.
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / backtrace.exp
index 5093266bd0490d1de40e362263d7d26d115eae11..de4c8fe736980c22e1e676ffdd3bbe31a87f3746 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright 1998, 2007-2012 Free Software Foundation, Inc.
+#   Copyright 1998-2018 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
 
 # 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 ![gdb_trace_common_supports_arch] {
+    unsupported "no trace-common.h support for arch"
+    return -1
+}
 
-standard_testfile actions.c
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-         executable {debug nowarnings}] != "" } {
-    untested backtrace.exp
+if [prepare_for_testing "failed to prepare" $executable $srcfile \
+       [list debug nowarnings]] {
+    return -1
+}
+
+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;
+    unsupported "current target does not support trace"
+    return 1
 
 }
 
@@ -57,10 +60,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;
+    fail "could not find gdb_recursion_test function"
+    return
 }
 
 set return_me 0
@@ -92,20 +95,20 @@ gdb_test_multiple "list $baseline, +12" "all tests in this module will fail" {
     }
     -re ".*$gdb_prompt $" {
        if { ($testline1 == 0) || ($testline2 == 0) || ($testline3 == 0) || ($testline4 == 0) || ($testline5 == 0) || ($testline6 == 0) } {
-           untested backtrace.exp
+           untested "unexpected testline values"
            set return_me 1
 all tests in this module will fail."
        }
     }
     default {
-           untested backtrace.exp
+           untested "couldn't match pattern"
            set return_me 1
 all tests in this module will fail."
     }
 }
 
 if { $return_me == 1 } then {
-    return -1;
+    return -1
 }
 
 #
@@ -125,7 +128,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" \
@@ -141,29 +144,18 @@ gdb_trace_setactions "8.6: setup TP to collect regs, args, and locals" \
        "$tdp4" \
        "collect \$regs, \$args, \$locs" "^$"
 
-if [is_amd64_regs_target] {
-    set fpreg "\$rbp"
-    set spreg "\$rsp"
-} elseif [is_x86_like_target] {
-    set fpreg "\$ebp"
-    set spreg "\$esp"
-} else {
-    set fpreg "\$fp"
-    set spreg "\$sp"
-}
-
 gdb_trace_setactions "8.6: setup TP to collect stack mem cast expr" \
        "$tdp6" \
-       "collect $fpreg, \(\*\(void \*\*\) \($spreg\)\) @ 64" "^$"
+       "collect \$$fpreg, \(\*\(void \*\*\) \(\$$spreg\)\) @ 128" "^$"
 
-gdb_test "tstart" ".*" ""
+gdb_test_no_output "tstart" ""
 
-gdb_test "break end" ".*" ""
+gdb_breakpoint "end" qualified
 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,25 +202,55 @@ 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.
-
-    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"
+    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)"
+           }
        }
-       -re "#$depth\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" {
-           fail "$msg (args missing from #$depth stack frame)"
+
+       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 "#\[0-9\]+\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" {
-           fail "$msg (fewer than $depth stack frames found)"
+
+       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)
+           }
        }
+
+       # Output of 'tdump' on frame 0 and frame 1 should be
+       # identical.
+       gdb_assert ![string compare $output_string0 $output_string1] \
+           "tdump output"
     }
 }
 
@@ -259,7 +281,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 +302,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 +323,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 +344,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" \
This page took 0.026518 seconds and 4 git commands to generate.