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

load_lib mi-support.exp
set MIFLAGS "-i=mi"

# This test is Linux-only.
if ![istarget *-*-linux*] then {
    unsupported "mi-info-os.exp"
    return -1
}

# Support for XML-output is needed to run this test.
if [gdb_skip_xml_test] then {
    unsupported "mi-info-os.exp"
    return -1
}

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile basics.c

if [build_executable "Failed to build $testfile" $testfile $srcfile \
	debug] {
    return -1;
}
if {[mi_gdb_load $binfile] < 0} {
    return -1
}
# When testing a cross configuration, we need to be sure to first
# connect to the target.  If we didn't do that, GDB would try running
# the command against the default run target.  The usual way to do
# that and cover all targets is to run to main, with mi_runto_main.
# However, with native configurations, -info-os should work before
# running any program, so we want to avoid "run".  Using
# mi_gdb_target_load directly instead achieves this.
if {[mi_gdb_target_load] < 0} {
    return -1
}

# Try the argument-less form that lists all the types in a table.

mi_gdb_test "-info-os" ".*\\^done,OSDataTable=.*" "-info-os"
