| Index: gdb/testsuite/gdb.trace/tstatus.exp | 
| diff --git a/gdb/testsuite/gdb.trace/tstatus.exp b/gdb/testsuite/gdb.trace/tstatus.exp | 
| index fdeb0dd5c89fb70ca80e8fa68735654ee40f8ecc..c709ad83b1bceb429282e768acfbd20c9f3306a1 100644 | 
| --- a/gdb/testsuite/gdb.trace/tstatus.exp | 
| +++ b/gdb/testsuite/gdb.trace/tstatus.exp | 
| @@ -1,4 +1,4 @@ | 
| -# Copyright 2011-2012 Free Software Foundation, Inc. | 
| +# Copyright 2011-2013 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 | 
| @@ -34,27 +34,12 @@ if ![gdb_target_supports_trace] { | 
| return -1 | 
| } | 
|  | 
| -set libipa [get_in_proc_agent] | 
| -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" "" | 
|  | 
| @@ -69,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 | 
| } | 
| } | 
| } | 
| @@ -139,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" ".*${libipa}.*" "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" | 
| +    } | 
| +} | 
|  |