aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.ada/tasks
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2009-03-31 16:48:49 +0000
committerJoel Brobecker <brobecker@gnat.com>2009-03-31 16:48:49 +0000
commit02d9a9cebf96c87e18212e3419976e0195c39507 (patch)
tree87b5e442d91918dfcab0fef73be914751c9d0a81 /gdb/testsuite/gdb.ada/tasks
parent4a306c9a890a18d28bd88e18937a1061223201d0 (diff)
downloadbinutils-02d9a9cebf96c87e18212e3419976e0195c39507.zip
binutils-02d9a9cebf96c87e18212e3419976e0195c39507.tar.gz
binutils-02d9a9cebf96c87e18212e3419976e0195c39507.tar.bz2
* gdb.ada/tasks: New testcase.
Diffstat (limited to 'gdb/testsuite/gdb.ada/tasks')
-rw-r--r--gdb/testsuite/gdb.ada/tasks/foo.adb68
1 files changed, 68 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.ada/tasks/foo.adb b/gdb/testsuite/gdb.ada/tasks/foo.adb
new file mode 100644
index 0000000..edf66be
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/tasks/foo.adb
@@ -0,0 +1,68 @@
+-- Copyright 2009 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/>.
+
+procedure Foo is
+
+ task type Caller is
+ entry Initialize;
+ entry Call_Break_Me;
+ entry Finalize;
+ end Caller;
+ type Caller_Ptr is access Caller;
+
+ procedure Break_Me is
+ begin
+ null;
+ end Break_Me;
+
+ task body Caller is
+ begin
+ accept Initialize do
+ null;
+ end Initialize;
+ accept Call_Break_Me do
+ Break_Me;
+ end Call_Break_Me;
+ accept Finalize do
+ null;
+ end Finalize;
+ end Caller;
+
+ Task_List : array (1 .. 3) of Caller_Ptr;
+
+begin
+
+ -- Start all our tasks, and call the "Initialize" entry to make
+ -- sure all of them have now been started. We call that entry
+ -- immediately after having created the task in order to make sure
+ -- that we wait for that task to be created before we try to create
+ -- another one. That way, we know that the order in our Task_List
+ -- corresponds to the order in the GNAT runtime.
+ for J in Task_List'Range loop
+ Task_List (J) := new Caller;
+ Task_List (J).Initialize;
+ end loop;
+
+ -- Next, call their Call_Break_Me entry of each task, using the same
+ -- order as the order used to create them.
+ for J in Task_List'Range loop -- STOP_HERE
+ Task_List (J).Call_Break_Me;
+ end loop;
+
+ -- And finally, let all the tasks die...
+ for J in Task_List'Range loop
+ Task_List (J).Finalize;
+ end loop;
+end Foo;