# Copyright 2016-2019 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 . if [target_info exists gdb,nointerrupts] { verbose "Skipping mi-threads-interrupt.exp because of nointerrupts." continue } load_lib mi-support.exp set MIFLAGS "-i=mi" standard_testfile if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" } { return -1 } # This tests the resolution of PR 20039. # # With a multi-threaded inferior and with MI/all-stop, it was not possible # to interrupt it with ctrl-C after a continue. proc test_continue_interrupt { } { global binfile global async gdb_exit if {[mi_gdb_start]} { continue } # Load the binary in gdb... mi_gdb_load $binfile # ... and run it. # # Note this test relies on mi_runto deleting the breakpoint. # A step-over here would mask the bug. mi_runto "all_threads_created" # Consistency check. mi_check_thread_states {"stopped" "stopped" "stopped"} "check thread states" # Continue. mi_send_resuming_command "exec-continue" "continue" # Wait a bit to make sure all MI events are sent, before sending the # interruption request. sleep 1 # Send the interrupt request. if { $async } { mi_gdb_test "888-exec-interrupt" "888\\^done" "interrupt" } else { send_gdb "\003" } # Wait for the *stopped. mi_expect_interrupt "interrupt reported" } test_continue_interrupt