aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/gdb.ada/tasks.exp82
1 files changed, 82 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.ada/tasks.exp b/gdb/testsuite/gdb.ada/tasks.exp
index 19aca7a..a73a191 100644
--- a/gdb/testsuite/gdb.ada/tasks.exp
+++ b/gdb/testsuite/gdb.ada/tasks.exp
@@ -14,6 +14,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib "ada.exp"
+load_lib "gdb-guile.exp"
+load_lib "gdb-python.exp"
require allow_ada_tests
@@ -39,10 +41,28 @@ gdb_test "info tasks" \
"\r\n"] \
"info tasks before inserting breakpoint"
+# Confirm that the "info threads" output lines up with the tasks list.
+gdb_test "info threads" \
+ [multi_line \
+ "\\*\\s+1\\s+\[^\r\n\]+\\s\"foo\"\\s\[^\r\n\]+" \
+ "\\s+2\\s+\[^\r\n\]+\\s\"task_list\\(1\\)\"\\s\[^\r\n\]+" \
+ "\\s+3\\s+\[^\r\n\]+\\s\"task_list\\(2\\)\"\\s\[^\r\n\]+" \
+ "\\s+4\\s+\[^\r\n\]+\\s\"task_list\\(3\\)\"\\s\[^\r\n\]+"]
+
# Check that multiple uses of the 'task' keyword will give an error.
gdb_test "break break_me task 1 task 3" "You can specify only one task\\."
gdb_test "watch j task 1 task 3" "You can specify only one task\\."
+# Check that attempting to combine 'task' and 'thread' gives an error.
+gdb_test "break break_me task 1 thread 1" \
+ "You can specify only one of thread or task\\."
+gdb_test "break break_me thread 1 task 1" \
+ "You can specify only one of thread or task\\."
+gdb_test "watch j task 1 thread 1" \
+ "You can specify only one of thread or task\\."
+gdb_test "watch j thread 1 task 1" \
+ "You can specify only one of thread or task\\."
+
# Insert a breakpoint that should stop only if task 1 stops. Since
# task 1 never calls break_me, this shouldn't actually ever trigger.
# The fact that this breakpoint is created _before_ the next one
@@ -68,6 +88,68 @@ set bp_number [get_integer_valueof "\$bpnum" "INVALID" \
gdb_test "info breakpoints" "foo.adb:${decimal}\r\n\\s+stop only in task 3" \
"check info breakpoints for task 3 breakpoint"
+# Test the Python API for the breakpoint task attribute.
+if {[allow_python_tests]} {
+ gdb_test_no_output "python bp = gdb.breakpoints()\[$bp_number - 1\]" \
+ "get gdb.Breakpoint from list"
+ gdb_test "python print(bp.task)" "3"
+ gdb_test "python print(bp.thread)" "None"
+ gdb_test "python bp.thread = 1" \
+ [multi_line \
+ "RuntimeError: Cannot set both task and thread attributes\\." \
+ "Error while executing Python code\\."] \
+ "try setting the thread, but expect an error"
+ gdb_test_no_output "python bp.task = None"
+ gdb_test_no_output "python bp.thread = 1"
+ gdb_test "python bp.task = 3" \
+ [multi_line \
+ "RuntimeError: Cannot set both task and thread attributes\\." \
+ "Error while executing Python code\\."] \
+ "try setting the task, but expect an error"
+
+ # Reset the breakpoint to the state required for the rest of this
+ # test.
+ gdb_test_no_output "python bp.thread = None"
+ gdb_test_no_output "python bp.task = 3"
+}
+
+# Test the Guile API for the breakpoint task attribute.
+if {[allow_guile_tests]} {
+ gdb_install_guile_utils
+ gdb_install_guile_module
+
+ gdb_scm_test_silent_cmd "guile (define blist (breakpoints))" \
+ "get breakpoint list"
+ gdb_scm_test_silent_cmd "guile (define bp (list-ref blist (- $bp_number 1)))" \
+ "get <gdb:breakpoint> from list"
+ gdb_test "guile (print (breakpoint-task bp))" "= 3"
+ gdb_test "guile (print (breakpoint-thread bp))" "= #f"
+ gdb_test "guile (set-breakpoint-thread! bp 1)" \
+ [multi_line \
+ "ERROR: In procedure set-breakpoint-thread!:" \
+ "In procedure gdbscm_set_breakpoint_thread_x: cannot set both task and thread attributes" \
+ "Error while executing Scheme code."] \
+ "attempt to set thread, but expect an error"
+
+ gdb_scm_test_silent_cmd "guile (set-breakpoint-task! bp #f)" \
+ "clear breakpoint task attribute"
+ gdb_scm_test_silent_cmd "guile (set-breakpoint-thread! bp 1)" \
+ "set breakpoint thread now task is unset"
+ gdb_test "guile (set-breakpoint-task! bp 1)" \
+ [multi_line \
+ "ERROR: In procedure set-breakpoint-task!:" \
+ "In procedure gdbscm_set_breakpoint_task_x: cannot set both task and thread attributes" \
+ "Error while executing Scheme code."] \
+ "attempt to set task, but expect an error"
+
+ # Reset the breakpoint to the state required for the rest of this
+ # test.
+ gdb_scm_test_silent_cmd "guile (set-breakpoint-thread! bp #f)" \
+ "clear breakpoint thread attribute"
+ gdb_scm_test_silent_cmd "guile (set-breakpoint-task! bp 3)" \
+ "restore breakpoint task attribute"
+}
+
# Continue to that breakpoint. Task 2 should hit it first, and GDB
# is expected to ignore that hit and resume the execution. Only then
# task 3 will hit our breakpoint, and GDB is expected to stop at that