# Copyright 2008-2024 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 ioctl TCSETSW record for PowerPC.
#

standard_testfile .c

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

if {![runto_main]} {
    untested "could not run to main"
    continue
}

# Recording of ioctls calls requires record full
gdb_test_no_output "record full"

set stop [gdb_get_line_number "TCSETSW call"]
gdb_test "break $stop" ".*Breakpoint .*" "stop at TCSETSW"
gdb_test "continue"  ".*Breakpoint .*" "at TCSETSW call"

set test "handle TCSETSW"
gdb_test_multiple "next"  $test {
    -re "Process record and replay target doesn't support ioctl request 0x.*$gdb_prompt $" {
	fail $test
    }
    -re ".*result = 0.*$gdb_prompt $" {
	pass $test
    }
}
