Move strace -m/explicit location test to strace.exp
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / tstatus.exp
index 502366b1a0e9b55fffe4c7232d3abd8b841267ad..96e7d3abfd77315b71a91f1e61d8284079537e6c 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
 
 load_lib "trace-support.exp"
 
-set testfile "actions"
+standard_testfile actions.c
 set executable $testfile
-set srcfile $testfile.c
-set binfile $objdir/$subdir/$testfile
 set expfile tstatus.exp
 
 if [prepare_for_testing $expfile $executable $srcfile \
@@ -36,27 +34,12 @@ if ![gdb_target_supports_trace] {
     return -1
 }
 
-set libipa $objdir/../gdbserver/libinproctrace.so
-gdb_load_shlibs $libipa
-
-# Can't use prepare_for_testing, because that splits compiling into
-# building objects and then linking, and we'd fail with "linker input
-# file unused because linking not done" when building the object.
-
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-         executable [list debug shlib=$libipa] ] != "" } {
-    untested "failed to compile ftrace tests"
-    return -1
-}
-clean_restart ${executable}
-
-if ![runto_main] {
-    fail "Can't run to main for ftrace tests"
-    return 0
-}
+set tstatus_output ""
 
 proc run_trace_experiment {} {
     global gdb_prompt
+    global decimal
+    global tstatus_output
 
 #    gdb_test_no_output "set debug remote 1" ""
 
@@ -71,59 +54,65 @@ proc run_trace_experiment {} {
        "advance through tracing"
 
     # Now play with tstatus a bit.
-    # Since note support is optional, we need to match both with and without
-    # cases.
 
-    gdb_test_multiple "tstatus" "check on trace status" {
+    # Since support for notes, user, stop reason, etc. is optional, we
+    # need to match both with and without cases.
+
+    set test "tstatus reports trace note"
+    gdb_test_multiple "tstatus" $test {
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: my tracing note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
-           pass "tstatus reports trace note"
+           pass $test
        }
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
-           pass "tstatus does not report any trace note"
+           unsupported $test
        }
     }
 
     gdb_test "set trace-notes different note" "" "change tracing note"
 
-    gdb_test_multiple "tstatus" "check on trace status with diff note" {
+    set test "tstatus reports different trace note"
+    gdb_test_multiple "tstatus" $test {
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
-           pass "tstatus reports different trace note"
+           pass $test
        }
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
-           pass "tstatus does not report any different trace note"
+           unsupported $test
        }
     }
 
     gdb_test "set trace-user me me me" "" "change tracing user"
 
-    gdb_test_multiple "tstatus" "check on trace status with diff note" {
+    set test "tstatus reports trace user"
+    gdb_test_multiple "tstatus" $test {
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
-           pass "tstatus reports trace user"
+           pass $test
        }
        -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
-           pass "tstatus does not report trace user"
+           unsupported $test
        }
     }
 
     gdb_test_no_output "tstop because I can" "trace stopped with note"
 
-    gdb_test_multiple "tstatus" "check on trace status after stop" {
-       -re "Trace stopped by a tstop command (because I can)\..*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
-           pass "tstatus reports trace stop reason"
+    set test "tstatus reports trace stop reason"
+    gdb_test_multiple "tstatus" $test {
+       -re "(Trace stopped by a tstop command \\(because I can\\)\..*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\.).*\r\n$gdb_prompt $" {
+           set tstatus_output $expect_out(1,string)
+           pass $test
        }
-       -re "Trace stopped by a tstop command\..*\r\n$gdb_prompt $" {
-           pass "tstatus does not report trace stop reason"
+       -re "(Trace stopped by a tstop command\.).*\r\n$gdb_prompt $" {
+           set tstatus_output $expect_out(1,string)
+           unsupported $test
        }
     }
 
-    # Tracepoint hit count is optional, so pass it either way.
-
-    gdb_test_multiple "info trace" "show tracepoint state" {
-       -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+tracepoint already hit 1 time\[\r\n\]+\[\t ]+collect parm.*\r\n$gdb_prompt $" {
-           pass "info trace reports tracepoint hit count"
+    set test "info trace reports tracepoint hit count and traceframe usage"
+    gdb_test_multiple "info trace" $test {
+       -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+tracepoint already hit 1 time\[\r\n\]+\[\t ]+trace buffer usage ${decimal} bytes\.\[\r\n\]+\[\t ]+collect parm.*\r\n$gdb_prompt $" {
+           pass $test
        }
        -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+collect parm.*\r\n$gdb_prompt $" {
-           pass "info trace does not report tracepoint hit count"
+           unsupported $test
        }
     }
 }
@@ -141,34 +130,49 @@ proc test_tracepoints {} {
     gdb_trace_setactions "collect at set_point: define actions" \
        "" \
        "collect parm" "^$"
-    set fastgood 0
-
-    gdb_test_multiple "ftrace gdb_recursion_test" "set fast tracepoint" {
-       -re "May not have a fast tracepoint at .*\r\n$gdb_prompt $" {
-           pass "4-byte fast tracepoint could not be set"
-       }
-       -re "Fast tracepoint .*\r\n$gdb_prompt $" {
-           pass "4-byte fast tracepoint is set"
-           set fastgood 1
-       }
-    }
-
-    if { $fastgood } {
-
-       gdb_trace_setactions "collect at four_byter: define actions" \
-           "" \
-           "collect globvar, anarg" "^$"
-    }
 
     run_trace_experiment
 
 }
 
-gdb_reinitialize_dir $srcdir/$subdir
+test_tracepoints
 
-if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } {
-    untested "Could not find IPA lib loaded"
-    return 1
+set tracefile [standard_output_file ${testfile}]
+# Save trace frames to tfile.
+gdb_test "tsave ${tracefile}.tf" \
+    "Trace data saved to file '${tracefile}.tf'.*" \
+    "save tfile trace file"
+# Save trace frames to CTF.
+gdb_test "tsave -ctf ${tracefile}.ctf" \
+    "Trace data saved to directory '${tracefile}.ctf'.*" \
+    "save ctf trace file"
+
+# Change target to tfile.
+set test "change to tfile target"
+gdb_test_multiple "target tfile ${tracefile}.tf" "$test" {
+    -re "A program is being debugged already.  Kill it. .y or n. " {
+       send_gdb "y\n"
+       exp_continue
+    }
+    -re "$gdb_prompt $" {
+       pass "$test"
+    }
 }
 
-test_tracepoints
+# Convert "(because I can) to "\(because I can\)"
+set tstatus_output [string map {\( \\(} $tstatus_output]
+set tstatus_output [string map {\) \\)} $tstatus_output]
+
+# The status should be identical to the status of live inferior.
+gdb_test "tstatus" "Using a trace file\.\r\n${tstatus_output}.*" \
+    "tstatus on tfile target"
+
+# Change target to ctf if GDB supports.
+gdb_test_multiple "target ctf ${tracefile}.ctf" "" {
+    -re "Undefined target command: \"ctf ${tracefile}.ctf\"\.  Try \"help target\"\.\r\n$gdb_prompt $" {
+    }
+    -re ".*\r\n$gdb_prompt $" {
+       gdb_test "tstatus" "Using a trace file\.\r\n${tstatus_output}.*" \
+           "tstatus on ctf target"
+    }
+}
This page took 0.025875 seconds and 4 git commands to generate.