diff --git a/Zend/zend_call_stack.c b/Zend/zend_call_stack.c index 9edb4f29589..f12323d0d9c 100644 --- a/Zend/zend_call_stack.c +++ b/Zend/zend_call_stack.c @@ -71,6 +71,10 @@ typedef int boolean_t; #include #endif +#ifdef HAVE_VALGRIND +# include +#endif + #ifdef ZEND_CHECK_STACK_LIMIT /* Called once per process or thread */ @@ -238,6 +242,13 @@ static bool zend_call_stack_get_linux_proc_maps(zend_call_stack *stack) max_size = rlim.rlim_cur; +#ifdef HAVE_VALGRIND + /* Under Valgrind, the last page is not useable */ + if (RUNNING_ON_VALGRIND) { + max_size -= zend_get_page_size(); + } +#endif + /* Previous mapping may prevent the stack from growing */ if (end - max_size < prev_end) { max_size = prev_end - end;