binutils-gdb/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00

135 lines
4.5 KiB
Plaintext

# Copyright 2008-2017 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/>.
if { ![support_displaced_stepping] } {
unsupported "displaced stepping"
return -1
}
load_lib mi-support.exp
set MIFLAGS "-i=mi"
gdb_exit
if {[mi_gdb_start]} {
continue
}
#
# Start here
#
standard_testfile nsmoribund.c
set options [list debug]
if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
return -1
}
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {
continue
}
# Keep this in sync with THREADS in the $srcfile.
set nthreads 10
# Set a breakpoint and let all threads hit it (except the main
# thread).
set bkpt_line [gdb_get_line_number "set breakpoint here"]
mi_create_breakpoint "$srcfile:$bkpt_line" \
"breakpoint at thread_function" \
-number 2 -function thread_function
mi_send_resuming_command "exec-continue --all" "resume all"
for {set i 0} {$i < $nthreads} {incr i} {
mi_expect_stop "breakpoint-hit" "thread_function" "\[^\n\]*" "$srcfile" \
"\[0-9\]*" {"" "disp=\"keep\""} "stop $i"
}
# All but the main thread should have hit it.
mi_check_thread_states \
{"running" "stopped" "stopped" "stopped" "stopped" "stopped" "stopped" "stopped" "stopped" "stopped" "stopped"} \
"thread state: all stopped except the main thread"
# Select a stopped thread to make sure we're able to delete
# breakpoints
mi_gdb_test "-thread-select 5" "\\^done.*" "select thread 5"
# Now that we know about all the threads, we can get rid of
# breakpoint.
mi_delete_breakpoints
# Recreate the same breakpoint, but this time, specific to thread 5.
mi_gdb_test "234-break-insert -p 5 $srcfile:$bkpt_line" \
"234\\^done,bkpt=\{number=\"3\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\".*\",func=\"thread_function\",file=\".*\",fullname=\".*\",line=\".*\",thread-groups=\\\[\".*\"\\\],thread=\"5\",thread=\"5\",times=\"0\",original-location=\".*\"\}" \
"thread specific breakpoint at thread_function"
# Resume all threads. Only thread 5 should report a stop.
set running_re ""
for {set i $nthreads} {$i > 1} {incr i -1} {
set running_re "$running_re\\*running,thread-id=\"$decimal\"\r\n"
}
# Don't append \r\n after last line.
set running_re "$running_re\\*running,thread-id=\"$decimal\""
mi_gdb_test "-exec-continue --all" "\[^\n\]*\r\n$running_re" \
"resume all, thread specific breakpoint"
mi_expect_stop "breakpoint-hit" "thread_function" "\[^\n\]*" "$srcfile" \
"\[0-9\]*" {"" "disp=\"keep\""} "hit thread specific breakpoint"
# All threads except both thread 5 (and the main thread) should now be
# repeatedly hitting the thread specific breakpoint and stepping over
# it transparently. These are internal events, so the frontend should
# see those threads as running.
mi_check_thread_states \
{"running" "running" "running" "running" "stopped" "running" "running" "running" "running"} \
"thread state: all running except the breakpoint thread"
# Get rid of the breakpoint while the other threads are stepping over
# it, and tell all threads to exit. The program should exit
# gracefully shortly. Send all commands in a row, since if something
# goes wrong with moribund locations support or displaced stepping (or
# a target bug if it can step over breakpoints itself), a spurious
# SIGTRAP/SIGSEGV can come at any time after deleting the breakpoint.
# Note that this causes multiple prompts to appear before the output
# we are interested in, so we can't use mi_gdb_test or
# gdb_test_multiple (or an MI equivalent)
mi_gdb_test "102-break-delete" "102\\^done.*"
mi_gdb_test "print done = 1" { = 1"}
mi_gdb_test "103-exec-continue --all" "\[^\n\]*\r\n$running_re"
gdb_expect {
-re "\\*stopped,reason=\"exited-normally\"" {
pass "resume all, program exited normally"
}
timeout {
fail "resume all, waiting for program exit (timeout)"
}
}
mi_gdb_exit