Tweak gdb.trace/ftrace.exp for aarch64
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / ftrace.exp
index ab0e3bff02292c376333f35d1a1f31eeb2d00b0e..0772aa55e597a683b8782118fc20ec4ca54fbaca 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2011 Free Software Foundation, Inc.
+# Copyright 2011-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
 # the Free Software Foundation; either version 3 of the License, or
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-load_lib "trace-support.exp";
+load_lib "trace-support.exp"
 
-set testfile "ftrace"
+standard_testfile
 set executable $testfile
-set srcfile $testfile.c
-set binfile $objdir/$subdir/$testfile
 set expfile $testfile.exp
 
 # Some targets have leading underscores on assembly symbols.
@@ -39,7 +37,7 @@ if ![gdb_target_supports_trace] {
     return -1
 }
 
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 # Can't use prepare_for_testing, because that splits compiling into
@@ -86,7 +84,7 @@ proc test_fast_tracepoints {} {
 
     gdb_test "print gdb_agent_gdb_trampoline_buffer_error" ".*" ""
 
-    if { [is_x86_like_target] } {
+    if { [istarget "x86_64-*-*"] || [istarget "i\[34567\]86-*-*"] || [is_aarch64_target] } {
 
        gdb_test "ftrace set_point" "Fast tracepoint .*" \
            "fast tracepoint at a long insn"
@@ -134,11 +132,13 @@ proc test_fast_tracepoints {} {
        gdb_test "tfind pc *set_point" "Found trace frame .*" \
            "tfind set_point frame, first time"
 
+       setup_kfail "gdb/13808" "x86_64-*-linux*"
        gdb_test "print globvar" " = 1"
 
        gdb_test "tfind pc *set_point" "Found trace frame .*" \
            "tfind set_point frame, second time"
 
+       setup_kfail "gdb/13808" "x86_64-*-linux*"
        gdb_test "print anarg" " = 200"
 
        gdb_test "tfind start" "Found trace frame .*" \
@@ -159,14 +159,96 @@ proc test_fast_tracepoints {} {
                "look at collected local, second time"
 
        }
+
+       # If debugging with the remote target, try force disabling the
+       # fast tracepoints RSP feature, and confirm fast tracepoints
+       # can no longer be downloaded.
+       set test "fast tracepoint could not be downloaded with the feature disabled"
+       if [gdb_is_target_remote] {
+           gdb_test "set remote fast-tracepoints-packet off"
+
+           gdb_test_multiple "tstart" $test {
+               -re "warning: Target does not support fast tracepoints, downloading .* as regular tracepoint.*\r\n$gdb_prompt $" {
+                   pass $test
+               }
+           }
+       } else {
+           unsupported $test
+       }
     }
 }
 
+# Test compiled-condition
+# CONDEXP is the condition expression to be compiled.
+# VAR is the variable to be collected for testing.
+# LIST is a list of expected values of VAR should be collected
+# based on the CONDEXP.
+proc test_ftrace_condition { condexp var list } \
+{ with_test_prefix "ond $condexp" \
+{
+    global executable
+    global hex
+
+    clean_restart ${executable}
+    if ![runto_main] {
+       fail "Can't run to main to check for trace support"
+       return -1
+    }
+
+    gdb_test "break end" ".*" ""
+    gdb_test "tvariable \$tsv = 0"
+    gdb_test "ftrace set_point if $condexp" "Fast tracepoint .*"
+    gdb_trace_setactions "set action for tracepoint .*" "" \
+       "collect $var" "^$"
+
+    gdb_test_no_output "tstart" ""
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" ""
+    gdb_test_no_output "tstop" ""
+
+    set i 0
+    foreach expval $list {
+       gdb_test "tfind" "Found trace frame $i, tracepoint .*" "tfind frame $i"
+       gdb_test "print $var" "\\$\[0-9\]+ = $expval\[\r\n\]" "expect $expval"
+       set i [expr $i + 1]
+    }
+    gdb_test "tfind" "Target failed to find requested trace frame\."
+}}
+
 gdb_reinitialize_dir $srcdir/$subdir
 
-if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
     untested "Could not find IPA lib loaded"
     return 1
 }
 
 test_fast_tracepoints
+
+# Test conditional goto and simple expression.
+test_ftrace_condition "globvar > 7" "globvar" { 8 9 10 }
+test_ftrace_condition "globvar < 4" "globvar" { 1 2 3 }
+test_ftrace_condition "globvar >= 7" "globvar" { 7 8 9 10 }
+test_ftrace_condition "globvar <= 4" "globvar" { 1 2 3 4 }
+test_ftrace_condition "globvar == 5" "globvar" { 5 }
+test_ftrace_condition "globvar != 5" "globvar" { 1 2 3 4 6 7 8 9 10 }
+test_ftrace_condition "globvar > 3 && globvar < 7" "globvar" { 4 5 6 }
+test_ftrace_condition "globvar < 3 || globvar > 7" "globvar" { 1 2 8 9 10 }
+test_ftrace_condition "(globvar << 2) + 1 == 29" "globvar" { 7 }
+test_ftrace_condition "(globvar >> 2) == 2" "globvar" { 8 9 10 }
+
+# Test emit_call by accessing trace state variables.
+test_ftrace_condition "(\$tsv = \$tsv + 2) > 10" "globvar" { 6 7 8 9 10 }
+
+# This expression is used for testing emit_reg.
+if [is_amd64_regs_target] {
+    set arg0exp "\$rdi"
+} elseif [is_x86_like_target] {
+    set arg0exp "*(int *) (\$ebp + 8)"
+} elseif { [istarget "aarch64*-*-*"] } {
+    set arg0exp "\$x0"
+} else {
+    set arg0exp ""
+}
+
+if { "$arg0exp" != "" } {
+    test_ftrace_condition "($arg0exp > 500)" "globvar" { 6 7 8 9 10 }
+}
This page took 0.0258 seconds and 4 git commands to generate.