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

# Verify that debugging with "maintenance target-async off" works somewhat.  At
# least running to main and to the end of the program.

standard_testfile

save_vars { GDBFLAGS } {
    # Enable target-async off this way, because with board
    # native-extended-gdbserver, the remote target is already open when
    # returning from prepare_for_testing, and that would be too late to toggle
    # it.
    append GDBFLAGS { -ex "maintenance set target-async off" }

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

# Make sure our command-line flag worked.
gdb_test "maintenance show target-async" "Controlling the inferior in asynchronous mode is off\\."

if { ![runto_main] } {
    return
}

gdb_continue_to_end
