<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>