summaryrefslogtreecommitdiff
path: root/gcc/ada/bindgen.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-30 14:56:45 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-30 14:56:45 +0000
commit3157c4f3e0a036edae0f2e31502648119e109d82 (patch)
treeb835d16538f8d08c37359d2bcd6b1863c3b2195e /gcc/ada/bindgen.adb
parent17554eb5e0bb8bae5f016336a79d6d0f9db0dae1 (diff)
downloadgcc-3157c4f3e0a036edae0f2e31502648119e109d82.tar.gz
2011-08-30 Jose Ruiz <ruiz@adacore.com>
* s-taskin.ads (Common_ATCB): Add field domain which contains the dispatching domain to which the task belongs. * s-taskin.adb (Initialize): Create the default system dispatching domain and make the environment task part of it. * s-mudido.ads: Add this new spec for standard Ada 2012 package Ada.Multiprocessors.Dispatching_Domains. * s-mudido.adb: Add this new body for targets not supporting dispatching domains. * s-mudido-affinity.adb: Add this new body for targets supporting dispatching domains setting the affinity to a CPU set. * bindgen.adb (Dispatching_Domain_Used, Check_Dispatching_Domains_Used, Gen_Adainit): When package System.Multiprocessors.Dispatching_Domains is used we call the procedure to signal that when we are about to call the main subprogram no new dispatching domain can be created. (Check_File_In_Partition): Factor out the common functionality used by Check_System_Restrictions_Used and Check_Dispatching_Domains_Used. * s-tassta.adb (Create_Task): Tasks inherit the dispatching domain of their activators. * s-taprop.ads (Set_Task_Affinity): Add this new procedure to set task affinities. * s-taprop-dummy.adb, s-taprop-hpux-dce.adb, s-taprop-irix.adb, s-taprop-posix.adb, s-taprop-tru64.adb, s-taprop-vms.adb (Set_Task_Affinity): Dummy null body for these targets not supporting task affinities. s-taprop-linux.adb, s-taprop-mingw.adb, s-taprop-solaris.adb, s-taprop-vxworks.adb (Create_Task, Enter_Task, Initialize): Handle dispatching domains and set the affinity of the environment task. (Set_Task_Affinity): Procedure that uses the underlying CPU set functionality to handle dispatching domains, pragma CPU and Task_Info. s-winext.ads (SetThreadAffinityMask): Import this function needed to set CPU masks. * s-osinte-solaris.ads (psetit_t, pset_create, pset_assign, pset_bind): Import the functionality to handle CPU set affinities. * affinity.c: New file. * s-osinte-vxworks.ads, s-vxwext.ads, s-vxwext-kernel.ads, s-vxwext-rtp.ads (taskMaskAffinitySet): Add this new spec for setting affinity masks. * s-vxwext.adb, s-vxwext-kernel.adb, s-vxwext-rtp.adb (taskMaskAffinitySet): Body returning an error indicating that task affinities are not supported. Makefile.rtl: Indicate that s-mudido is part of libgnarl. * gcc-interface/Makefile.in (LIBGNAT_TARGET_PAIRS for VxWorks SMP, Solaris, Windows, and {x86,PowerPC, ia64,x86_64} Linux): Use the s-mudido-affinity.adb body which supports task affinities. 2011-08-30 Thomas quinot <quinot@adacore.com> * sem_ch13.adb: Minor reformatting. 2011-08-30 Vincent Celier <celier@adacore.com> * vms_conv.adb (Process_Argument): When the qualifier /UNCHECKED_SHARED_LIB_IMPORTS is for GNAT COMPILE, do not put the corresponding switch --unchecked-shared-lib-imports after -cargs, as it is for gnatmake, not for the compiler. 2011-08-30 Ed Schonberg <schonberg@adacore.com> * sem_ch4.adb (Analyze_Quantified_Expression): Analyze iterator specification and condition only in Semantics_Only mode. Otherwise the analysis is done after expression has been rewritten as loop. * sem_ch5.adb (Analyze_Iterator_Specification): Always generate a temporary for the iterator name (the domain of iteration) because it may need finalization actions and these must be generated outside of the loop. * sem_res.adb (Resolve_Quantified_Expression): Resolve only in Semantic_Only mode. * exp_ch4.adb (Expand_Quantified_Expression): Analyze and resolve once rewritten as loop. * exp_ch5.adb (Expand_Iterator_Loop): Code clean-up, now that the iterator is always an expression. 2011-08-30 Robert Dewar <dewar@adacore.com> * par-ch4.adb (P_Unparen_Cond_Case_Quant_Expression): New function (P_Expression_If_OK): New spec checks parens (P_Expression_Or_Range_Attribute_If_OK): New spec checks parens * par.adb (P_Expression_If_OK): New spec checks parens (P_Expression_Or_Range_Attribute_If_OK): New spec checks parens git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178321 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/bindgen.adb')
-rw-r--r--gcc/ada/bindgen.adb62
1 files changed, 57 insertions, 5 deletions
diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb
index 2a161fad534..618e9cec18c 100644
--- a/gcc/ada/bindgen.adb
+++ b/gcc/ada/bindgen.adb
@@ -71,6 +71,13 @@ package body Bindgen is
-- to do this unconditionally, since it drags in the System.Restrictions
-- unit unconditionally, which is unpleasand, especially for ZFP etc.)
+ Dispatching_Domains_Used : Boolean;
+ -- Flag indicating whether multiprocessor dispatching domains are used in
+ -- the closure of the partition. This is set by
+ -- Check_Dispatching_Domains_Used, and is used to call the routine to
+ -- disallow the creation of new dispatching domains just before calling
+ -- the main procedure from the environment task.
+
Lib_Final_Built : Boolean := False;
-- Flag indicating whether the finalize_library rountine has been built
@@ -233,10 +240,19 @@ package body Bindgen is
-- Local Subprograms --
-----------------------
+ procedure Check_File_In_Partition (File_Name : String; Flag : out Boolean);
+ -- If the file indicated by File_Name is in the partition the Flag is set
+ -- to True, False otherwise.
+
procedure Check_System_Restrictions_Used;
-- Sets flag System_Restrictions_Used (Set to True if and only if the unit
-- System.Restrictions is present in the partition, otherwise False).
+ procedure Check_Dispatching_Domains_Used;
+ -- Sets flag Dispatching_Domains_Used to True when using the unit
+ -- System.Multiprocessors.Dispatching_Domains is present in the partition,
+ -- otherwise set to False.
+
procedure Gen_Adainit;
-- Generates the Adainit procedure
@@ -372,19 +388,38 @@ package body Bindgen is
-- contents of statement buffer up to Last, and reset Last to 0
------------------------------------
- -- Check_System_Restrictions_Used --
+ -- Check_Dispatching_Domains_Used --
------------------------------------
- procedure Check_System_Restrictions_Used is
+ procedure Check_Dispatching_Domains_Used is
+ begin
+ Check_File_In_Partition ("s-mudido.ads", Dispatching_Domains_Used);
+ end Check_Dispatching_Domains_Used;
+
+ -----------------------------
+ -- Check_File_In_Partition --
+ -----------------------------
+
+ procedure Check_File_In_Partition
+ (File_Name : String; Flag : out Boolean) is
begin
for J in Units.First .. Units.Last loop
- if Get_Name_String (Units.Table (J).Sfile) = "s-restri.ads" then
- System_Restrictions_Used := True;
+ if Get_Name_String (Units.Table (J).Sfile) = File_Name then
+ Flag := True;
return;
end if;
end loop;
- System_Restrictions_Used := False;
+ Flag := False;
+ end Check_File_In_Partition;
+
+ ------------------------------------
+ -- Check_System_Restrictions_Used --
+ ------------------------------------
+
+ procedure Check_System_Restrictions_Used is
+ begin
+ Check_File_In_Partition ("s-restri.ads", System_Restrictions_Used);
end Check_System_Restrictions_Used;
------------------
@@ -664,6 +699,16 @@ package body Bindgen is
& Get_Main_Unit_Name (Name_Buffer (1 .. Name_Len)) & """);");
end if;
+ -- When dispatching domains are used then we need to signal it
+ -- before calling the main procedure.
+
+ if Dispatching_Domains_Used then
+ WBI (" procedure Freeze_Dispatching_Domains;");
+ WBI (" pragma Import");
+ WBI (" (Ada, Freeze_Dispatching_Domains, " &
+ """__gnat_freeze_dispatching_domains"");");
+ end if;
+
WBI (" begin");
WBI (" if Is_Elaborated then");
WBI (" return;");
@@ -900,6 +945,12 @@ package body Bindgen is
Gen_Elab_Calls;
+ -- From this point, no new dispatching domain can be created.
+
+ if Dispatching_Domains_Used then
+ WBI (" Freeze_Dispatching_Domains;");
+ end if;
+
-- Case of main program is CIL function or procedure
if VM_Target = CLI_Target
@@ -2037,6 +2088,7 @@ package body Bindgen is
-- Generate output file in appropriate language
Check_System_Restrictions_Used;
+ Check_Dispatching_Domains_Used;
Gen_Output_File_Ada (Filename);
end Gen_Output_File;