Commit 17877656962 for php.net
commit 178776569620b64cee308211dd4329e8f08d7e76
Author: David Carlier <devnexen@gmail.com>
Date: Sat Nov 22 11:05:39 2025 +0000
Fix GH-20546: Zend preserve_none attribute config check on macOs issue.
This attribute fails on macOs due to the inline assembly test.
Due to an old Darwin C ABI convention, symbols are prefixed with an
underscore so we need to take in account also for x86_64.
close GH-20559
diff --git a/NEWS b/NEWS
index b6efe0d85e5..cf93f7af656 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ PHP NEWS
. Sync all boost.context files with release 1.86.0. (mvorisek)
. Fixed bug GH-20435 (SensitiveParameter doesn't work for named argument
passing to variadic parameter). (ndossche)
+ . Fixed bug GH-20546 (preserve_none attribute configure check on macOs
+ issue). (David Carlier/cho-m)
- Bz2:
. Fix assertion failures resulting in crashes with stream filter
diff --git a/Zend/Zend.m4 b/Zend/Zend.m4
index 1e1853167cf..33009e9909f 100644
--- a/Zend/Zend.m4
+++ b/Zend/Zend.m4
@@ -474,7 +474,7 @@ dnl expectations.
dnl
AC_DEFUN([ZEND_CHECK_PRESERVE_NONE], [dnl
AC_CACHE_CHECK([for preserve_none calling convention],
- [php_cv_preverve_none],
+ [php_cv_preserve_none],
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdint.h>
@@ -504,7 +504,11 @@ uintptr_t __attribute__((preserve_none)) test(void) {
"movq %2, %%r13\n"
"xorq %3, %%r13\n"
"xorq %%rax, %%rax\n"
+#if defined(__APPLE__)
+ "call _fun\n"
+#else
"call fun\n"
+#endif
: "=a" (ret)
: "r" (const1), "r" (const2), "r" (key)
: "r12", "r13"
@@ -515,7 +519,11 @@ uintptr_t __attribute__((preserve_none)) test(void) {
"eor x20, %1, %3\n"
"eor x21, %2, %3\n"
"eor x0, x0, x0\n"
+#if defined(__APPLE__)
+ "bl _fun\n"
+#else
"bl fun\n"
+#endif
"mov %0, x0\n"
: "=r" (ret)
: "r" (const1), "r" (const2), "r" (key)