@@ -104,7 +104,7 @@ static bool zend_call_stack_is_main_thread(void) {
104
104
# endif
105
105
}
106
106
107
- # ifdef HAVE_PTHREAD_GETATTR_NP
107
+ # if defined( HAVE_PTHREAD_GETATTR_NP ) && defined( HAVE_PTHREAD_ATTR_GETSTACK )
108
108
static bool zend_call_stack_get_linux_pthread (zend_call_stack * stack )
109
109
{
110
110
pthread_attr_t attr ;
@@ -145,12 +145,12 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
145
145
146
146
return true;
147
147
}
148
- # else /* HAVE_PTHREAD_GETATTR_NP */
148
+ # else /* defined( HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
149
149
static bool zend_call_stack_get_linux_pthread (zend_call_stack * stack )
150
150
{
151
151
return false;
152
152
}
153
- # endif /* HAVE_PTHREAD_GETATTR_NP */
153
+ # endif /* defined( HAVE_PTHREAD_GETATTR_NP) && defined(HAVE_PTHREAD_ATTR_GETSTACK) */
154
154
155
155
static bool zend_call_stack_get_linux_proc_maps (zend_call_stack * stack )
156
156
{
@@ -251,7 +251,7 @@ static bool zend_call_stack_is_main_thread(void)
251
251
return is_main == -1 || is_main == 1 ;
252
252
}
253
253
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 )
255
255
static bool zend_call_stack_get_freebsd_pthread (zend_call_stack * stack )
256
256
{
257
257
pthread_attr_t attr ;
@@ -275,6 +275,14 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
275
275
goto fail ;
276
276
}
277
277
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
+
278
286
stack -> base = (int8_t * )addr + max_size ;
279
287
stack -> max_size = max_size ;
280
288
@@ -285,12 +293,12 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
285
293
pthread_attr_destroy (& attr );
286
294
return false;
287
295
}
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 ) */
289
297
static bool zend_call_stack_get_freebsd_pthread (zend_call_stack * stack )
290
298
{
291
299
return false;
292
300
}
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 ) */
294
302
295
303
static bool zend_call_stack_get_freebsd_sysctl (zend_call_stack * stack )
296
304
{
0 commit comments