+2014-08-01 Robert Dewar <dewar@adacore.com>
+
+ * inline.adb, s-os_lib.ads: Minor reformatting.
+
+2014-08-01 Arnaud Charlet <charlet@adacore.com>
+
+ * s-tasdeb.ads, s-tasdeb.adb (Master_Hook, Master_Completed_Hook): New.
+ * s-tassta.adb (Task_Wrapper, Vulnerable_Complete_Master): Call new
+ hooks.
+
2014-08-01 Yannick Moy <moy@adacore.com>
* inline.adb (Cannot_Inline): Issue info message instead of
and then Msg (Msg'First .. Msg'First + 12) = "cannot inline"
then
declare
- Len1 : constant Positive := 13; -- length of "cannot inline"
+ Len1 : constant Positive := 13;
+ -- Length of "cannot inline"
+
Len2 : constant Positive := 31;
- -- lenth of "info: no contextual analysis of"
+ -- Length of "info: no contextual analysis of"
+
New_Msg : String (1 .. Msg'Length + Len2 - Len1);
+
begin
New_Msg (1 .. Len2) := "info: no contextual analysis of";
New_Msg (Len2 + 1 .. Msg'Length + Len2 - Len1) :=
-- to the current position (origin = SEEK_CUR), end of file (origin =
-- SEEK_END), or start of file (origin = SEEK_SET).
- type Large_File_Size is range -2 ** 63 .. 2 ** 63 - 1;
+ type Large_File_Size is range -2**63 .. 2**63 - 1;
+ -- Maximum supported size for a file (8 exabytes = 8 million terabytes,
+ -- should be enough to accomodate all possible needs for quite a while).
function File_Length (FD : File_Descriptor) return Long_Integer;
pragma Import (C, File_Length, "__gnat_file_length_long");
(Fd, S'Address, System.CRTL.size_t (Count));
end Write;
+ -----------------
+ -- Master_Hook --
+ -----------------
+
+ procedure Master_Hook
+ (Dependent : Task_Id;
+ Parent : Task_Id;
+ Master_Level : Integer)
+ is
+ pragma Inspection_Point (Dependent);
+ pragma Inspection_Point (Parent);
+ pragma Inspection_Point (Master_Level);
+ begin
+ null;
+ end Master_Hook;
+
+ ---------------------------
+ -- Master_Completed_Hook --
+ ---------------------------
+
+ procedure Master_Completed_Hook
+ (Self_ID : Task_Id;
+ Master_Level : Integer)
+ is
+ pragma Inspection_Point (Self_ID);
+ pragma Inspection_Point (Master_Level);
+ begin
+ null;
+ end Master_Completed_Hook;
+
end System.Tasking.Debug;
-- Enable or disable tracing for Flag. By default, flags in the range
-- 'A' .. 'Z' are disabled, others are enabled.
+ ---------------------------------
+ -- Hooks for Valgrind/Helgrind --
+ ---------------------------------
+
+ procedure Master_Hook
+ (Dependent : Task_Id;
+ Parent : Task_Id;
+ Master_Level : Integer);
+ -- Indicate to Valgrind/Helgrind that the master of Dependent
+ -- is Parent + Master_Level.
+
+ procedure Master_Completed_Hook
+ (Self_ID : Task_Id;
+ Master_Level : Integer);
+ -- Indicate to Valgrind/Helgrind that Self_ID has completed
+ -- the master Master_Level.
+
end System.Tasking.Debug;
begin
pragma Assert (Self_ID.Deferral_Level = 1);
+ Debug.Master_Hook
+ (Self_ID, Self_ID.Common.Parent, Self_ID.Master_of_Task);
+
-- Assume a size of the stack taken at this stage
if not Parameters.Sec_Stack_Dynamic then
-- since the value is only updated by each task for itself.
Self_ID.Master_Within := CM - 1;
+
+ Debug.Master_Completed_Hook (Self_ID, CM);
end Vulnerable_Complete_Master;
------------------------------