<pre style='margin:0'>
Ryan Carsten Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/f6c30c5b3a810d4154ab8c85bb23274baa020fe1">https://github.com/macports/macports-ports/commit/f6c30c5b3a810d4154ab8c85bb23274baa020fe1</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new f6c30c5b3a8 php73, php74, php80, php81: Fix crash on macOS 15
</span>f6c30c5b3a8 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit f6c30c5b3a810d4154ab8c85bb23274baa020fe1
</span>Author: Ryan Carsten Schmidt <ryandesign@macports.org>
AuthorDate: Thu Oct 10 19:10:00 2024 -0500
<span style='display:block; white-space:pre;color:#404040;'> php73, php74, php80, php81: Fix crash on macOS 15
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/70987
</span>---
lang/php/Portfile | 65 +++++++++-------
.../files/patch-php73-zend_string_equal_val.diff | 91 ++++++++++++++++++++++
.../files/patch-php74-zend_string_equal_val.diff | 91 ++++++++++++++++++++++
.../files/patch-php80-zend_string_equal_val.diff | 91 ++++++++++++++++++++++
.../files/patch-php81-zend_string_equal_val.diff | 91 ++++++++++++++++++++++
.../files/patch-php82-zend_string_equal_val.diff | 90 +++++++++++++++++++++
.../files/patch-php83-zend_string_equal_val.diff | 90 +++++++++++++++++++++
.../files/patch-php84-zend_string_equal_val.diff | 90 +++++++++++++++++++++
8 files changed, 671 insertions(+), 28 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/Portfile b/lang/php/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index be59adcf546..a89951a972b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/php/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -308,6 +308,10 @@ if {[is_sapi_subport]} {
</span> patch-${php}-libxml2-2.9.diff \
patch-${php}-pcre-8.30.diff
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[vercmp ${branch} >= 7.3] && [vercmp ${branch} < 8.5]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patch-${php}-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
# https://trac.macports.org/ticket/31590
# Tested all subports (except oracle) and they built with clang-425. The reported failure was with Xcode 4.2.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -467,13 +471,13 @@ subport ${php} {
</span> 7.0.33 {revision 7}
7.1.33 {revision 5}
7.2.34 {revision 6}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.3.33 {revision 3}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.4.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.0.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.1.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.2.24 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.3.12 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.4.0RC1 {revision 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.3.33 {revision 4}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.4.33 {revision 2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.0.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.1.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.2.24 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.3.12 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.4.0RC1 {revision 1}
</span> }
depends_run port:php_select
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -510,6 +514,11 @@ subport ${php} {
</span>
configure.args-replace --disable-cli --enable-cli
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Verify the executable works.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system -W ${worksrcpath} "sapi/cli/php -n -v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> destroot.target install-cli install-build install-headers install-programs
destroot.keepdirs ${destroot}${extraphpinidir}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -629,13 +638,13 @@ subport ${php}-apache2handler {
</span> 7.0.33 {revision 2}
7.1.33 {revision 2}
7.2.34 {revision 3}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.3.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.4.33 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.0.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.1.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.2.24 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.3.12 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.4.0RC1 {revision 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.3.33 {revision 2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.4.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.0.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.1.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.2.24 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.3.12 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.4.0RC1 {revision 1}
</span> }
description ${php} Apache 2 Handler SAPI
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -694,13 +703,13 @@ subport ${php}-cgi {
</span> 7.0.33 {revision 1}
7.1.33 {revision 1}
7.2.34 {revision 3}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.3.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.4.33 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.0.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.1.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.2.24 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.3.12 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.4.0RC1 {revision 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.3.33 {revision 2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.4.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.0.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.1.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.2.24 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.3.12 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.4.0RC1 {revision 1}
</span> }
description ${php} CGI SAPI
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -739,13 +748,13 @@ subport ${php}-fpm {
</span> 7.0.33 {revision 2}
7.1.33 {revision 2}
7.2.34 {revision 3}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.3.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 7.4.33 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.0.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.1.30 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.2.24 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.3.12 {revision 0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 8.4.0RC1 {revision 0}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.3.33 {revision 2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 7.4.33 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.0.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.1.30 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.2.24 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.3.12 {revision 1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8.4.0RC1 {revision 1}
</span> }
description ${php} FPM SAPI
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php73-zend_string_equal_val.diff b/lang/php/files/patch-php73-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ad8fb11f0de
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php73-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes crash on launch when compiled with Xcode 16 on macOS 15.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2021-11-16 05:18:41.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 19:08:05.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -342,32 +342,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -410,32 +410,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php74-zend_string_equal_val.diff b/lang/php/files/patch-php74-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f855e46d81a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php74-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes crash on launch when compiled with Xcode 16 on macOS 15.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2023-08-03 12:13:08.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 19:05:53.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -328,32 +328,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -396,32 +396,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php80-zend_string_equal_val.diff b/lang/php/files/patch-php80-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..f855e46d81a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php80-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes crash on launch when compiled with Xcode 16 on macOS 15.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2023-08-03 12:13:08.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 19:05:53.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -328,32 +328,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -396,32 +396,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php81-zend_string_equal_val.diff b/lang/php/files/patch-php81-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b00e041876a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php81-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes crash on launch when compiled with Xcode 16 on macOS 15.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2024-09-26 12:35:59.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 19:04:02.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -398,32 +398,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -436,32 +436,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (char*)s2 - (char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php82-zend_string_equal_val.diff b/lang/php/files/patch-php82-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..5820862b755
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php82-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,90 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2024-09-24 17:12:40.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 18:44:44.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -392,32 +392,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -430,32 +430,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php83-zend_string_equal_val.diff b/lang/php/files/patch-php83-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..729d59fb045
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php83-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,90 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2024-09-24 10:59:52.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 18:42:28.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -402,32 +402,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -440,32 +440,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/php/files/patch-php84-zend_string_equal_val.diff b/lang/php/files/patch-php84-zend_string_equal_val.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..729d59fb045
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/php/files/patch-php84-zend_string_equal_val.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,90 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Use local labels in assembly functions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/php/php-src/issues/16168#issuecomment-2404792553
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/Zend/zend_string.c.orig 2024-09-24 10:59:52.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Zend/zend_string.c 2024-10-10 18:42:28.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -402,32 +402,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addl $0x4, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subl $0x4, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movl $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpl $0x4,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorl %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negl %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x20(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shll %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbl %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -440,32 +440,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZEND_API zend_never_inline NOIPA bool ZEND_FASTCALL zend_string_equal_val(const zend_string *s1, const zend_string *s2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ptr = ZSTR_VAL(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- size_t delta = (const char*)s2 - (const char*)s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uintptr_t delta = (uintptr_t) s2 - (uintptr_t) s1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t len = ZSTR_LEN(s1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ zend_ulong ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __asm__ (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL0%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "0:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq (%2,%3), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq (%2), %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jne .LL1%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jne 1f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "addq $0x8, %2\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "subq $0x8, %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "ja .LL0%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ja 0b\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movq $0x1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL1%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "1:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "cmpq $0x8,%1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jb .LL2%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jb 2f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "xorq %0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- "jmp .LL3%=\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL2%=:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "jmp 3f\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "2:\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "negq %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "lea 0x40(,%1,8), %1\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "shlq %b1, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "sete %b0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "movzbq %b0, %0\n\t"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ".LL3%=:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "3:\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ : "=&a"(ret),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+c"(len),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "+r"(ptr)
</span></pre><pre style='margin:0'>
</pre>