This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Bump size of stack checking protection area


Hi,

as documented, STACK_CHECK_PROTECT is supposed to be an "estimate of the 
amount of stack required to propagate an exception".  It's (mainly) for Ada 
and it needs to distinguish the various EH schemes, which might have different 
needs.  While the current setting is OK for the front-end SJLJ scheme used up 
to now in Ada, it's not sufficient for the middle-end SJLJ scheme that we are 
experimenting with; you need 8K on some platforms to pass the ACATS testsuite.

Tested on x86_64-suse-linux, OK for the mainline?


2015-09-14  Eric Botcazou  <ebotcazou@adacore.com>

	* defaults.h (STACK_OLD_CHECK_PROTECT): Adjust for -fno-exceptions.
	Bump to 4K for SJLJ exceptions.
	(STACK_CHECK_PROTECT): Likewise.  Bump to 8K for SJLJ exceptions.

-- 
Eric Botcazou
Index: defaults.h
===================================================================
--- defaults.h	(revision 227729)
+++ defaults.h	(working copy)
@@ -1406,9 +1406,11 @@ see the files COPYING3 and COPYING.RUNTI
 #define STACK_OLD_CHECK_PROTECT STACK_CHECK_PROTECT
 #else
 #define STACK_OLD_CHECK_PROTECT						\
- (targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
+ (!global_options.x_flag_exceptions					\
   ? 75 * UNITS_PER_WORD							\
-  : 8 * 1024)
+  : targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
+    ? 4 * 1024								\
+    : 8 * 1024)
 #endif
 
 /* Minimum amount of stack required to recover from an anticipated stack
@@ -1416,9 +1418,11 @@ see the files COPYING3 and COPYING.RUNTI
    of stack required to propagate an exception.  */
 #ifndef STACK_CHECK_PROTECT
 #define STACK_CHECK_PROTECT						\
- (targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
-  ? 75 * UNITS_PER_WORD							\
-  : 12 * 1024)
+ (!global_options.x_flag_exceptions					\
+  ? 4 * 1024								\
+  : targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
+    ? 8 * 1024								\
+    : 12 * 1024)
 #endif
 
 /* Make the maximum frame size be the largest we can and still only need

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]