aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/libgnat/s-rident.ads62
-rw-r--r--gcc/ada/sem_prag.adb15
-rw-r--r--gcc/ada/snames.ads-tmpl1
-rw-r--r--gcc/ada/targparm.adb8
4 files changed, 82 insertions, 4 deletions
diff --git a/gcc/ada/libgnat/s-rident.ads b/gcc/ada/libgnat/s-rident.ads
index 73a0450..b7969fb 100644
--- a/gcc/ada/libgnat/s-rident.ads
+++ b/gcc/ada/libgnat/s-rident.ads
@@ -381,6 +381,7 @@ package System.Rident is
Restricted_Tasking,
Restricted,
Ravenscar,
+ Jorvik,
GNAT_Extended_Ravenscar,
GNAT_Ravenscar_EDF);
-- Names of recognized profiles. No_Profile is used to indicate that a
@@ -545,6 +546,67 @@ package System.Rident is
Max_Task_Entries => 0,
others => 0)),
+ Jorvik =>
+
+ -- Restrictions for Jorvik profile ..
+
+ -- Note: the table entries here only represent the
+ -- required restriction profile for Jorvik. The
+ -- full Jorvik profile also requires:
+
+ -- pragma Dispatching_Policy (FIFO_Within_Priorities);
+ -- pragma Locking_Policy (Ceiling_Locking);
+ -- pragma Detect_Blocking;
+
+ -- The differences between Ravenscar and Jorvik are
+ -- as follows:
+ -- 1) Ravenscar includes restriction Simple_Barriers;
+ -- Jorvik includes Pure_Barriers instead.
+ -- 2) The following 6 restrictions are included in
+ -- Ravenscar but not in Jorvik:
+ -- No_Implicit_Heap_Allocations
+ -- No_Relative_Delay
+ -- Max_Entry_Queue_Length => 1
+ -- Max_Protected_Entries => 1
+ -- No_Dependence => Ada.Calendar
+ -- No_Dependence => Ada.Synchronous_Barriers
+ --
+ -- The last of those 7 (i.e., No_Dep => Ada.Synch_Bars)
+ -- is not reflected here (see sem_prag.adb).
+
+ (Set =>
+ (No_Abort_Statements => True,
+ No_Asynchronous_Control => True,
+ No_Dynamic_Attachment => True,
+ No_Dynamic_Priorities => True,
+ No_Local_Protected_Objects => True,
+ No_Protected_Type_Allocators => True,
+ No_Requeue_Statements => True,
+ No_Task_Allocators => True,
+ No_Task_Attributes_Package => True,
+ No_Task_Hierarchy => True,
+ No_Terminate_Alternatives => True,
+ Max_Asynchronous_Select_Nesting => True,
+ Max_Select_Alternatives => True,
+ Max_Task_Entries => True,
+
+ -- plus these additional restrictions:
+
+ No_Local_Timing_Events => True,
+ No_Select_Statements => True,
+ No_Specific_Termination_Handlers => True,
+ No_Task_Termination => True,
+ Pure_Barriers => True,
+ others => False),
+
+ -- Value settings for Ravenscar (same as Restricted)
+
+ Value =>
+ (Max_Asynchronous_Select_Nesting => 0,
+ Max_Select_Alternatives => 0,
+ Max_Task_Entries => 0,
+ others => 0)),
+
GNAT_Extended_Ravenscar =>
-- Restrictions for GNAT_Extended_Ravenscar =
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 55325f8..269cbbb 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -4330,9 +4330,9 @@ package body Sem_Prag is
procedure Set_Ravenscar_Profile (Profile : Profile_Name; N : Node_Id);
-- Activate the set of configuration pragmas and restrictions that make
-- up the Profile. Profile must be either GNAT_Extended_Ravenscar,
- -- GNAT_Ravenscar_EDF, or Ravenscar. N is the corresponding pragma node,
- -- which is used for error messages on any constructs violating the
- -- profile.
+ -- GNAT_Ravenscar_EDF, Jorvik, or Ravenscar. N is the corresponding
+ -- pragma node, which is used for error messages on any constructs
+ -- violating the profile.
---------------------
-- Ada_2005_Pragma --
@@ -11162,7 +11162,7 @@ package body Sem_Prag is
-- Set required policies
-- pragma Task_Dispatching_Policy (FIFO_Within_Priorities)
- -- (For Ravenscar and GNAT_Extended_Ravenscar profiles)
+ -- (For Ravenscar, Jorvik, and GNAT_Extended_Ravenscar profiles)
-- pragma Task_Dispatching_Policy (EDF_Across_Priorities)
-- (For GNAT_Ravenscar_EDF profile)
-- pragma Locking_Policy (Ceiling_Locking)
@@ -11283,6 +11283,10 @@ package body Sem_Prag is
-- No_Dependence => Ada.Execution_Time.Group_Budget
-- No_Dependence => Ada.Execution_Time.Timers
+ -- ??? Eventually when AI12-0073 is implemented, we'll register a
+ -- No_Dependence restriction on Ada.Synchronous_Barriers
+ -- for Ravenscar but not for Jorvik.
+
if Ada_Version >= Ada_2005 then
Pref_Id := Make_Identifier (Loc, Name_Find ("ada"));
Sel_Id := Make_Identifier (Loc, Name_Find ("execution_time"));
@@ -21314,6 +21318,9 @@ package body Sem_Prag is
if Chars (Argx) = Name_Ravenscar then
Set_Ravenscar_Profile (Ravenscar, N);
+ elsif Chars (Argx) = Name_Jorvik then
+ Set_Ravenscar_Profile (Jorvik, N);
+
elsif Chars (Argx) = Name_Gnat_Extended_Ravenscar then
Set_Ravenscar_Profile (GNAT_Extended_Ravenscar, N);
diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl
index e5494ae..b88f861 100644
--- a/gcc/ada/snames.ads-tmpl
+++ b/gcc/ada/snames.ads-tmpl
@@ -782,6 +782,7 @@ package Snames is
Name_Info : constant Name_Id := N + $;
Name_Internal : constant Name_Id := N + $;
Name_Ivdep : constant Name_Id := N + $;
+ Name_Jorvik : constant Name_Id := N + $;
Name_Link_Name : constant Name_Id := N + $;
Name_Low_Order_First : constant Name_Id := N + $;
Name_Lowercase : constant Name_Id := N + $;
diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb
index c1ec8e7..9e15710 100644
--- a/gcc/ada/targparm.adb
+++ b/gcc/ada/targparm.adb
@@ -334,6 +334,14 @@ package body Targparm is
Opt.Locking_Policy := 'C';
goto Line_Loop_Continue;
+ -- Test for pragma Profile (Jorvik);
+
+ elsif Looking_At_Skip ("pragma Profile (Jorvik);") then
+ Set_Profile_Restrictions (Jorvik);
+ Opt.Task_Dispatching_Policy := 'F';
+ Opt.Locking_Policy := 'C';
+ goto Line_Loop_Continue;
+
-- Test for pragma Profile (GNAT_Extended_Ravenscar);
elsif Looking_At_Skip