# Copyright 2009, 2010, 2011 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 $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}

file mkdir ${objdir}/${subdir}/${testdir}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

set bp_location [gdb_get_line_number "STOP_HERE" ${testdir}/foo.adb]
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\\)"} \
               "\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 .*"

# 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.
gdb_test "continue" \
         ".*Breakpoint.*, 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\\)"} \
               "\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"

