summaryrefslogtreecommitdiff
path: root/gcc/ada/s-tassta.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-04 13:50:50 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-04 13:50:50 +0000
commitf53dda320b61bb606a58ff461dc3d41cba0c536d (patch)
treebd9bf8ec7cc3d3b591ef5f5bd4457dbf781acc82 /gcc/ada/s-tassta.adb
parent79500ea01a1a06d39f68bd5445053a302a2ca901 (diff)
downloadgcc-f53dda320b61bb606a58ff461dc3d41cba0c536d.tar.gz
2011-08-04 Robert Dewar <dewar@adacore.com>
* exp_ch5.adb, exp_ch7.adb, exp_util.adb, bindgen.adb, sem_prag.adb, s-tassta.adb, exp_ch4.adb, exp_disp.adb, s-stausa.adb: Minor reformatting. 2011-08-04 Arnaud Charlet <charlet@adacore.com> * make.adb (Linking_Phase): Set source search path before calling gnatlink in CodePeer mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177388 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-tassta.adb')
-rw-r--r--gcc/ada/s-tassta.adb13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ada/s-tassta.adb b/gcc/ada/s-tassta.adb
index 9a5b67d5284..8795ce7727d 100644
--- a/gcc/ada/s-tassta.adb
+++ b/gcc/ada/s-tassta.adb
@@ -1115,7 +1115,7 @@ package body System.Tasking.Stages is
if System.Stack_Usage.Is_Enabled then
declare
- Guard_Page_Size : constant := 12 * 1024;
+ Guard_Page_Size : constant := 12 * 1024;
-- Part of the stack used as a guard page. This is an OS dependent
-- value, so we need to use the maximum. This value is only used
-- when the stack address is known, that is currently Windows.
@@ -1125,9 +1125,9 @@ package body System.Tasking.Stages is
-- smaller values resulted in segmentation faults from dynamic
-- stack analysis.
- Big_Overflow_Guard : constant := 16 * 1024;
- Small_Stack_Limit : constant := 64 * 1024;
- -- ??? These three values are experimental, and seems to work on
+ Big_Overflow_Guard : constant := 16 * 1024;
+ Small_Stack_Limit : constant := 64 * 1024;
+ -- ??? These three values are experimental, and seem to work on
-- most platforms. They still need to be analyzed further. They
-- also need documentation, what are they???
@@ -1137,22 +1137,27 @@ package body System.Tasking.Stages is
Stack_Base : Address;
-- Address of the base of the stack
+
begin
Stack_Base := Self_ID.Common.Compiler_Data.Pri_Stack_Info.Base;
if Stack_Base = Null_Address then
+
-- On many platforms, we don't know the real stack base
-- address. Estimate it using an address in the frame.
+
Stack_Base := Bottom_Of_Stack'Address;
-- Also reduce the size of the stack to take into account the
-- secondary stack array declared in this frame. This is for
-- sure very conservative.
+
if not Parameters.Sec_Stack_Dynamic then
Pattern_Size :=
Pattern_Size - Natural (Secondary_Stack_Size);
end if;
-- Adjustments for inner frames
+
Pattern_Size := Pattern_Size -
(if Pattern_Size < Small_Stack_Limit
then Small_Overflow_Guard