# Copyright 2020-2021 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 that the dcache can be flushed.

standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile}] } {
    return -1
}

if ![runto func] {
    return -1
}

gdb_test "up" ".* main .*"
gdb_test "p var1" " = 4"
gdb_test "p var2" " = 3"

# By reading var1 and var2 we should have at least one line in the
# dcache.
gdb_test "info dcache" \
    [multi_line \
	 "Dcache $decimal lines of $decimal bytes each." \
	 "Contains data for (process $decimal|Thread \[^\r\n\]*)" \
	 "Line 0: address $hex \[$decimal hits\].*" \
	 "Cache state: $decimal active lines, $decimal hits" ] \
    "check dcache before flushing"

# Flush the dcache.
gdb_test "maint flush dcache" "The dcache was flushed\."

# Check the dcache is now empty.
gdb_test "info dcache" \
    [multi_line  "Dcache $decimal lines of $decimal bytes each." \
	 "No data cache available." ] \
    "check dcache after flushing"

# Read the stack variables again, refilling the dcache.
with_test_prefix "refilling" {
    gdb_test "p var1" " = 4"
    gdb_test "p var2" " = 3"
}

# And check we have some content back in the dcache.
gdb_test "info dcache" \
    [multi_line \
	 "Dcache $decimal lines of $decimal bytes each." \
	 "Contains data for (process $decimal|Thread \[^\r\n\]*)" \
	 "Line 0: address $hex \[$decimal hits\].*" \
	 "Cache state: $decimal active lines, $decimal hits" ] \
    "check dcache before refilling"
