Skip to content

Commit

Permalink
zend call stack fixing stack limit for macOs arm64.
Browse files Browse the repository at this point in the history
8MB sounded a prudent size for older 10.9 macOs release, however
with newer mac with arm64, it triggers a stack overflow.

close GH-13319
  • Loading branch information
devnexen committed Feb 5, 2024
1 parent ce2d263 commit b320aab
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 3 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ PHP NEWS
. Fixed bug GH-13178 (Iterator positions incorrect when converting packed
array to hashed). (ilutov)
. Fixed zend fiber build for solaris default mode (32 bits). (David Carlier)
. Fixed zend call stack size for macOs/arm64. (David Carlier)

- Curl:
. Deprecated the CURLOPT_BINARYTRANSFER constant. (divinity76)
Expand Down
5 changes: 4 additions & 1 deletion Zend/tests/stack_limit/stack_limit_010.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ $stack = zend_test_zend_call_stack_get();
var_dump($stack);

$expectedMaxSize = match(php_uname('s')) {
'Darwin' => 8*1024*1024,
'Darwin' => match(php_uname('m')) {
'x86_64' => 8*1024*1024,
'arm64' => 8372224,
},
'FreeBSD' => match(php_uname('m')) {
'amd64' => 512*1024*1024 - 4096,
'i386' => 64*1024*1024 - 4096,
Expand Down
9 changes: 7 additions & 2 deletions Zend/zend_call_stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,9 @@ static bool zend_call_stack_get_macos(zend_call_stack *stack)
void *base = pthread_get_stackaddr_np(pthread_self());
size_t max_size;

if (pthread_main_np()) {
#if !defined(__aarch64__)
if (pthread_main_np())
{
/* pthread_get_stacksize_np() returns a too low value for the main
* thread in OSX 10.9, 10.10:
* https://mail.openjdk.org/pipermail/hotspot-dev/2013-October/011353.html
Expand All @@ -437,7 +439,10 @@ static bool zend_call_stack_get_macos(zend_call_stack *stack)
/* Stack size is 8MiB by default for main threads
* https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html */
max_size = 8 * 1024 * 1024;
} else {
}
else
#endif
{
max_size = pthread_get_stacksize_np(pthread_self());
}

Expand Down

0 comments on commit b320aab

Please sign in to comment.