forked from Imagelibrary/binutils-gdb
This commit is the result of the following actions:
- Running gdb/copyright.py to update all of the copyright headers to
include 2024,
- Manually updating a few files the copyright.py script told me to
update, these files had copyright headers embedded within the
file,
- Regenerating gdbsupport/Makefile.in to refresh it's copyright
date,
- Using grep to find other files that still mentioned 2023. If
these files were updated last year from 2022 to 2023 then I've
updated them this year to 2024.
I'm sure I've probably missed some dates. Feel free to fix them up as
you spot them.
104 lines
3.2 KiB
Plaintext
104 lines
3.2 KiB
Plaintext
# This testcase is part of GDB, the GNU debugger.
|
|
|
|
# Copyright 2007-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/>. */
|
|
|
|
# watch-thread_num.exp Test thread <thread_num> parameter for
|
|
# watch commands.
|
|
#
|
|
|
|
# This test verifies that a watchpoint is detected in the proper thread
|
|
# so the test is only meaningful on a system with hardware watchpoints.
|
|
# More specifically, the implementation of this test uses access
|
|
# watchpoints, so skip it when those are not available.
|
|
require allow_hw_watchpoint_access_tests
|
|
|
|
standard_testfile .c
|
|
|
|
if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
return -1
|
|
}
|
|
|
|
clean_restart ${binfile}
|
|
|
|
if {![runto_main]} {
|
|
return
|
|
}
|
|
|
|
gdb_test "watch shared_var thread 0" "Invalid thread ID: 0" "watchpoint on invalid thread"
|
|
gdb_test "watch shared_var thread" "A syntax error in expression, near `thread'\." "invalid watch syntax"
|
|
|
|
set bpexitline [gdb_get_line_number "all threads started"]
|
|
gdb_breakpoint "$bpexitline"
|
|
gdb_continue_to_breakpoint "all threads started"
|
|
|
|
gdb_test "break loop" "Breakpoint \[0-9\].*" \
|
|
"Set breakpoint at loop"
|
|
|
|
gdb_test "continue" ".*Breakpoint .*loop.*" "stopped in loop"
|
|
|
|
gdb_test_multiple "thread" "thread command" {
|
|
-re ".*Current thread is (\[0-9\]*).*$gdb_prompt $" {
|
|
pass "thread command"
|
|
}
|
|
}
|
|
|
|
set thread_num "$expect_out(1,string)"
|
|
|
|
delete_breakpoints
|
|
|
|
# We use an access watchpoint rather than a write watchpoint, because
|
|
# GDB can drop the latter when multiple threads trigger events
|
|
# simultaneously, on targets with continuable watchpoints, such as
|
|
# x86. See PR breakpoints/10116.
|
|
|
|
gdb_test "awatch shared_var thread $thread_num" \
|
|
"Hardware access \\(read/write\\) watchpoint .*: shared_var.*" \
|
|
"watchpoint on shared variable"
|
|
|
|
gdb_test "info breakpoint \$bpnum" \
|
|
"stop only in thread $thread_num" \
|
|
"info breakpoint shows watchpoint is thread-specific"
|
|
|
|
# Uncomment to see additional information.
|
|
#gdb_test "set debug infrun 1"
|
|
|
|
for {set i 1} {$i <= 5} {incr i} {
|
|
set watchpoint "Watchpoint triggered iteration $i"
|
|
set check "Check thread that triggered iteration $i"
|
|
|
|
set test $watchpoint
|
|
set seen_watchpoint 0
|
|
gdb_test_multiple "continue" $test {
|
|
-re "Hardware access \\(read/write\\) watchpoint .*: shared_var" {
|
|
set seen_watchpoint 1
|
|
exp_continue
|
|
}
|
|
-re "$gdb_prompt " {
|
|
if { $seen_watchpoint } {
|
|
pass $test
|
|
} else {
|
|
fail $test
|
|
}
|
|
}
|
|
-re "\\\[infrun\\\] " {
|
|
# Avoid timeouts when debugging GDB.
|
|
exp_continue
|
|
}
|
|
}
|
|
gdb_test "thread" ".*Current thread is $thread_num .*" $check
|
|
}
|
|
|