diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.ada/tasks.exp | 82 |
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 |