Update year range in copyright notice of all files owned by the GDB project.
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.ada / tasks.exp
index 612d88733f45c394a0f6f12d85012732b6590a29..40f1411256bbf5c8cedcaafc65a9ed4c6dd109b3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2009, 2010 Free Software Foundation, Inc.
+# Copyright 2009-2015 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
 # 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 $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
-set testdir "tasks"
-set testfile "${testdir}/foo"
-set srcfile ${srcdir}/${subdir}/${testfile}.adb
-set binfile ${objdir}/${subdir}/${testfile}
+standard_ada_testfile foo
 
-file mkdir ${objdir}/${subdir}/${testdir}
 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
   return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${testfile}
 
 set bp_location [gdb_get_line_number "STOP_HERE" ${testdir}/foo.adb]
 runto "foo.adb:$bp_location"
@@ -40,40 +29,57 @@ runto "foo.adb:$bp_location"
 # Make sure that all tasks appear in the "info tasks" listing, and
 # that the active task is the environment task.
 gdb_test "info tasks" \
-         [join {"  ID       TID P-ID Pri State                  Name" \
-                "\\*  1 .* main_task" \
-                "   2 .* task_list\\(1\\)" \
-                "   3 .* task_list\\(2\\)" \
-                "   4 .* task_list\\(3\\)"} \
+         [join {" +ID +TID P-ID Pri State +Name" \
+                "\\* +1 .* main_task" \
+                " +2 .* task_list\\(1\\)" \
+                " +3 .* task_list\\(2\\)" \
+                " +4 .* task_list\\(3\\)"} \
                "\r\n"] \
          "info tasks before inserting breakpoint"
 
-# Now, insert a breakpoint that should stop only if task 3 stops.
-gdb_test "break break_me task 3" "Breakpoint .* at .*"
+# 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
+# matters.  GDB used to have a bug where it would report the first
+# breakpoint in the list that matched the triggered-breakpoint's
+# address, no matter which task it was specific to.
+gdb_test "break break_me task 1" "Breakpoint .* at .*"
+
+# Now, insert a breakpoint that should stop only if task 3 stops, and
+# extract its number.
+set bp_number -1
+set test "break break_me task 3"
+gdb_test_multiple $test $test {
+    -re "Breakpoint (.*) at .*$gdb_prompt $" {
+       set bp_number $expect_out(1,string)
+       pass $test
+    }
+}
+
+if {$bp_number < 0} {
+    return
+}
 
 # 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
-# point.
+# point.  Also make sure that GDB reports the correct breakpoint number.
 gdb_test "continue" \
-         ".*Breakpoint.*, foo.break_me \\(\\).*" \
+         ".*Breakpoint $bp_number, foo.break_me \\(\\).*" \
          "continue to breakpoint"
 
 # Check that it is indeed task 3 that hit the breakpoint by checking
 # which is the active task.
 gdb_test "info tasks" \
-         [join {"  ID       TID P-ID Pri State                  Name" \
-                "   1 .* main_task" \
-                "   2 .* task_list\\(1\\)" \
-                "\\*  3 .* task_list\\(2\\)" \
-                "   4 .* task_list\\(3\\)"} \
+         [join {" +ID +TID P-ID Pri State +Name" \
+                " +1 .* main_task" \
+                " +2 .* task_list\\(1\\)" \
+                "\\* +3 .* task_list\\(2\\)" \
+                " +4 .* task_list\\(3\\)"} \
                "\r\n"] \
          "info tasks after hitting breakpoint"
 
 # Now, resume the execution and make sure that GDB does not stop when
 # task 4 hits the breakpoint. Continuing thus results in our program
 # running to completion.
-gdb_test "continue" \
-         ".*Program exited normally\..*" \
-         "continue until end of program"
-
+gdb_continue_to_end "" continue 1
This page took 0.026588 seconds and 4 git commands to generate.