[multiple changes]

2009-06-24  Vincent Celier  <celier@adacore.com>

	* prj-nmsc.adb (Check): A project declared abstract is legal if no
	attribute Source_Dirs, Source_Files, Source_List_File or Languages is
	declared.

2009-06-24  Robert Dewar  <dewar@adacore.com>

	* clean.adb, gnatcmd.adb, make.adb, mlib-prj.adb,
	prj-env.adb: Minor reformatting

2009-06-24  Ed Falis  <falis@adacore.com>

	* s-taprop-vxworks.adb, s-osinte-vxworks.ads, s-vxwext.ads,
	s-vxwext-kernel.adb, s-vxwext-kernel.ads, s-vxwext-rtp.adb,
	s-tasinf-vxworks.ads, gcc-interface/Makefile.in: Add processor affinity
	support for VxWorks SMP.

	* gcc-interface/Make-lang.in: Update dependencies

From-SVN: r148902
This commit is contained in:
Arnaud Charlet 2009-06-24 11:41:39 +02:00
parent 5a66a7661d
commit 95cd3246e6
16 changed files with 428 additions and 204 deletions

View File

@ -1,3 +1,23 @@
2009-06-24 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Check): A project declared abstract is legal if no
attribute Source_Dirs, Source_Files, Source_List_File or Languages is
declared.
2009-06-24 Robert Dewar <dewar@adacore.com>
* clean.adb, gnatcmd.adb, make.adb, mlib-prj.adb,
prj-env.adb: Minor reformatting
2009-06-24 Ed Falis <falis@adacore.com>
* s-taprop-vxworks.adb, s-osinte-vxworks.ads, s-vxwext.ads,
s-vxwext-kernel.adb, s-vxwext-kernel.ads, s-vxwext-rtp.adb,
s-tasinf-vxworks.ads, gcc-interface/Makefile.in: Add processor affinity
support for VxWorks SMP.
* gcc-interface/Make-lang.in: Update dependencies
2009-06-24 Emmanuel Briot <briot@adacore.com>
* gnatcmd.adb, make.adb, mlib-prj.adb, prj.adb, prj.ads, clean.adb,

View File

@ -577,10 +577,10 @@ package body Clean is
while Unit /= No_Unit_Index loop
if Unit.File_Names (Impl) /= null
and then Ultimate_Extending_Project_Of
(Unit.File_Names (Impl).Project) = Project
(Unit.File_Names (Impl).Project) = Project
and then
Get_Name_String (Unit.File_Names (Impl).File)
= Name (1 .. Last)
Get_Name_String (Unit.File_Names (Impl).File) =
Name (1 .. Last)
then
Delete_File := True;
exit;
@ -588,11 +588,10 @@ package body Clean is
if Unit.File_Names (Spec) /= null
and then Ultimate_Extending_Project_Of
(Unit.File_Names (Spec).Project) = Project
(Unit.File_Names (Spec).Project) = Project
and then
Get_Name_String
(Unit.File_Names (Spec).File) =
Name (1 .. Last)
(Unit.File_Names (Spec).File) = Name (1 .. Last)
then
Delete_File := True;
exit;
@ -742,11 +741,11 @@ package body Clean is
while Unit /= No_Unit_Index loop
if Unit.File_Names (Impl) /= null
and then Unit.File_Names (Impl).Project /=
No_Project
No_Project
then
if Ultimate_Extending_Project_Of
(Unit.File_Names (Impl).Project) =
Project
(Unit.File_Names (Impl).Project) =
Project
then
Get_Name_String
(Unit.File_Names (Impl).File);
@ -754,7 +753,7 @@ package body Clean is
File_Extension
(Name (1 .. Name_Len))'Length;
if Name_Buffer (1 .. Name_Len) =
Name (1 .. Last - 4)
Name (1 .. Last - 4)
then
Delete_File := True;
exit;
@ -763,25 +762,26 @@ package body Clean is
elsif Unit.File_Names (Spec) /= null
and then Ultimate_Extending_Project_Of
(Unit.File_Names (Spec).Project) =
Project
(Unit.File_Names (Spec).Project) =
Project
then
Get_Name_String
(Unit.File_Names (Spec).File);
Name_Len := Name_Len -
File_Extension
(Name (1 .. Name_Len))'Length;
Name_Len :=
Name_Len -
File_Extension
(Name (1 .. Name_Len))'Length;
if Name_Buffer (1 .. Name_Len) =
Name (1 .. Last - 4)
Name (1 .. Last - 4)
then
Delete_File := True;
exit;
end if;
end if;
Unit := Units_Htable.Get_Next
(Project_Tree.Units_HT);
Unit :=
Units_Htable.Get_Next (Project_Tree.Units_HT);
end loop;
end;
end if;

View File

