# Copyright 1998, 2005, 2007, 2008, 2009, 2010, 2011
# 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/>.

load_lib "trace-support.exp"

set testfile "unavailable"
set srcfile ${testfile}.cc
set executable $testfile
set binfile $objdir/$subdir/$executable

if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	executable {debug nowarnings c++}] != "" } {
    untested unavailable.exp
    return -1
}

set ws "\[\r\n\t \]+"
set cr "\[\r\n\]+"

if [istarget "x86_64-*"] then {
    set fpreg "rbp"
    set spreg "rsp"
    set pcreg "rip"
} elseif [istarget "i?86-*"] then {
    set fpreg "ebp"
    set spreg "esp"
    set pcreg "eip"
} else {
    set fpreg "fp"
    set spreg "sp"
    set pcreg "pc"
}

#
# Utility procs
#

proc test_register { reg } {
    global gdb_prompt
    global hex
    global cr

    gdb_test_multiple "print /x $reg" "collected $reg" {
	-re "\\$\[0-9\]+ = \[x0\]+$cr$gdb_prompt $" {
	    fail "collected $reg (zero)"
	}
	-re "\\$\[0-9\]+ = $hex$cr$gdb_prompt $" {
	    pass "collected $reg"
	}
	-re "\[Ee\]rror.*$gdb_prompt $" {
	    fail "collected $reg (error)"
	}
    }
}

proc test_register_unavailable { reg } {
    gdb_test "print /x $reg" \
	"<unavailable>" \
	"correctly report $reg as unavailable"
}

proc prepare_for_trace_test {} {
    global executable

    clean_restart $executable

    runto_main

    gdb_test "break begin" ".*" ""
    gdb_test "break end" ".*" ""
}

proc run_trace_experiment { test_func } {
    global gdb_prompt

    gdb_test "continue" \
	".*Breakpoint \[0-9\]+, begin .*" \
	"advance to begin"

    gdb_test_no_output "tstart" "start trace experiment"

    gdb_test "continue" \
	    "Continuing.*Breakpoint \[0-9\]+, end.*" \
	    "run trace experiment"
    gdb_test "tstop" \
	    "\[\r\n\]+" \
	    "stop trace experiment"
    gdb_test "tfind start" \
	    "#0  $test_func .*" \
	    "tfind test frame"
}

#
# Test procs
#

proc gdb_collect_args_test {} {
    global cr
    global gdb_prompt
    global pf_prefix

    set old_pf_prefix $pf_prefix
    set pf_prefix "$pf_prefix unavailable arguments:"

    prepare_for_trace_test

    gdb_test "trace args_test_func" \
	"Tracepoint \[0-9\]+ at .*" \
	"set tracepoint"

    # Begin the test.
    run_trace_experiment args_test_func

    # Test printing the variables, and also their addresses.  We
    # haven't collected any stack, so there's no way GDB can figure
    # out the latter.

    gdb_test "print argc" " = <unavailable>"
    gdb_test "print &argc" \
	"Can't take address of \"argc\" which isn't an lvalue\."

    gdb_test "print argi" " = <unavailable>"
    gdb_test "print &argi" \
	"Can't take address of \"argi\" which isn't an lvalue\."

    gdb_test "print argf" " = <unavailable>"
    gdb_test "print &argf" \
	"Can't take address of \"argf\" which isn't an lvalue\."

    gdb_test "print argd" " = <unavailable>"
    gdb_test "print &argd" \
	"Can't take address of \"argd\" which isn't an lvalue\."

    # struct arg as one of several args (near end of list)

    gdb_test "print argstruct" \
	" = \{memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>\}"

    gdb_test "print argstruct.memberc" " = <unavailable>"
    gdb_test "print argstruct.memberi" " = <unavailable>"
    gdb_test "print argstruct.memberf" " = <unavailable>"
    gdb_test "print argstruct.memberd" " = <unavailable>"

    gdb_test "print argarray" " = \\(int \\*\\) <unavailable>"

    gdb_test "print &argarray" \
	"Can't take address of \"argarray\" which isn't an lvalue\."

    gdb_test "print argarray\[0\]" "value is not available"

    # Test "info args"
    set r ""
    set r "${r}argc = <unavailable>${cr}"
    set r "${r}argi = <unavailable>${cr}"
    set r "${r}argf = <unavailable>${cr}"
    set r "${r}argd = <unavailable>${cr}"
    set r "${r}argstruct = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}${cr}"
    set r "${r}argarray = <unavailable>${cr}"
    gdb_test "info args" "$r" "info args"

    gdb_test "tfind none" \
	"#0  end .*" \
	"cease trace debugging"

    set pf_prefix $old_pf_prefix
}

