File tree Expand file tree Collapse file tree 2 files changed +24
-4
lines changed Expand file tree Collapse file tree 2 files changed +24
-4
lines changed Original file line number Diff line number Diff line change @@ -146,7 +146,7 @@ _LT_AC_TRY_DLOPEN_SELF([
146146] )
147147
148148dnl Checks for library functions.
149- AC_CHECK_FUNCS ( getpid kill sigsetjmp pthread_getattr_np pthread_attr_get_np pthread_get_stackaddr_np pthread_attr_getstack pthread_stackseg_np gettid )
149+ AC_CHECK_FUNCS ( getpid kill sigsetjmp pthread_getattr_np pthread_attr_get_np pthread_get_stackaddr_np pthread_stackseg_np gettid )
150150
151151dnl Test whether the stack grows downwards
152152dnl Assumes contiguous stack
Original file line number Diff line number Diff line change @@ -95,6 +95,11 @@ ZEND_API void zend_call_stack_init(void) {
9595 }
9696}
9797
98+ #ifdef __GNUC__
99+ /* pthread_attr_getstackaddr/size is a deprecated interface */
100+ # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
101+ #endif
102+
98103#ifdef __linux__
99104static bool zend_call_stack_is_main_thread (void ) {
100105# ifdef HAVE_GETTID
@@ -121,7 +126,11 @@ static bool zend_call_stack_get_linux_pthread(zend_call_stack *stack)
121126 return false;
122127 }
123128
124- error = pthread_attr_getstack (& attr , & addr , & max_size );
129+ error = pthread_attr_getstackaddr (& attr , & addr );
130+ if (error ) {
131+ return false;
132+ }
133+ error = pthread_attr_getstacksize (& attr , & max_size );
125134 if (error ) {
126135 return false;
127136 }
@@ -270,10 +279,21 @@ static bool zend_call_stack_get_freebsd_pthread(zend_call_stack *stack)
270279 goto fail ;
271280 }
272281
273- error = pthread_attr_getstack (& attr , & addr , & max_size );
282+ error = pthread_attr_getstackaddr (& attr , & addr );
274283 if (error ) {
275- goto fail ;
284+ return false ;
276285 }
286+ error = pthread_attr_getstacksize (& attr , & max_size );
287+ if (error ) {
288+ return false;
289+ }
290+ error = pthread_attr_getguardsize (& attr , & guard_size );
291+ if (error ) {
292+ return false;
293+ }
294+
295+ addr = (char * )addr + guard_size ;
296+ max_size -= guard_size ;
277297
278298 stack -> base = (int8_t * )addr + max_size ;
279299 stack -> max_size = max_size ;
You can’t perform that action at this time.
0 commit comments