Fix test names starting with uppercase output by basic functions
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / backtrace.exp
index 7e837d6db068a70c282dd2d3e8293ec9e95a3084..44a76579711da154f02747e1d4085e461b7cc52e 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright 1998, 2007, 2008 Free Software Foundation, Inc.
+#   Copyright 1998-2016 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
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Please email any bugs, comments, and/or additions to this file to:
-# bug-gdb@prep.ai.mit.edu
-
 # 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
 
-if $tracelevel then {
-    strace $tracelevel
+if [prepare_for_testing $expfile $executable $srcfile \
+       [list debug nowarnings]] {
+    untested "failed to prepare for trace tests"
+    return -1
 }
 
-set prms_id 0
-set bug_id 0
-
-gdb_exit
-gdb_start
-
-if [istarget "m68k-*-elf"] then {
-    load_lib "emc-support.exp";
-    set srcfile gdb_c_test.c
-    set binfile [board_info target d490_binfile];
-    gdb_test "set remotetimeout 6" "" ""
-    set timeout 500
-    gdb_target_monitor "$binfile"
-    # Give a TSTOP and ignore errors, to make sure any previous trace is off
-    gdb_test "tstop" "" ""
-    gdb_test "tfind none"  "" ""
-    send_gdb "compare-sections CS\n"
-    gdb_expect {
-       -re "MIS-MATCHED.*$gdb_prompt $" {
-           untested backtrace.exp
-           return -1
-           all tests in this module will fail.";
-       }
-       -re ".*$gdb_prompt $" { }
-    }
-} else {
-    set testfile "actions"
-    set srcfile ${testfile}.c
-    set binfile $objdir/$subdir/$testfile
-    if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-           executable {debug nowarnings}] != "" } {
-       untested backtrace.exp
-       return -1
-    }
-    gdb_load $binfile
-    gdb_test "tstop"       "" ""
-    gdb_test "tfind none"  "" ""
-    runto_main
+if ![runto_main] {
+    fail "can't run to main to check for trace support"
+    return -1
 }
-gdb_reinitialize_dir $srcdir/$subdir
 
-# 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;
+    unsupported "current target does not support trace"
+    return 1
 
 }
 
@@ -91,14 +56,15 @@ 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
 }
 