proc gdb_collect_locals_test { func msg } {
    global cr
    global gdb_prompt
    global pf_prefix

    set old_pf_prefix $pf_prefix
    set pf_prefix "$pf_prefix unavailable locals: $msg:"

    prepare_for_trace_test

    set testline [gdb_get_line_number "set $func tracepoint here"]

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "set tracepoint"

    # Begin the test.
    run_trace_experiment $func

    gdb_test "print locc" " = <unavailable>"
    gdb_test "print loci" " = <unavailable>"
    gdb_test "print locf" " = <unavailable>"
    gdb_test "print locd" " = <unavailable>"

    gdb_test "print locst.memberc" " = <unavailable>"
    gdb_test "print locst.memberi" " = <unavailable>"
    gdb_test "print locst.memberf" " = <unavailable>"
    gdb_test "print locst.memberd" " = <unavailable>"

    gdb_test "print locar\[0\]" " = <unavailable>"
    gdb_test "print locar\[1\]" " = <unavailable>"
    gdb_test "print locar\[2\]" " = <unavailable>"
    gdb_test "print locar\[3\]" " = <unavailable>"

    # Test "info locals"
    set r ""
    set r "${r}locf = <unavailable>${cr}"
    set r "${r}locd = <unavailable>${cr}"
    set r "${r}locst = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}${cr}"
    set r "${r}locar = {<unavailable>, <unavailable>, <unavailable>, <unavailable>}${cr}"
    set r "${r}i = <unavailable>${cr}"
    if { $func == "local_test_func" } {
	set r "${r}locdefst = {<No data fields>}${cr}"
    }
    set r "${r}locc = <unavailable>${cr}"
    set r "${r}loci = <unavailable>${cr}"
    gdb_test "info locals" "$r" "info locals"

    gdb_test "tfind none" \
	"#0  end .*" \
	"cease trace debugging"

    set pf_prefix $old_pf_prefix
}

proc gdb_unavailable_registers_test { } {
    global gdb_prompt
    global spreg
    global pcreg
    global pf_prefix

    set old_pf_prefix $pf_prefix
    set pf_prefix "$pf_prefix unavailable registers:"

    prepare_for_trace_test

    # We'll simply re-use the globals_test_function for this test
    gdb_test "trace globals_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "set tracepoint"

    # Collect nothing.

    # Begin the test.
    run_trace_experiment globals_test_func

    # On some archs, the $sp/$pc are a real raw registers.  On others,
    # like x86, they're user registers.  Test both variants.
    test_register_unavailable "\$$spreg"
    test_register_unavailable "\$sp"

    # Test reading uncollected pseudo-registers.  The set of which
    # depends on target.
    if [istarget "x86_64-*"] then {
	# Check the raw register first.
	test_register_unavailable "\$rax"
	test_register_unavailable "\$eax"
	test_register_unavailable "\$ax"
    } elseif [istarget "i?86-*"] then {
	# Check the raw register first.
	test_register_unavailable "\$eax"
	test_register_unavailable "\$ax"
    }

    # GDBserver always provides the PC value of regular tracepoint
    # hits, since it's the same as the tracepoint's address.
    test_register "\$$pcreg"
    test_register "\$pc"

    gdb_test "info registers" \
	"\\*value not available\\*.*\\*value not available\\*" \
	"info registers, multiple registers not available"

    gdb_test "info registers \$$spreg" \
	"\\*value not available\\*" \
	"info registers \$$spreg reports not available"

    gdb_test "tfind none" "#0  end .*" "cease trace debugging"

    set pf_prefix $old_pf_prefix
}