@ -3115,24 +3115,25 @@ ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads \
ada/sdefault.ads ada/sem.ads ada/sem_aggr.ads ada/sem_attr.ads \
ada/sem_attr.adb ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch13.ads \
ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads \
ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads \
ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads \
ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
ada/snames.ads ada/snames.adb ada/sprint.ads ada/stand.ads \
ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads \
ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
ada/ttypef.ads ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads \
ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
ada/urealp.adb ada/validsw.ads ada/widechar.ads
ada/sem_attr.adb ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch10.ads \
ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
ada/sinput.adb ada/snames.ads ada/snames.adb ada/sprint.ads \
ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
ada/s-carun8.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \
ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads ada/types.ads \
ada/types.adb ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
ada/widechar.ads
ada/sem_aux.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \

View File

@ -416,6 +416,7 @@ ifeq ($(strip $(filter-out m68k% wrs vx%,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
s-vxwork.ads<s-vxwork-m68k.ads \
@ -461,6 +462,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-vxwork.ads<s-vxwork-ppc.ads \
g-socthi.ads<g-socthi-vxworks.ads \
@ -496,11 +498,12 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
ifeq ($(strip $(filter-out rtp-smp,$(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
s-vxwext.ads<s-vxwext-rtp.ads \
s-vxwext.adb<s-vxwext-rtp.adb \
s-vxwext.adb<s-vxwext-rtp-smp.adb \
s-tpopsp.adb<s-tpopsp-vxworks-tls.adb \
system.ads<system-vxworks-ppc-rtp.ads
EXTRA_GNATRTL_NONTASKING_OBJS=s-vxwexc.o
EXTRA_GNATRTL_TASKING_OBJS=affinity.o
else
ifeq ($(strip $(filter-out kernel-smp,$(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
@ -509,6 +512,8 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
s-vxwext.ads<s-vxwext-kernel.ads \
s-vxwext.adb<s-vxwext-kernel-smp.adb \
system.ads<system-vxworks-ppc-kernel.ads
EXTRA_GNATRTL_TASKING_OBJS=affinity.o
else
LIBGNAT_TARGET_PAIRS += \
s-interr.adb<s-interr-hwint.adb \
@ -523,13 +528,12 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
LIBGNAT_TARGET_PAIRS += \
system.ads<system-vxworks-ppc.ads
endif
endif
EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
endif
endif
EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o s-vxwext.o
EXTRA_GNATRTL_TASKING_OBJS += s-vxwork.o s-vxwext.o
EXTRA_LIBGNAT_SRCS+=vx_stack_info.c
EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
@ -537,7 +541,7 @@ endif
# vxworksae / vxworks 653
ifeq ($(strip $(filter-out powerpc% wrs vxworksae,$(targ))),)
# target pairs for kernel + vthreads runtime
# target pairs for vthreads runtime
LIBGNAT_TARGET_PAIRS = \
a-elchha.adb<a-elchha-vxworks-ppc-full.adb \
a-intnam.ads<a-intnam-vxworks.ads \
@ -554,6 +558,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworksae,$(targ))),)
s-parame.ads<s-parame-ae653.ads \
s-parame.adb<s-parame-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
s-vxwext.adb<s-vxwext-noints.adb \
@ -619,6 +624,7 @@ ifeq ($(strip $(filter-out %86 wrs vxworksae,$(targ))),)
s-osprim.adb<s-osprim-vxworks.adb \
s-parame.ads<s-parame-ae653.ads \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-thread.adb<s-thread-ae653.adb \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
@ -679,6 +685,7 @@ ifeq ($(strip $(filter-out sparc% wrs vx%,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
s-vxwork.ads<s-vxwork-sparcv9.ads \
@ -719,6 +726,7 @@ ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-vxwork.ads<s-vxwork-x86.ads \
g-bytswa.adb<g-bytswa-x86.adb \
@ -755,11 +763,12 @@ ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
ifeq ($(strip $(filter-out rtp-smp, $(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
s-vxwext.ads<s-vxwext-rtp.ads \
s-vxwext.adb<s-vxwext-rtp.adb \
s-vxwext.adb<s-vxwext-rtp-smp.adb \
s-tpopsp.adb<s-tpopsp-vxworks-tls.adb \
system.ads<system-vxworks-x86-rtp.ads
EXTRA_GNATRTL_NONTASKING_OBJS=s-vxwexc.o
EXTRA_GNATRTL_TASKING_OBJS=affinity.o
else
ifeq ($(strip $(filter-out kernel-smp, $(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
@ -768,6 +777,7 @@ ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
s-vxwext.ads<s-vxwext-kernel.ads \
s-vxwext.adb<s-vxwext-kernel-smp.adb \
system.ads<system-vxworks-x86-kernel.ads
EXTRA_GNATRTL_TASKING_OBJS=affinity.o
else
LIBGNAT_TARGET_PAIRS += \
s-interr.adb<s-interr-hwint.adb \
@ -787,7 +797,7 @@ ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
endif
endif
EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o s-vxwext.o
EXTRA_GNATRTL_TASKING_OBJS += s-vxwork.o s-vxwext.o
EXTRA_LIBGNAT_SRCS+=vx_stack_info.c
EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
@ -809,6 +819,7 @@ ifeq ($(strip $(filter-out arm% coff wrs vx%,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
s-vxwork.ads<s-vxwork-arm.ads \
@ -848,6 +859,7 @@ ifeq ($(strip $(filter-out mips% wrs vx%,$(targ))),)
s-stchop.ads<s-stchop-limit.ads \
s-stchop.adb<s-stchop-vxworks.adb \
s-taprop.adb<s-taprop-vxworks.adb \
s-tasinf.ads<s-tasinf-vxworks.ads \
s-taspri.ads<s-taspri-vxworks.ads \
s-tpopsp.adb<s-tpopsp-vxworks.adb \
s-vxwork.ads<s-vxwork-mips.ads \

View File

@ -411,6 +411,7 @@ procedure GNATCmd is
Unit := Units_Htable.Get_First (Project_Tree.Units_HT);
while Unit /= No_Unit_Index loop
-- For gnatls, we only need to put the library units, body or
-- spec, but not the subunits.
@ -465,10 +466,8 @@ procedure GNATCmd is
then
Last_Switches.Increment_Last;
Last_Switches.Table (Last_Switches.Last) :=
new String'
(Get_Name_String
(Unit.File_Names
(Spec).Display_File));
new String'(Get_Name_String
(Unit.File_Names (Spec).Display_File));
end if;
end if;
@ -485,7 +484,7 @@ procedure GNATCmd is
-- must be added.
if Check_Project
(Unit.File_Names (Impl).Project, Project)
(Unit.File_Names (Impl).Project, Project)
then
Subunit := False;
@ -513,14 +512,12 @@ procedure GNATCmd is
Last_Switches.Table (Last_Switches.Last) :=
new String'
(Get_Name_String
(Unit.File_Names
(Impl).Project.
Object_Directory.Name) &
Directory_Separator &
(Unit.File_Names
(Impl).Project. Object_Directory.Name) &
Directory_Separator &
MLib.Fil.Ext_To
(Get_Name_String
(Unit.File_Names
(Impl).Display_File),
(Unit.File_Names (Impl).Display_File),
"ci"));
end if;
end if;
@ -528,23 +525,20 @@ procedure GNATCmd is
elsif Unit.File_Names (Spec) /= null
and then Unit.File_Names (Spec).Path.Name /= Slash
then
-- We have a spec with no body. Check if it is for this
-- project.
-- Spec with no body, check if it is for this project
if Check_Project
(Unit.File_Names (Spec).Project, Project)
(Unit.File_Names (Spec).Project, Project)
then
Last_Switches.Increment_Last;
Last_Switches.Table (Last_Switches.Last) :=
new String'
(Get_Name_String
(Unit.File_Names
(Spec).Project.
Object_Directory.Name) &
Dir_Separator &
(Unit.File_Names
(Spec).Project. Object_Directory.Name) &
Dir_Separator &
MLib.Fil.Ext_To
(Get_Name_String
(Unit.File_Names (Spec).File),
(Get_Name_String (Unit.File_Names (Spec).File),
"ci"));
end if;
end if;
@ -557,7 +551,7 @@ procedure GNATCmd is
for Kind in Spec_Or_Body loop
if Unit.File_Names (Kind) /= null
and then Check_Project
(Unit.File_Names (Kind).Project, Project)
(Unit.File_Names (Kind).Project, Project)
and then Unit.File_Names (Kind).Path.Name /= Slash
then
Get_Name_String
@ -576,10 +570,9 @@ procedure GNATCmd is
else
Last_Switches.Increment_Last;
Last_Switches.Table (Last_Switches.Last) :=
new String'
(Get_Name_String
(Unit.File_Names
(Kind).Path.Display_Name));
new String'(Get_Name_String
(Unit.File_Names
(Kind).Path.Display_Name));
end if;
end if;
end loop;

View File

@ -1471,10 +1471,10 @@ package body Make is
if UID /= Prj.No_Unit_Index then
if (UID.File_Names (Impl) = null
or else UID.File_Names (Impl).File /= Sfile)
or else UID.File_Names (Impl).File /= Sfile)
and then
(UID.File_Names (Spec) = null
or else UID.File_Names (Spec).File /= Sfile)
or else UID.File_Names (Spec).File /= Sfile)
then
Verbose_Msg (Uname, "sources do not include ", Name_Id (Sfile));
return True;
@ -1951,11 +1951,9 @@ package body Make is
exit;
elsif Udata.File_Names (Spec) /= null
and then Udata.File_Names (Spec).File =
Source_File
and then Udata.File_Names (Spec).File = Source_File
then
ALI_Project :=
Udata.File_Names (Spec).Project;
ALI_Project := Udata.File_Names (Spec).Project;
exit;
end if;
@ -3611,8 +3609,7 @@ package body Make is
if Uid /= Prj.No_Unit_Index then
if Uid.File_Names (Impl) /= null
and then
Uid.File_Names (Impl).Path.Name /=
Slash
Uid.File_Names (Impl).Path.Name /= Slash
then
Sfile := Uid.File_Names (Impl).File;
Source_Index :=
@ -3620,11 +3617,9 @@ package body Make is
elsif Uid.File_Names (Spec) /= null
and then
Uid.File_Names
(Spec).Path.Name /= Slash
Uid.File_Names (Spec).Path.Name /= Slash
then
Sfile :=
Uid.File_Names (Spec).File;
Sfile := Uid.File_Names (Spec).File;
Source_Index :=
Uid.File_Names (Spec).Index;
end if;
@ -4428,10 +4423,9 @@ package body Make is
-- If we have something to put in the mapping then do it
-- now. However, if the project is extended, we don't put
-- anything in the mapping file, because we do not know
-- where the ALI file is: it might be in the extended
-- project obj dir as well as in the extending project
-- obj dir.
-- anything in the mapping file, because we don't know where
-- the ALI file is: it might be in the extended project obj
-- dir as well as in the extending project obj dir.
if ALI_Name /= No_File
and then ALI_Project.Extended_By = No_Project
@ -4465,13 +4459,12 @@ package body Make is
declare
ALI_Path_Name : constant String :=
Name_Buffer (1 .. Name_Len);
Name_Buffer (1 .. Name_Len);
begin
if Is_Regular_File
(ALI_Path_Name (1 .. ALI_Path_Name'Last - 1))
(ALI_Path_Name (1 .. ALI_Path_Name'Last - 1))
then
-- First line is the unit name
Get_Name_String (ALI_Unit);
@ -4494,7 +4487,7 @@ package body Make is
(Mapping_FD,
Name_Buffer (1)'Address,
Name_Len);
OK := Bytes = Name_Len;
OK := (Bytes = Name_Len);
exit when not OK;
@ -4505,11 +4498,11 @@ package body Make is
(Mapping_FD,
ALI_Path_Name (1)'Address,
ALI_Path_Name'Length);
OK := Bytes = ALI_Path_Name'Length;
OK := (Bytes = ALI_Path_Name'Length);
-- If OK is False, it means we were unable
-- to write a line. No point in continuing
-- with the other units.
-- If OK is False, it means we were unable to
-- write a line. No point in continuing with the
-- other units.
exit when not OK;
end if;
@ -7001,7 +6994,6 @@ package body Make is
-- For all the sources in the project files,
Unit := Units_Htable.Get_First (Project_Tree.Units_HT);
while Unit /= null loop
Sfile := No_File;
Index := 0;

View File

@ -944,30 +944,26 @@ package body MLib.Prj is
Processed_ALIs.Reset;
Unit := Units_Htable.Get_First (In_Tree.Units_HT);
while Unit /= No_Unit_Index loop
if Unit.File_Names (Impl) /= null
and then Unit.File_Names (Impl).Path.Name /= Slash
then
if
Check_Project (Unit.File_Names (Impl).Project)
then
if Check_Project (Unit.File_Names (Impl).Project) then
if Unit.File_Names (Spec) = null then
declare
Src_Ind : Source_File_Index;
begin
Src_Ind := Sinput.P.Load_Project_File
(Get_Name_String
(Unit.File_Names (Impl).Path.Name));
(Get_Name_String
(Unit.File_Names (Impl).Path.Name));
-- Add the ALI file only if it is not a subunit
if not
Sinput.P.Source_File_Is_Subunit (Src_Ind)
then
Add_ALI_For
(Unit.File_Names (Impl).File);
Add_ALI_For (Unit.File_Names (Impl).File);
exit when not Bind;
end if;
end;
@ -980,8 +976,7 @@ package body MLib.Prj is
elsif Unit.File_Names (Spec) /= null
and then Unit.File_Names (Spec).Path.Name /= Slash
and then Check_Project
(Unit.File_Names (Spec).Project)
and then Check_Project (Unit.File_Names (Spec).Project)
then
Add_ALI_For (Unit.File_Names (Spec).File);
exit when not Bind;
@ -1019,8 +1014,7 @@ package body MLib.Prj is
ALI.Units.Table
(ALI.ALIs.Table (A).First_Unit).Last_Arg
loop
-- Look for --RTS. If found, add the switch to call
-- gnatbind.
-- If --RTS found, add switch to call gnatbind
declare
Arg : String_Ptr renames Args.Table (Index);

View File

@ -738,21 +738,21 @@ package body Prj.Env is
--------------------
procedure Create_Mapping (In_Tree : Project_Tree_Ref) is
Unit : Unit_Index;
Data : Source_Id;
Unit : Unit_Index;
Data : Source_Id;
begin
Fmap.Reset_Tables;
Unit := Units_Htable.Get_First (In_Tree.Units_HT);
while Unit /= No_Unit_Index loop
-- Process only if the unit has a valid name
if Unit.Name /= No_Name then
Data := Unit.File_Names (Spec);
-- If there is a spec, put it in the mapping
-- If there is a spec put it in the mapping
if Data /= null then
if Data.Path.Name = Slash then
@ -802,11 +802,11 @@ package body Prj.Env is
-- For each project in the closure of Project, the corresponding flag
-- will be set to True.
Source : Source_Id;
Suffix : File_Name_Type;
Unit : Unit_Index;
Data : Source_Id;
Iter : Source_Iterator;
Source : Source_Id;
Suffix : File_Name_Type;
Unit : Unit_Index;
Data : Source_Id;
Iter : Source_Iterator;
procedure Put_Name_Buffer;
-- Put the line contained in the Name_Buffer in the mapping file

View File

@ -196,6 +196,10 @@ package body Prj.Nmsc is
-- Find the list of files that should not be considered as source files
-- for this project. Sets the list in the Excluded_Sources_Htable.
procedure Override_Kind (Source : Source_Id; Kind : Source_Kind);
-- Override the reference kind for a source file. This properly updates
-- the unit data if necessary.
function Hash (Unit : Unit_Info) return Header_Num;
type Name_And_Index is record
@ -717,26 +721,28 @@ package body Prj.Nmsc is
-- Process_Exceptions_Unit_Based and Check_File haven't looked it up.
UData := Units_Htable.Get (In_Tree.Units_HT, Unit);
if UData = No_Unit_Index then
UData := new Unit_Data;
UData.Name := Unit;
Units_Htable.Set (In_Tree.Units_HT, Unit, UData);
end if;
UData.File_Names (Kind) := Id;
Id.Unit := UData;
Id.Unit := UData;
-- Note that this updates Unit information as well
Override_Kind (Id, Kind);
end if;
Id.Index := Index;
Id.File := File_Name;
Id.Display_File := Display_File;
Id.Dep_Name := Dependency_Name
(File_Name, Lang_Id.Config.Dependency_Kind);
Id.Naming_Exception := Naming_Exception;
Id.Index := Index;
Id.File := File_Name;
Id.Display_File := Display_File;
Id.Dep_Name := Dependency_Name
(File_Name, Lang_Id.Config.Dependency_Kind);
Id.Naming_Exception := Naming_Exception;
if Is_Compilable (Id)
and then Config.Object_Generated
then
if Is_Compilable (Id) and then Config.Object_Generated then
Id.Object := Object_Name (File_Name, Config.Object_File_Suffix);
Id.Switches := Switches_Name (File_Name);
end if;
@ -762,8 +768,7 @@ package body Prj.Nmsc is
function ALI_File_Name (Source : String) return String is
begin
-- If the source name has an extension, then replace it with
-- the ALI suffix.
-- If the source name has extension, replace it with the ALI suffix
for Index in reverse Source'First + 1 .. Source'Last loop
if Source (Index) = '.' then
@ -771,8 +776,7 @@ package body Prj.Nmsc is
end if;
end loop;
-- If there is no dot, or if it is the first character, just add the
-- ALI suffix.
-- If no dot, or if it is the first character, just add the ALI suffix
return Source & ALI_Suffix;
end ALI_File_Name;
@ -827,11 +831,40 @@ package body Prj.Nmsc is
if Project.Qualifier = Dry
and then Project.Source_Dirs /= Nil_String
then
Error_Msg
(Project, In_Tree,
"an abstract project needs to have no language, no sources " &
"or no source directories",
Project.Location);
declare
Source_Dirs : constant Variable_Value :=
Util.Value_Of
(Name_Source_Dirs,
Project.Decl.Attributes, In_Tree);
Source_Files : constant Variable_Value :=
Util.Value_Of
(Name_Source_Files,
Project.Decl.Attributes, In_Tree);
Source_List_File : constant Variable_Value :=
Util.Value_Of
(Name_Source_List_File,
Project.Decl.Attributes, In_Tree);
Languages : constant Variable_Value :=
Util.Value_Of
(Name_Languages,
Project.Decl.Attributes, In_Tree);
begin
if Source_Dirs.Values = Nil_String
and then Source_Files.Values = Nil_String
and then Languages.Values = Nil_String
and then Source_List_File.Default
then
Project.Source_Dirs := Nil_String;
else
Error_Msg
(Project, In_Tree,
"an abstract project needs to have no language, " &
"no sources or no source directories",
Project.Location);
end if;
end;
end if;
-- Check configuration in multi language mode
@ -1221,47 +1254,49 @@ package body Prj.Nmsc is
-- Get the name of the language
Lang_Index := Get_Language_From_Name
(Project, Get_Name_String (Element.Index));
Lang_Index :=
Get_Language_From_Name
(Project, Get_Name_String (Element.Index));
if Lang_Index /= No_Language_Index then
case Current_Array.Name is
when Name_Driver =>
when Name_Driver =>
-- Attribute Driver (<language>)
-- Attribute Driver (<language>)
Lang_Index.Config.Binder_Driver :=
File_Name_Type (Element.Value.Value);
Lang_Index.Config.Binder_Driver :=
File_Name_Type (Element.Value.Value);
when Name_Required_Switches =>
Put (Into_List =>
when Name_Required_Switches =>
Put
(Into_List =>
Lang_Index.Config.Binder_Required_Switches,
From_List => Element.Value.Values,
In_Tree => In_Tree);
From_List => Element.Value.Values,
In_Tree => In_Tree);
when Name_Prefix =>
when Name_Prefix =>
-- Attribute Prefix (<language>)
-- Attribute Prefix (<language>)
Lang_Index.Config.Binder_Prefix :=
Element.Value.Value;
Lang_Index.Config.Binder_Prefix :=
Element.Value.Value;
when Name_Objects_Path =>
when Name_Objects_Path =>
-- Attribute Objects_Path (<language>)
-- Attribute Objects_Path (<language>)
Lang_Index.Config.Objects_Path :=
Element.Value.Value;
Lang_Index.Config.Objects_Path :=
Element.Value.Value;
when Name_Objects_Path_File =>
when Name_Objects_Path_File =>
-- Attribute Objects_Path (<language>)
-- Attribute Objects_Path (<language>)
Lang_Index.Config.Objects_Path_File :=
Element.Value.Value;
Lang_Index.Config.Objects_Path_File :=
Element.Value.Value;
when others =>
null;
when others =>
null;
end case;
end if;
end if;
@ -2190,8 +2225,9 @@ package body Prj.Nmsc is
-- Get the name of the language
Lang_Index := Get_Language_From_Name
(Project, Get_Name_String (Element.Index));
Lang_Index :=
Get_Language_From_Name
(Project, Get_Name_String (Element.Index));
if Lang_Index /= No_Language_Index then
case Current_Array.Name is
@ -2994,8 +3030,8 @@ package body Prj.Nmsc is
Source := Prj.Element (Iter);
exit when Source = No_Source
or else (Source.Unit /= null
and then Source.Unit.Name = Unit
and then Source.Index = Index);
and then Source.Unit.Name = Unit
and then Source.Index = Index);
Next (Iter);
end loop;
@ -3009,8 +3045,8 @@ package body Prj.Nmsc is
exit when Source = No_Source
or else (Source.Unit /= null
and then Source.Unit.Name = Unit
and then Source.Index = Index);
and then Source.Unit.Name = Unit
and then Source.Index = Index);
end loop;
end if;
@ -4531,13 +4567,13 @@ package body Prj.Nmsc is
Src_Ind : Source_File_Index;
begin
Src_Ind := Sinput.P.Load_Project_File
(Get_Name_String
(UData.File_Names
(Impl).Path.Name));
Src_Ind :=
Sinput.P.Load_Project_File
(Get_Name_String (UData.File_Names
(Impl).Path.Name));
if Sinput.P.Source_File_Is_Subunit
(Src_Ind)
(Src_Ind)
then
Error_Msg
(Project, In_Tree,
@ -4565,11 +4601,9 @@ package body Prj.Nmsc is
end if;
elsif UData.File_Names (Spec) /= null
and then UData.File_Names
(Spec).Path.Name /= Slash
and then UData.File_Names (Spec).Path.Name /= Slash
and then Check_Project
(UData.File_Names
(Spec).Project,
(UData.File_Names (Spec).Project,
Project, Extending)
then
@ -4593,21 +4627,19 @@ package body Prj.Nmsc is
-- Multi_Language mode
Next_Proj := Project.Extends;
Iter := For_Each_Source (In_Tree, Project);
loop
while Prj.Element (Iter) /= No_Source
and then
(Prj.Element (Iter).Unit = null
or else Prj.Element (Iter).Unit.Name /= Unit)
or else Prj.Element (Iter).Unit.Name /= Unit)
loop
Next (Iter);
end loop;
Source := Prj.Element (Iter);
exit when Source /= No_Source or else
Next_Proj = No_Project;
exit when Source /= No_Source
or else Next_Proj = No_Project;
Iter := For_Each_Source (In_Tree, Next_Proj);
Next_Proj := Next_Proj.Extends;
@ -4616,7 +4648,6 @@ package body Prj.Nmsc is
if Source /= No_Source then
if Source.Kind = Sep then
Source := No_Source;
elsif Source.Kind = Spec
and then Source.Other_Part /= No_Source
then
@ -4626,8 +4657,7 @@ package body Prj.Nmsc is
if Source /= No_Source then
if Source.Project /= Project
and then
not Is_Extending (Project, Source.Project)
and then not Is_Extending (Project, Source.Project)
then
Source := No_Source;
end if;
@ -4649,6 +4679,7 @@ package body Prj.Nmsc is
String_Element_Table.Increment_Last
(In_Tree.String_Elements);
In_Tree.String_Elements.Table
(String_Element_Table.Last
(In_Tree.String_Elements)) :=
@ -4660,8 +4691,9 @@ package body Prj.Nmsc is
(Interfaces).Location,
Flag => False,
Next => Interface_ALIs);
Interface_ALIs := String_Element_Table.Last
(In_Tree.String_Elements);
Interface_ALIs :=
String_Element_Table.Last (In_Tree.String_Elements);
end if;
end if;
@ -7267,6 +7299,27 @@ package body Prj.Nmsc is
end if;
end Check_File_Naming_Schemes;
-------------------
-- Override_Kind --
-------------------
procedure Override_Kind (Source : Source_Id; Kind : Source_Kind) is
begin
-- Remove reference in the unit, if necessary
if Source.Unit /= null
and then Source.Kind in Spec_Or_Body
then
Source.Unit.File_Names (Source.Kind) := null;
end if;
Source.Kind := Kind;
if Source.Kind in Spec_Or_Body and then Source.Unit /= null then
Source.Unit.File_Names (Source.Kind) := Source;
end if;
end Override_Kind;
----------------
-- Check_File --
----------------
@ -7341,7 +7394,7 @@ package body Prj.Nmsc is
(Get_Name_String (Canonical_Path));
if Sinput.P.Source_File_Is_Subunit (Src_Ind) then
Name_Loc.Source.Kind := Sep;
Override_Kind (Name_Loc.Source, Sep);
end if;
end if;
end if;
@ -7713,13 +7766,16 @@ package body Prj.Nmsc is
procedure Mark_Excluded_Sources is
Source : Source_Id := No_Source;
OK : Boolean;
Excluded : File_Found := Excluded_Sources_Htable.Get_First;
Excluded : File_Found;
Index : Unit_Index;
begin
while Excluded /= No_File_Found loop
OK := False;
-- ??? Don't we have a hash table to map files to Source_Id ?
begin
Excluded := Excluded_Sources_Htable.Get_First;
while Excluded /= No_File_Found loop
OK := False;
-- ??? Don't we have a hash table to map files to Source_Id?
Iter := For_Each_Source (In_Tree);
loop
Source := Prj.Element (Iter);
@ -7743,6 +7799,7 @@ package body Prj.Nmsc is
-- ??? Should we simply set (can be done from the
-- source)
-- Index.File_Names (Source.Kind) := null;
end if;
end if;
@ -7868,7 +7925,7 @@ package body Prj.Nmsc is
if Sinput.P.Source_File_Is_Subunit
(Src_Ind)
then
Src_Id.Kind := Sep;
Override_Kind (Src_Id, Sep);
else
Check_Object (Src_Id);
end if;
@ -8017,13 +8074,14 @@ package body Prj.Nmsc is
Unit_Kind : Spec_Or_Body;
Needs_Pragma : Boolean)
is
UData : constant Unit_Index :=
Units_Htable.Get (In_Tree.Units_HT, Unit_Name);
-- ??? Add_Source will look it up again, can we do that only once ?
UData : constant Unit_Index :=
Units_Htable.Get (In_Tree.Units_HT, Unit_Name);
Source : Source_Id;
To_Record : Boolean := False;
The_Location : Source_Ptr := Location;
Unit_Prj : Project_Id;
Source : Source_Id;
To_Record : Boolean := False;
The_Location : Source_Ptr := Location;
Unit_Prj : Project_Id;
begin
if Current_Verbosity = High then
@ -8040,7 +8098,7 @@ package body Prj.Nmsc is
if UData.File_Names (Unit_Kind) = null
or else
(UData.File_Names (Unit_Kind).File = Canonical_File
and then UData.File_Names (Unit_Kind).Path.Name = Slash)
and then UData.File_Names (Unit_Kind).Path.Name = Slash)
or else Is_Extending
(Project.Extends, UData.File_Names (Unit_Kind).Project)
then
@ -8352,8 +8410,8 @@ package body Prj.Nmsc is
if Specs then
if not Check_Project
(The_Unit_Data.File_Names (Spec).Project,
Project, Extending)
(The_Unit_Data.File_Names (Spec).Project,
Project, Extending)
then
Error_Msg
(Project, In_Tree,
@ -8365,8 +8423,8 @@ package body Prj.Nmsc is
else
if The_Unit_Data.File_Names (Impl) = null
or else not Check_Project
(The_Unit_Data.File_Names (Impl).Project,
Project, Extending)
(The_Unit_Data.File_Names (Impl).Project,
Project, Extending)
then
Error_Msg
(Project, In_Tree,

View File

@ -471,15 +471,24 @@ package System.OS_Interface is
Handler : Interrupt_Handler;
Parameter : System.Address := System.Null_Address) return int;
pragma Inline (Interrupt_Connect);
-- Use this to set up an user handler. The routine installs a
-- a user handler which is invoked after the OS has saved enough
-- context for a high-level language routine to be safely invoked.
-- Use this to set up an user handler. The routine installs a a user
-- handler which is invoked after the OS has saved enough context for a
-- high-level language routine to be safely invoked.
function Interrupt_Number_To_Vector (intNum : int) return Interrupt_Vector;
pragma Inline (Interrupt_Number_To_Vector);
-- Convert a logical interrupt number to the hardware interrupt vector
-- number used to connect the interrupt.
--------------------------------
-- Processor Affinity for SMP --
--------------------------------
function taskCpuAffinitySet (tid : t_id; CPU : int) return int
renames System.VxWorks.Ext.taskCpuAffinitySet;
-- For SMP run-times the affinity to CPU.
-- For uniprocessor systems return ERROR status.
private
type sigset_t is new unsigned_long_long;

View File

@ -52,6 +52,7 @@ with System.Soft_Links;
-- on. For example when using the restricted run time, it is replaced by
-- System.Tasking.Restricted.Stages.
with System.Task_Info;
with System.VxWorks.Ext;
package body System.Task_Primitives.Operations is
@ -901,6 +902,10 @@ package body System.Task_Primitives.Operations is
Succeeded : out Boolean)
is
Adjusted_Stack_Size : size_t;
Result : int;
use System.Task_Info;
begin
-- Ask for four extra bytes of stack space so that the ATCB pointer can
-- be stored below the stack limit, plus extra space for the frame of
@ -963,6 +968,18 @@ package body System.Task_Primitives.Operations is
To_Address (T));
end;
-- Set processor affinity
if T.Common.Task_Info /= Unspecified_Task_Info then
Result :=
taskCpuAffinitySet (T.Common.LL.Thread, T.Common.Task_Info);
if Result = -1 then
taskDelete (T.Common.LL.Thread);
T.Common.LL.Thread := -1;
end if;
end if;
if T.Common.LL.Thread = -1 then
Succeeded := False;
else

View File

@ -0,0 +1,90 @@
------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- S Y S T E M . T A S K _ I N F O --
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
-- This package contains the definitions and routines associated with the
-- implementation and use of the Task_Info pragma. It is specialized
-- appropriately for targets that make use of this pragma.
-- Note: the compiler generates direct calls to this interface, via Rtsfind.
-- Any changes to this interface may require corresponding compiler changes.
-- This unit may be used directly from an application program by providing
-- an appropriate WITH, and the interface can be expected to remain stable.
-- This is the VxWorks version of this package
with Interfaces.C;
package System.Task_Info is
pragma Preelaborate;
pragma Elaborate_Body;
-- To ensure that a body is allowed
-----------------------------------------
-- Implementation of Task_Info Feature --
-----------------------------------------
-- The Task_Info pragma:
-- pragma Task_Info (EXPRESSION);
-- allows the specification on a task by task basis of a value of type
-- System.Task_Info.Task_Info_Type to be passed to a task when it is
-- created. The specification of this type, and the effect on the task
-- that is created is target dependent.
-- The Task_Info pragma appears within a task definition (compare the
-- definition and implementation of pragma Priority). If no such pragma
-- appears, then the value Unspecified_Task_Info is passed. If a pragma
-- is present, then it supplies an alternative value. If the argument of
-- the pragma is a discriminant reference, then the value can be set on
-- a task by task basis by supplying the appropriate discriminant value.
-- Note that this means that the type used for Task_Info_Type must be
-- suitable for use as a discriminant (i.e. a scalar or access type).
------------------
-- Declarations --
------------------
subtype Task_Info_Type is Interfaces.C.int;
-- This is a CPU number (positive)
Any_CPU : constant Task_Info_Type := 0;
-- Allow task to run on any CPU
use type Interfaces.C.int;
Unspecified_Task_Info : constant Task_Info_Type := -1;
-- Value passed to task in the absence of a Task_Info pragma
-- This value means do not try to set the CPU affinity
end System.Task_Info;

View File

@ -63,4 +63,14 @@ package body System.VxWorks.Ext is
return Os_Sem_Delete (Sem);
end semDelete;
------------------------
-- taskCpuAffinitySet --
------------------------
function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
pragma Unreferenced (tid, CPU);
begin
return ERROR;
end taskCpuAffinitySet;
end System.VxWorks.Ext;

View File

@ -87,4 +87,13 @@ package System.VxWorks.Ext is
-- Needed for ravenscar-cert
pragma Import (C, tickGet, "tick64Get");
--------------------------------
-- Processor Affinity for SMP --
--------------------------------
function taskCpuAffinitySet (tid : t_id; CPU : int) return int;
pragma Convention (C, taskCpuAffinitySet);
-- For SMP run-times set the CPU affinity.
-- For uniprocessor systems return ERROR status.
end System.VxWorks.Ext;

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 2009, Free Software Foundation, Inc. --
-- Copyright (C) 2008-2009, Free Software Foundation, Inc. --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@ -79,4 +79,14 @@ package body System.VxWorks.Ext is
return 0;
end Interrupt_Number_To_Vector;
------------------------
-- taskCpuAffinitySet --
------------------------
function taskCpuAffinitySet (tid : t_id; CPU : int) return int is
pragma Unreferenced (tid, CPU);
begin
return ERROR;
end taskCpuAffinitySet;
end System.VxWorks.Ext;

View File

@ -81,4 +81,13 @@ package System.VxWorks.Ext is
function Set_Time_Slice (ticks : int) return int;
pragma Import (C, Set_Time_Slice, "kernelTimeSlice");
--------------------------------
-- Processor Affinity for SMP --
--------------------------------
function taskCpuAffinitySet (tid : t_id; CPU : int) return int;
pragma Convention (C, taskCpuAffinitySet);
-- For SMP run-times set the CPU affinity.
-- For uniprocessor systems return ERROR status.
end System.VxWorks.Ext;