#   Copyright 2010-2012 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
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Test of trace file support.

# Note that unlike most of the tracing tests, this can be run on
# targets lacking tracepoint support; the program tfile.c has the
# ability to generate synthetic trace files directly, and the tfile
# target is available to all GDB configs.

load_lib "trace-support.exp";

if [target_info exists gdb,nofileio] {
    verbose "Skipping tfile.exp because of no fileio capabilities."
    continue
}


gdb_exit
gdb_start
set testfile "tfile"
set srcfile ${testfile}.c
set binfile $objdir/$subdir/$testfile
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	  executable {debug nowarnings}] != "" } {
    untested ${testfile}.exp
    return -1
}
gdb_reinitialize_dir $srcdir/$subdir

# Make sure we are starting fresh.
remote_file host delete basic.tf
remote_file host delete error.tf

gdb_load $binfile

runto_main

gdb_test "break done_making_trace_files" ".*" ""

gdb_test "continue" ".*" ""

# tsave command would be tested here...

gdb_test "continue" ".*" ""

# Program has presumably exited, now target a trace file it created.

gdb_test "target tfile basic.tf" "Created tracepoint.*" "target tfile"

gdb_test "info trace" ".*tracepoint.*in write_basic_trace_file.*" \
    "info tracepoints on trace file"

gdb_test "tfind 0" \
    "Found trace frame 0, tracepoint \[0-9\]+.
\#0  write_basic_trace_file ().*" \
    "tfind 0 on trace file"

# Note that there is no tracepoint collecting these globals, we
# just happen to know they are covered by the trace frame.

gdb_test "print testglob" " = 31415" "print testglob on trace file"

gdb_test "print testglob2" " = 271828" "print testglob2 on trace file"

gdb_test "print constglob" " = 10000" "print constglob on trace file"

gdb_test "tfind" "Target failed to find requested trace frame." \
    "tfind does not find a second frame in trace file"

gdb_test "tstatus" \
    "Using a trace file.*
Trace stopped by a tstop command.*
Collected 1 trace frame.*
Trace buffer has 256 bytes of 4096 bytes free \\(93% full\\).*
Looking at trace frame 0, tracepoint .*" \
    "tstatus on trace file"

gdb_test "tfind end" "No longer looking at any trace frame" "leave tfind mode"

gdb_test "backtrace" "No stack\." \
    "no stack if no traceframe selected"

gdb_test "info registers" "The program has no registers now\." \
    "no registers if no traceframe selected"

# Now start afresh, using only a trace file.

gdb_exit
gdb_start

gdb_load $binfile

gdb_test "target tfile error.tf" "Created tracepoint.*" "target tfile"

gdb_test "tstatus" \
    "Using a trace file.*
Trace stopped by an error \\(made-up error, tracepoint 1\\).*
Collected 0 trace frame.*
Trace buffer has 256 bytes of 4096 bytes free \\(93% full\\).*
Not looking at any trace frame.*" \
    "tstatus on error trace file"

# Make sure we can reopen without error.
gdb_test \
    "interpreter-exec mi \"-target-select tfile basic.tf\"" \
    "\\^connected.*"
