@@ -104,7 +104,7 @@ static bool zend_call_stack_is_main_thread(void) {
104104# endif
105105}
106106
107- # ifdef HAVE_PTHREAD_GETATTR_NP
107+ # if defined( HAVE_PTHREAD_GETATTR_NP ) && defined( HAVE_PTHREAD_ATTR_GETSTACK )
108108static bool zend_call_stack_get_linux_pthread (zend_call_stack * stack )
109109{
110110 pthread_attr_t attr ;
@@ -145,12 +145,12 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
145145
146146 return true;
147147}
148- # else /* HAVE_PTHREAD_GETATTR_NP */
148+ # else /* defined( HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
149149static bool zend_call_stack_get_linux_pthread (zend_call_stack * stack )
150150{
151151 return false;
152152}
153- # endif /* HAVE_PTHREAD_GETATTR_NP */
153+ # endif /* defined( HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
154154
155155static bool zend_call_stack_get_linux_proc_maps (zend_call_stack * stack )
156156{
@@ -251,7 +251,7 @@ static bool zend_call_stack_is_main_thread(void)
251251 return is_main == -1 || is_main == 1 ;
252252}
253253
254- # if defined(HAVE_PTHREAD_ATTR_GET_NP ) && defined(HAVE_PTHREAD_ATTR_GET_STACK )
254+ # if defined(HAVE_PTHREAD_ATTR_GET_NP ) && defined(HAVE_PTHREAD_ATTR_GETSTACK )
255255static bool zend_call_stack_get_freebsd_pthread (zend_call_stack * stack )
256256{
257257 pthread_attr_t attr ;
@@ -275,6 +275,14 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
275275 goto fail ;
276276 }
277277
278+ error = pthread_attr_getguardsize (& attr , & guard_size );
279+ if (error ) {
280+ return false;
281+ }
282+
283+ addr = (char * )addr + guard_size ;
284+ max_size -= guard_size ;
285+
278286 stack -> base = (int8_t * )addr + max_size ;
279287 stack -> max_size = max_size ;
280288
@@ -285,12 +293,12 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
285293 pthread_attr_destroy (& attr );
286294 return false;
287295}
288- # else /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GET_STACK ) */
296+ # else /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK ) */
289297static bool zend_call_stack_get_freebsd_pthread (zend_call_stack * stack )
290298{
291299 return false;
292300}
293- # endif /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GET_STACK ) */
301+ # endif /* defined(HAVE_PTHREAD_ATTR_GET_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK ) */
294302
295303static bool zend_call_stack_get_freebsd_sysctl (zend_call_stack * stack )
296304{
0 commit comments