# 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/>.

# Tests for permissions and observer mode.

# The permissions flags are only fully functional with stubs or targets
# that can run asynchronously.

set testfile permission
set srcfile start.c
set binfile ${objdir}/${subdir}/${testfile}

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

if [get_compiler_info] {
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

gdb_test "show may-write-registers" \
    "Permission to write into registers is on."

gdb_test "show may-write-memory" \
    "Permission to write into target memory is on."

gdb_test "show may-insert-breakpoints" \
    "Permission to insert breakpoints in the target is on."

gdb_test "show may-insert-tracepoints" \
    "Permission to insert tracepoints in the target is on."

gdb_test "show may-insert-fast-tracepoints" \
    "Permission to insert fast tracepoints in the target is on."

gdb_test "show may-interrupt" \
    "Permission to interrupt or signal the target is on."

gdb_test "set observer on" "Observer mode is now on." "enable observer mode"

gdb_test "show may-write-memory" \
    "Permission to write into target memory is off."

gdb_test "show may-write-registers" \
    "Permission to write into registers is off."

gdb_test "show may-insert-breakpoints" \
    "Permission to insert breakpoints in the target is off."

gdb_test "show may-insert-tracepoints" \
    "Permission to insert tracepoints in the target is off."

gdb_test "show may-insert-fast-tracepoints" \
    "Permission to insert fast tracepoints in the target is on."

gdb_test "show may-interrupt" \
    "Permission to interrupt or signal the target is off."

gdb_test "set observer off" "Observer mode is now off." "disable observer mode"

# Go back to all-stop mode.

gdb_test_no_output "set non-stop off"

gdb_load ${binfile}

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_test "print x = 45" "$decimal = 45" "set a global"

gdb_test "print x" "$decimal = 45"

gdb_test "set may-write-memory off"

gdb_test "print x = 92" "Writing to memory is not allowed.*" \
    "try to set a global"

gdb_test "print x" "$decimal = 45"

# FIXME Add tests for other flags when a testsuite-able target becomes
# available.
