Restricted_Tasking,
Restricted,
Ravenscar,
+ Jorvik,
GNAT_Extended_Ravenscar,
GNAT_Ravenscar_EDF);
-- Names of recognized profiles. No_Profile is used to indicate that a
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 =
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 --
-- 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)
-- 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"));
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);