proc gdb_collect_globals_test { } {
    global ws
    global cr
    global gdb_prompt
    global hex
    global pf_prefix

    set old_pf_prefix $pf_prefix
    set pf_prefix "$pf_prefix collect globals:"

    prepare_for_trace_test

    set testline [gdb_get_line_number "set globals_test_func tracepoint here"]

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "set tracepoint"

    # We collect the initial sizeof(pointer) bytes of derived_partial
    # in an attempt of collecting the vptr.  Not portable, but should
    # work everywhere we need to care.
    gdb_trace_setactions "define actions" \
	"" \
	"collect struct_b.struct_a.array\[2\]" "^$" \
	"collect struct_b.struct_a.array\[100\]" "^$" \
	\
	"collect a" "^$" \
	"collect c" "^$" \
	\
	"collect tarray\[0\].a" "^$" \
	"collect tarray\[1\].a" "^$" \
	"collect tarray\[3\].a" "^$" \
	"collect tarray\[3\].b" "^$" \
	"collect tarray\[4\].b" "^$" \
	"collect tarray\[5\].b" "^$" \
	\
	"collect g_string_p" "^$" \
	"collect g_string_partial\[1\]" "^$" \
	"collect g_string_partial\[2\]" "^$" \
	\
	"collect g_structref_p" "^$" \
	\
	"collect *((char *)&derived_partial)@sizeof\(void *\)" "^$" \
	"collect derived_whole" "^$" \
	\
	"collect virtual_partial.z" "^$"

    # Begin the test.
    run_trace_experiment globals_test_func

    gdb_test "print globalc" " = <unavailable>"
    gdb_test "print globali" " = <unavailable>"
    gdb_test "print globalf" " = <unavailable>"
    gdb_test "print globald" " = <unavailable>"

    gdb_test "print globalstruct.memberc" " = <unavailable>"
    gdb_test "print globalstruct.memberi" " = <unavailable>"
    gdb_test "print globalstruct.memberf" " = <unavailable>"
    gdb_test "print globalstruct.memberd" " = <unavailable>"

    gdb_test "print globalstruct" \
	    " = {memberc = <unavailable>, memberi = <unavailable>, memberf = <unavailable>, memberd = <unavailable>}"

    gdb_test "print globalp == &globalstruct" \
	    "value is not available" \
	    "can't compare using non collected global pointer"

    gdb_test "print globalarr\[1\]" " = <unavailable>"
    gdb_test "print globalarr\[2\]" " = <unavailable>"
    gdb_test "print globalarr\[3\]" " = <unavailable>"

    gdb_test "print struct_b" \
	" = {d = <unavailable>, ef = <unavailable>, struct_a = {a = <unavailable>, b = <unavailable>, array = {<unavailable>, <unavailable>, -1431655766, <unavailable> <repeats 97 times>, -1431655766, <unavailable> <repeats 9899 times>}, ptr = <unavailable>, bitfield = <unavailable>}, s = <unavailable>, static static_struct_a = {a = <unavailable>, b = <unavailable>, array = {<unavailable> <repeats 10000 times>}, ptr = <unavailable>, bitfield = <unavailable>}, string = <unavailable>}"

    gdb_test "print /x struct_b" \
	" = {d = <unavailable>, ef = <unavailable>, struct_a = {a = <unavailable>, b = <unavailable>, array = {<unavailable>, <unavailable>, 0xaaaaaaaa, <unavailable> <repeats 97 times>, 0xaaaaaaaa, <unavailable> <repeats 9899 times>}, ptr = <unavailable>, bitfield = <unavailable>}, s = <unavailable>, static static_struct_a = {a = <unavailable>, b = <unavailable>, array = {<unavailable> <repeats 10000 times>}, ptr = <unavailable>, bitfield = <unavailable>}, string = <unavailable>}"

    gdb_test "print /x struct_b.struct_a" \
	" = {a = <unavailable>, b = <unavailable>, array = {<unavailable>, <unavailable>, 0xaaaaaaaa, <unavailable> <repeats 97 times>, 0xaaaaaaaa, <unavailable> <repeats 9899 times>}, ptr = <unavailable>, bitfield = <unavailable>}"

    gdb_test "print /x struct_b.struct_a.array" \
	" = {<unavailable>, <unavailable>, 0xaaaaaaaa, <unavailable> <repeats 97 times>, 0xaaaaaaaa, <unavailable> <repeats 9899 times>}"

    gdb_test "print /x struct_b.struct_a.array\[0\]" " = <unavailable>"

    gdb_test "print /x struct_b.struct_a.array\[2\]" " = 0xaaaaaaaa"

    # Check the target doesn't overcollect.  GDB used to merge memory
    # ranges to collect if they were close enough (collecting the hole
    # as well), but does not do that anymore.  It's plausible that a
    # target may do this on its end, but as of this writing, no known
    # target does it.
    gdb_test "print {a, b, c}" \
	" = \\{1, <unavailable>, 3\\}" \
	"No overcollect of almost but not quite adjacent memory ranges"

    # Check <unavailable> isn't confused with 0 in array element repetitions

    gdb_test_no_output "set print repeat 1"

    gdb_test "print /x tarray" \
	" = \{\{a = 0x0, b = <unavailable>\} <repeats 2 times>, \{a = <unavailable>, b = <unavailable>\}, \{a = 0x0, b = 0x0\}, \{a = <unavailable>, b = 0x0\} <repeats 2 times>, \{a = <unavailable>, b = <unavailable>\} <repeats 2 times>\}" \
	"<unavailable> is not the same as 0 in array element repetitions"

    gdb_test_no_output "set print repeat 10"

    # Check that value repeat handles unavailable-ness.
    gdb_test "print *tarray@3" " = \\{\\{a = 0, b = <unavailable>\\}, \\{a = 0, b = <unavailable>\\}, \\{a = <unavailable>, b = <unavailable>\\}\\}"

    # Static fields

    gdb_test "print struct_b.static_struct_a" \
	" = {a = <unavailable>, b = <unavailable>, array = {<unavailable> <repeats 10000 times>}, ptr = <unavailable>, bitfield = <unavailable>}"

    # Bitfields

    gdb_test "print struct_b.struct_a.bitfield" " = <unavailable>"

    # References

    gdb_test "print g_int" " = <unavailable>"

    gdb_test "print g_ref" \
	"\\(int &\\) @$hex: <unavailable>" \
	"global reference shows address but not value"

    gdb_test "print *&g_ref" \
	"\\$\[0-9\]+ = <unavailable>$cr" \
	"referenced integer was not collected (taking address of reference)"

    gdb_test "print *g_structref_p" \
	" = {d = <unavailable>, ref = <unavailable>}"

    # Strings

    # Const string is always available, even when not collected.
    gdb_test "print g_const_string" \
	" = \"hello world\"$cr" \
	"non collected const string is still printable"

    gdb_test "print g_string_p" \
	" = $hex \"hello world\"" \
	"printing constant string through collected pointer"

    gdb_test "print g_string_unavail" \
	" = \{<unavailable> <repeats 12 times>\}" \
	"printing non collected string"

    # Incomplete strings print as an array.
    gdb_test "print g_string_partial" \
	"\\$\[0-9\]+ = \{<unavailable>, 101 'e', 108 'l', <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>\}" \
	"printing partially collected string"

    # It is important for this test that the last examined value is
    # <unavailable>, to exercise the case of the $__ convenience
    # variable being set to <unavailable> without error.
    set msg "examining partially collected object"
    gdb_test_multiple "x /10x &struct_b" "$msg" {
	-re "$hex <struct_b>:${ws}<unavailable>${ws}<unavailable>${ws}<unavailable>${ws}<unavailable>$cr$hex <struct_b\\+16>:${ws}<unavailable>${ws}<unavailable>${ws}0xaaaaaaaa${ws}<unavailable>$cr$hex <struct_b\\+32>:${ws}<unavailable>${ws}<unavailable>$cr$gdb_prompt $" {
	    pass "$msg"
	}
	-re "value is not available" {
	    fail "$msg"
	}
    }

    gdb_test "p \$__" " = <unavailable>" "last examined value was <unavailable>"

    # This tests that building the array does not require accessing
    # g_int's contents.
    gdb_test "print { 1, g_int, 3 }" \
	" = \\{1, <unavailable>, 3\\}" \
	"build array from unavailable value"

    # Note, depends on previous test.
    gdb_test "print \$\[1\]" \
	" = <unavailable>" \
	"subscript a non-memory rvalue array, accessing an unvailable element"

    # Access a field of a non-lazy value, making sure the
    # unavailable-ness is propagated.  History values are easy
    # non-lazy values, so use those.  The first test just sets up for
    # the second.
    gdb_test "print g_smallstruct" " = \\{member = <unavailable>\\}"
    gdb_test "print \$.member" " = <unavailable>"

    # Cast to baseclass, checking the unavailable-ness is propagated.
    gdb_test "print (small_struct) g_smallstruct_b" " = \\{member = <unavailable>\\}"

    # Same cast, but starting from a non-lazy, value.
    gdb_test "print g_smallstruct_b" " = \\{<small_struct> = \\{member = <unavailable>\\}, <No data fields>\\}"
    gdb_test "print (small_struct) \$" " = \\{member = <unavailable>\\}"

    gdb_test_no_output "set print object on"

    set old_pf_prefix_2 $pf_prefix
    set pf_prefix "$pf_prefix print object on:"

    # With print object on, printing a pointer may need to fetch the
    # pointed-to object, to check its run-time type.  Make sure that
    # fails gracefully and transparently when the pointer itself is
    # unavailable.
    gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"

    # no vtable pointer available
    gdb_test "print derived_unavail" \
	" = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"

    # vtable pointer available, but nothing else
    gdb_test "print derived_partial" \
	" = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"

    # whole object available
    gdb_test "print derived_whole" \
	" = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"

    set pf_prefix $old_pf_prefix_2

    gdb_test_no_output "set print object off"

    set pf_prefix "$pf_prefix print object off:"

    gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"

    # no vtable pointer available
    gdb_test "print derived_unavail" \
	" = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"

    # vtable pointer available, but nothing else
    gdb_test "print derived_partial" \
	" = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"

    # whole object available
    gdb_test "print derived_whole" \
	" = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"

    set pf_prefix $old_pf_prefix_2

    # An instance of a virtual class where we collected everything but
    # the vptr.
    gdb_test "print virtual_partial" \
	" = {_vptr.Virtual = <unavailable>, z = 0}"

    gdb_test "tfind none" \
	"#0  end .*" \
	"cease trace debugging"

    set pf_prefix $old_pf_prefix
}

proc gdb_trace_collection_test {} {
    gdb_collect_globals_test
    gdb_unavailable_registers_test

    gdb_collect_args_test
    gdb_collect_locals_test local_test_func "auto locals"
    gdb_collect_locals_test reglocal_test_func "register locals"
    gdb_collect_locals_test statlocal_test_func "static locals"
}

clean_restart $executable
runto_main

# We generously give ourselves one "pass" if we successfully
# detect that this test cannot be run on this target!
if { ![gdb_target_supports_trace] } then {
    pass "Current target does not support trace"
    return 1;
}

# Body of test encased in a proc so we can return prematurely.
gdb_trace_collection_test

# Finished!
gdb_test "tfind none" ".*" ""