-send_gdb "list $baseline, +12\n"
-gdb_expect {
+set return_me 0
+
+gdb_test_multiple "list $baseline, +12" "all tests in this module will fail" {
     -re "\[\r\n\](\[0-9\]+).*gdbtestline 1 " {
        set testline1 $expect_out(1,string)
        exp_continue
@@ -126,15 +92,19 @@ gdb_expect {
     -re ".*$gdb_prompt $" {
        if { ($testline1 == 0) || ($testline2 == 0) || ($testline3 == 0) || ($testline4 == 0) || ($testline5 == 0) || ($testline6 == 0) } {
            untested backtrace.exp
-           return -1
+           set return_me 1
 all tests in this module will fail."
        }
     }
     default {
            untested backtrace.exp
-           return -1
+           set return_me 1
 all tests in this module will fail."
-    } 
+    }
+}
+
+if { $return_me == 1 } then {
+    return -1
 }
 
 #
@@ -154,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" \
@@ -171,22 +141,17 @@ gdb_trace_setactions "8.6: setup TP to collect regs, args, and locals" \
        "collect \$regs, \$args, \$locs" "^$"
 
 gdb_trace_setactions "8.6: setup TP to collect stack mem cast expr" \
-       "$tdp6" \
-       "collect \$fp, \(\*\(void \*\*\) \(\$sp\)\) @ 64" "^$"
-
-gdb_test "tstart" "" ""
-
-if [istarget "m68k-*-elf"] then {
-    gdb_emclaptop_command "85,$arg1,$arg2,$arg3,$arg4,$arg5,$arg6"
-    sleep 5
-} else {
-    gdb_test "break end" "" ""
-    gdb_test "continue" \
-           "Continuing.*Breakpoint $decimal, end.*" \
-           "run trace experiment"
-}
+       "$tdp6" \
+       "collect \$$fpreg, \(\*\(void \*\*\) \(\$$spreg\)\) @ 128" "^$"
 
-gdb_test "tstop" "" ""
+gdb_test_no_output "tstart" ""
+
+gdb_test "break end" ".*" ""
+gdb_test "continue" \
+    "Continuing.*Breakpoint $decimal, end.*" \
+    "run trace experiment"
+
+gdb_test_no_output "tstop" ""
 
 proc gdb_backtrace_tdp_1 { msg } {
     global gdb_prompt
@@ -197,16 +162,9 @@ proc gdb_backtrace_tdp_1 { msg } {
     # to be able to display the function's arguments or locals, and we
     # do not expect to be able to identify the caller of this function.
     
-    send_gdb "backtrace\n"
-    gdb_expect {
-       -re "#0\[\t \]+gdb_recursion_test.*depth=.*$gdb_prompt $" {
-           pass "$msg"
-       }
-       -re ".*$gdb_prompt $" {
-           fail "$msg"
-       }
-       timeout { fail "$msg (timeout)" }
-    }
+    gdb_test "backtrace" \
+       "#0\[\t \]+gdb_recursion_test.*depth=.*" \
+       "$msg"
 }
 
 proc gdb_backtrace_tdp_2 { msg } {
@@ -218,16 +176,9 @@ proc gdb_backtrace_tdp_2 { msg } {
     # passed in registers (which isn't the case for m68k), and we
     # don't expect to be able to identify the caller's stack frame.
 
-    send_gdb "backtrace\n"
-    gdb_expect {
-       -re "#0\[\t \]+gdb_recursion_test.*depth=.*$gdb_prompt $" {
-           pass "$msg"
-       }
-       -re ".*$gdb_prompt $" {
-           fail "$msg"
-       }
-       timeout { fail "$msg (timeout)" }
-    }
+    gdb_test "backtrace" \
+       "#0\[\t \]+gdb_recursion_test.*depth=.*" \
+       "$msg"
 }
 
 proc gdb_backtrace_tdp_3 { msg } {
@@ -237,45 +188,65 @@ proc gdb_backtrace_tdp_3 { msg } {
     # arguments and all locals.  This means that the display of
     # stack frame #0 should be complete (including argument values).
 
-    send_gdb "backtrace\n"
-    gdb_expect {
+    gdb_test_multiple "backtrace" "$msg" {
        -re "#0\[\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 "#0\[\t \]+gdb_recursion_test.*depth=Cannot access.*$gdb_prompt $" {
            fail "$msg (failed to collect arguments)"
        }
-       -re ".*$gdb_prompt $" {
-           fail "$msg"
-       }
-       timeout { fail "$msg (timeout)" }
     }
 }
 
-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.
-
-    send_gdb "backtrace\n"
-    gdb_expect {
-       -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)"
+    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 "#\[0-9\]+\[\t \].*gdb_recursion_test.*depth=.*$gdb_prompt $" {
-           fail "$msg (fewer than $depth stack frames found)"
+
+       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 ".*$gdb_prompt $" {
-           fail "$msg"
+
+       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)
+           }
        }
-       timeout { fail "$msg (timeout)" }
+
+       # Output of 'tdump' on frame 0 and frame 1 should be
+       # identical.
+       gdb_assert ![string compare $output_string0 $output_string1] \
+           "tdump output"
     }
 }
 
@@ -306,7 +277,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" \
@@ -327,7 +298,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" \
@@ -348,7 +319,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" \
@@ -369,11 +340,11 @@ 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" \
        "1.13: trace in recursion: depth not equal to 3"
 
 # Finished!
-gdb_test "tfind none" "" ""
+gdb_test "tfind none" ".*" ""
This page took 0.035755 seconds and 4 git commands to generate.