[testsuite][AArch64] Port gdb.trace
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / backtrace.exp
index e6447ac713af88e0a71ffea7b8b597c5a2313293..f69089b7e5a69ea039e6f492d6bf4faa7f7332a9 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright 1998-2013 Free Software Foundation, Inc.
+#   Copyright 1998-2015 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
 
 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"
@@ -147,6 +146,9 @@ if [is_amd64_regs_target] {
 } elseif [is_x86_like_target] {
     set fpreg "\$ebp"
     set spreg "\$esp"
+} elseif [is_aarch64_target] {
+    set fpreg "\$x29"
+    set spreg "\$sp"
 } else {
     set fpreg "\$fp"
     set spreg "\$sp"
@@ -156,14 +158,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,25 +212,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 +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" \
This page took 0.029822 seconds and 4 git commands to generate.