diff options
| -rw-r--r-- | REFLECTION | 2 | ||||
| -rw-r--r-- | php-pecl-vld.spec | 34 | ||||
| -rw-r--r-- | vld-upstream.patch | 403 | 
3 files changed, 18 insertions, 421 deletions
@@ -1,4 +1,4 @@ -Extension [ <persistent> extension #125 vld version 0.18.0 ] { +Extension [ <persistent> extension #121 vld version 0.19.0 ] {    - INI {      Entry [ vld.active <SYSTEM> ] diff --git a/php-pecl-vld.spec b/php-pecl-vld.spec index c46fae0..10b5bc0 100644 --- a/php-pecl-vld.spec +++ b/php-pecl-vld.spec @@ -1,19 +1,17 @@  # remirepo spec file for php-pecl-vld  # -# Copyright (c) 2013-2024 Remi Collet -# License: CC-BY-SA-4.0 -# http://creativecommons.org/licenses/by-sa/4.0/ +# SPDX-FileCopyrightText:  Copyright 2013-2025 Remi Collet +# SPDX-License-Identifier: CECILL-2.1 +# http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt  #  # Please, preserve the changelog entries  #  %{?scl:%scl_package php-pecl-vld} -%global gh_commit   8146d47ed5883c0b7cb9c5ce980892ce286cd916 -%global gh_short    %(c=%{gh_commit}; echo ${c:0:7}) -%global gh_owner    derickr -%global gh_project  vld  %global pecl_name   vld +%global pie_vend    derickr +%global pie_proj    vld  %global with_zts    0%{!?_without_zts:%{?__ztsphp:1}}  %global ini_name    40-%{pecl_name}.ini  %global sources     %{pecl_name}-%{version} @@ -22,13 +20,11 @@  Summary:        Dump the internal representation of PHP scripts  Name:           %{?scl_prefix}php-pecl-%{pecl_name}  License:        PHP-3.01 -Version:        0.18.0 -Release:        6%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')} +Version:        0.19.0 +Release:        1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}  URL:            https://pecl.php.net/package/%{pecl_name}  Source0:        https://pecl.php.net/get/%{sources}.tgz -Patch0:         %{pecl_name}-upstream.patch -  BuildRequires:  make  BuildRequires:  %{?dtsprefix}gcc  BuildRequires:  %{?scl_prefix}php-devel >= 7.0 @@ -37,10 +33,12 @@ BuildRequires:  %{?scl_prefix}php-pear  Requires:       %{?scl_prefix}php(zend-abi) = %{php_zend_api}  Requires:       %{?scl_prefix}php(api) = %{php_core_api} -Provides:       %{?scl_prefix}php-%{pecl_name}               = %{version} -Provides:       %{?scl_prefix}php-%{pecl_name}%{?_isa}       = %{version} -Provides:       %{?scl_prefix}php-pecl(%{pecl_name})         = %{version} -Provides:       %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} +Provides:       %{?scl_prefix}php-%{pecl_name}                 = %{version} +Provides:       %{?scl_prefix}php-%{pecl_name}%{?_isa}         = %{version} +Provides:       %{?scl_prefix}php-pecl(%{pecl_name})           = %{version} +Provides:       %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa}   = %{version} +Provides:       %{?scl_prefix}php-pie(%{pie_vend}/%{pie_proj}) = %{version} +Provides:       %{?scl_prefix}php-%{pie_vend}-%{pie_proj}      = %{version}  %description @@ -56,8 +54,6 @@ Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSIO  sed -e '/LICENSE/s/role="doc"/role="src"/' -i package.xml  pushd %{sources} -%patch -P0 -p1 -  #: Fix version  #sed -e 's/"0.16.0"/"%{version}"/' -i vld.c @@ -165,6 +161,10 @@ done  %changelog +* Wed Jul  2 2025 Remi Collet <remi@remirepo.net> - 0.19.0-1 +- update to 0.19.0 +- re-license spec file to CECILL-2.1 +  * Tue Sep 24 2024 Remi Collet <remi@remirepo.net> - 0.18.0-6  - rebuild for 8.4.0RC1 diff --git a/vld-upstream.patch b/vld-upstream.patch deleted file mode 100644 index 5764235..0000000 --- a/vld-upstream.patch +++ /dev/null @@ -1,403 +0,0 @@ -From 850d2d82c293e52cf0ef57e6cc762617fcc09979 Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Mon, 10 Oct 2022 16:47:13 +0100 -Subject: [PATCH 1/6] Fixed crash with CATCH on PHP 8.2 with 32-bit - ---- - branchinfo.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/branchinfo.c b/branchinfo.c -index 3547c1b..bddd9ff 100644 ---- a/branchinfo.c -+++ b/branchinfo.c -@@ -113,7 +113,11 @@ void vld_branch_post_process(zend_op_array *opa, vld_branch_info *branch_info) - 		if (vld_set_in(branch_info->entry_points, i) && opa->opcodes[i].opcode == ZEND_CATCH) { - #if PHP_VERSION_ID >= 70300 - # if ZEND_USE_ABS_JMP_ADDR -+#  if PHP_VERSION_ID >= 80200 -+			if (opa->opcodes[i].op2.jmp_addr != -1) { -+#  else - 			if (opa->opcodes[i].op2.jmp_addr != NULL) { -+# endif - # else - 			if (opa->opcodes[i].op2.jmp_offset != 0) { - # endif -@@ -264,9 +268,9 @@ void vld_branch_info_dump(zend_op_array *opa, vld_branch_info *branch_info) - 		for (i = 0; i < branch_info->starts->size; i++) { - 			if (vld_set_in(branch_info->starts, i)) { - 				fprintf( --					VLD_G(path_dump_file),  --					"\t\"%s_%d\" [ label = \"{ op #%d-%d | line %d-%d }\" ];\n",  --					fname, i, i,  -+					VLD_G(path_dump_file), -+					"\t\"%s_%d\" [ label = \"{ op #%d-%d | line %d-%d }\" ];\n", -+					fname, i, i, - 					branch_info->branches[i].end_op, - 					branch_info->branches[i].start_lineno, - 					branch_info->branches[i].end_lineno ---  -2.46.0 - -From 298cea2f3880cdc775fddbdb4fcb334e1f19bfc5 Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Fri, 16 Dec 2022 10:27:40 +0000 -Subject: [PATCH 2/6] Fixed showing the JMP for the 'default' (or error) case - in MATCH instructions - ---- - srm_oparray.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/srm_oparray.c b/srm_oparray.c -index 9fc75d4..54661c3 100644 ---- a/srm_oparray.c -+++ b/srm_oparray.c -@@ -341,7 +341,7 @@ static const op_usage opcodes[] = { - # if PHP_VERSION_ID >= 70400 - 	/*  194 */	{ "ARRAY_KEY_EXISTS", ALL_USED }, - #  if PHP_VERSION_ID >= 80000 --	/*  195 */	{ "MATCH", ALL_USED | OP2_JMP_ARRAY }, -+	/*  195 */	{ "MATCH", ALL_USED | OP2_JMP_ARRAY | EXT_VAL_JMP_REL }, - 	/*  196 */	{ "CASE_STRICT", ALL_USED }, - 	/*  197 */	{ "MATCH_ERROR", ALL_USED }, - 	/*  198 */	{ "JMP_NULL", ALL_USED }, ---  -2.46.0 - -From 7d25f1e5949935aa153b37d6bdaf19cf8079772a Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Tue, 28 May 2024 15:09:58 +0100 -Subject: [PATCH 3/6] RECV uses OP2_OPNUM too - ---- - srm_oparray.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/srm_oparray.c b/srm_oparray.c -index 54661c3..1df6f06 100644 ---- a/srm_oparray.c -+++ b/srm_oparray.c -@@ -145,7 +145,7 @@ static const op_usage opcodes[] = { - 	/*  60 */	{ "DO_FCALL", SPECIAL }, - 	/*  61 */	{ "INIT_FCALL", ALL_USED }, - 	/*  62 */	{ "RETURN", OP1_USED }, --	/*  63 */	{ "RECV", RES_USED | OP1_USED }, -+	/*  63 */	{ "RECV", RES_USED | OP1_USED | OP2_OPNUM }, - 	/*  64 */	{ "RECV_INIT", ALL_USED }, - 	/*  65 */	{ "SEND_VAL", OP1_USED }, - 	/*  66 */	{ "SEND_VAR_EX", ALL_USED }, -@@ -649,6 +649,9 @@ static unsigned int vld_get_special_flags(const zend_op *op, unsigned int base_a - 			} - #endif - 			break; -+		case ZEND_RECV: -+			flags = OP1_USED|OP2_USED|OP2_OPNUM; -+			break; - 	} - 	return flags; - } ---  -2.46.0 - -From d7abb0c5ebda8277cda4be37a92d55e29ab5b503 Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Tue, 28 May 2024 15:11:24 +0100 -Subject: [PATCH 4/6] PHP_CHECK_GCC_ARG is now AX_CHECK_COMPILE_FLAG - ---- - config.m4 | 72 +++++++++++++++++++++++++++---------------------------- - 1 file changed, 36 insertions(+), 36 deletions(-) - -diff --git a/config.m4 b/config.m4 -index 54b914d..18cfa7d 100644 ---- a/config.m4 -+++ b/config.m4 -@@ -20,42 +20,42 @@ if test "$PHP_VLD" != "no"; then -   CPPFLAGS=$old_CPPFLAGS -  -   if test "$PHP_VLD_DEV" = "yes"; then --    PHP_CHECK_GCC_ARG(-Wbool-conversion,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wbool-conversion") --    PHP_CHECK_GCC_ARG(-Wdeclaration-after-statement,    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wdeclaration-after-statement") --    PHP_CHECK_GCC_ARG(-Wdiscarded-qualifiers,           _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wdiscarded-qualifiers") --    PHP_CHECK_GCC_ARG(-Wduplicate-enum,                 _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wduplicate-enum") --    PHP_CHECK_GCC_ARG(-Wempty-body,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wempty-body") --    PHP_CHECK_GCC_ARG(-Wenum-compare,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wenum-compare") --    PHP_CHECK_GCC_ARG(-Werror,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Werror") --    PHP_CHECK_GCC_ARG(-Wextra,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wextra") --    PHP_CHECK_GCC_ARG(-Wformat-nonliteral,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-nonliteral") --    PHP_CHECK_GCC_ARG(-Wformat-security,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-security") --    PHP_CHECK_GCC_ARG(-Wheader-guard,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wheader-guard") --    PHP_CHECK_GCC_ARG(-Wincompatible-pointer-types-discards-qualifiers, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wincompatible-pointer-types-discards-qualifiers") --    PHP_CHECK_GCC_ARG(-Wimplicit-fallthrough,           _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wimplicit-fallthrough") --    PHP_CHECK_GCC_ARG(-Winit-self,                      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Winit-self") --    PHP_CHECK_GCC_ARG(-Wlogical-not-parentheses,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-not-parentheses") --    PHP_CHECK_GCC_ARG(-Wlogical-op,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op") --    PHP_CHECK_GCC_ARG(-Wlogical-op-parentheses,         _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op-parentheses") --    PHP_CHECK_GCC_ARG(-Wloop-analysis,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wloop-analysis") --    PHP_CHECK_GCC_ARG(-Wmaybe-uninitialized,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmaybe-uninitialized") --    PHP_CHECK_GCC_ARG(-Wmissing-format-attribute,       _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmissing-format-attribute") --    PHP_CHECK_GCC_ARG(-Wno-missing-field-initializers,  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-missing-field-initializers") --    PHP_CHECK_GCC_ARG(-Wno-sign-compare,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-sign-compare") --    PHP_CHECK_GCC_ARG(-Wno-unused-but-set-variable,     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-but-set-variable") --    PHP_CHECK_GCC_ARG(-Wno-unused-parameter,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-parameter") --    PHP_CHECK_GCC_ARG(-Wno-variadic-macros,             _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-variadic-macros") --    PHP_CHECK_GCC_ARG(-Wparentheses,                    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wparentheses") --    PHP_CHECK_GCC_ARG(-Wpointer-bool-conversion,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wpointer-bool-conversion") --    PHP_CHECK_GCC_ARG(-Wsizeof-array-argument,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wsizeof-array-argument") --    PHP_CHECK_GCC_ARG(-Wstring-conversion,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wstring-conversion") --    PHP_CHECK_GCC_ARG(-Wwrite-strings,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wwrite-strings") --    PHP_CHECK_GCC_ARG(-fdiagnostics-show-option,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fdiagnostics-show-option") --    PHP_CHECK_GCC_ARG(-fno-exceptions,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-exceptions") --    PHP_CHECK_GCC_ARG(-fno-omit-frame-pointer,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-omit-frame-pointer") --    PHP_CHECK_GCC_ARG(-fno-optimize-sibling-calls,      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-optimize-sibling-calls") --    PHP_CHECK_GCC_ARG(-fsanitize-address,               _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fsanitize-address") --    PHP_CHECK_GCC_ARG(-fstack-protector,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fstack-protector") -+    AX_CHECK_COMPILE_FLAG(-Wbool-conversion,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wbool-conversion") -+    AX_CHECK_COMPILE_FLAG(-Wdeclaration-after-statement,    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wdeclaration-after-statement") -+    AX_CHECK_COMPILE_FLAG(-Wdiscarded-qualifiers,           _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wdiscarded-qualifiers") -+    AX_CHECK_COMPILE_FLAG(-Wduplicate-enum,                 _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wduplicate-enum") -+    AX_CHECK_COMPILE_FLAG(-Wempty-body,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wempty-body") -+    AX_CHECK_COMPILE_FLAG(-Wenum-compare,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wenum-compare") -+    AX_CHECK_COMPILE_FLAG(-Werror,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Werror") -+    AX_CHECK_COMPILE_FLAG(-Wextra,                          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wextra") -+    AX_CHECK_COMPILE_FLAG(-Wformat-nonliteral,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-nonliteral") -+    AX_CHECK_COMPILE_FLAG(-Wformat-security,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wformat-security") -+    AX_CHECK_COMPILE_FLAG(-Wheader-guard,                   _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wheader-guard") -+    AX_CHECK_COMPILE_FLAG(-Wincompatible-pointer-types-discards-qualifiers, _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wincompatible-pointer-types-discards-qualifiers") -+    AX_CHECK_COMPILE_FLAG(-Wimplicit-fallthrough,           _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wimplicit-fallthrough") -+    AX_CHECK_COMPILE_FLAG(-Winit-self,                      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Winit-self") -+    AX_CHECK_COMPILE_FLAG(-Wlogical-not-parentheses,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-not-parentheses") -+    AX_CHECK_COMPILE_FLAG(-Wlogical-op,                     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op") -+    AX_CHECK_COMPILE_FLAG(-Wlogical-op-parentheses,         _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wlogical-op-parentheses") -+    AX_CHECK_COMPILE_FLAG(-Wloop-analysis,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wloop-analysis") -+    AX_CHECK_COMPILE_FLAG(-Wmaybe-uninitialized,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmaybe-uninitialized") -+    AX_CHECK_COMPILE_FLAG(-Wmissing-format-attribute,       _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wmissing-format-attribute") -+    AX_CHECK_COMPILE_FLAG(-Wno-missing-field-initializers,  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-missing-field-initializers") -+    AX_CHECK_COMPILE_FLAG(-Wno-sign-compare,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-sign-compare") -+    AX_CHECK_COMPILE_FLAG(-Wno-unused-but-set-variable,     _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-but-set-variable") -+    AX_CHECK_COMPILE_FLAG(-Wno-unused-parameter,            _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-unused-parameter") -+    AX_CHECK_COMPILE_FLAG(-Wno-variadic-macros,             _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wno-variadic-macros") -+    AX_CHECK_COMPILE_FLAG(-Wparentheses,                    _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wparentheses") -+    AX_CHECK_COMPILE_FLAG(-Wpointer-bool-conversion,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wpointer-bool-conversion") -+    AX_CHECK_COMPILE_FLAG(-Wsizeof-array-argument,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wsizeof-array-argument") -+    AX_CHECK_COMPILE_FLAG(-Wstring-conversion,              _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wstring-conversion") -+    AX_CHECK_COMPILE_FLAG(-Wwrite-strings,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -Wwrite-strings") -+    AX_CHECK_COMPILE_FLAG(-fdiagnostics-show-option,        _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fdiagnostics-show-option") -+    AX_CHECK_COMPILE_FLAG(-fno-exceptions,                  _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-exceptions") -+    AX_CHECK_COMPILE_FLAG(-fno-omit-frame-pointer,          _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-omit-frame-pointer") -+    AX_CHECK_COMPILE_FLAG(-fno-optimize-sibling-calls,      _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fno-optimize-sibling-calls") -+    AX_CHECK_COMPILE_FLAG(-fsanitize-address,               _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fsanitize-address") -+    AX_CHECK_COMPILE_FLAG(-fstack-protector,                _MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS -fstack-protector") -  -     MAINTAINER_CFLAGS="$_MAINTAINER_CFLAGS" -     STD_CFLAGS="-g -O0 -Wall" ---  -2.46.0 - -From df1c52c4cb62e5ff31e1b72e3f11df9a45ee567a Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Wed, 26 Jun 2024 16:58:42 +0100 -Subject: [PATCH 5/6] Add support for PHP 8.4 opcodes ZEND_JMP_FRAMELESS and - ZEND_FRAMELESS_ICALL_[0-3] - ---- - srm_oparray.c           | 29 +++++++++++++++++++++++++++++ - srm_oparray.h           |  2 ++ - tests/jmp_frameless.inc |  6 ++++++ - 3 files changed, 37 insertions(+) - create mode 100644 tests/jmp_frameless.inc - -diff --git a/srm_oparray.c b/srm_oparray.c -index 1df6f06..3bd6dce 100644 ---- a/srm_oparray.c -+++ b/srm_oparray.c -@@ -350,6 +350,16 @@ static const op_usage opcodes[] = { - 	/*  200 */	{ "FETCH_GLOBALS", ALL_USED }, - 	/*  201 */	{ "VERIFY_NEVER_TYPE", ALL_USED }, - 	/*  202 */	{ "ZEND_CALLABLE_CONVERT", ALL_USED }, -+#    if PHP_VERSION_ID >= 80300 -+	/*  203 */  { "ZEND_BIND_INIT_STATIC_OR_JMP", ALL_USED }, -+#     if PHP_VERSION_ID >= 80400 -+	/*  204 */  { "ZEND_FRAMELESS_ICALL_0", ALL_USED | EXT_VAL_FLF }, -+	/*  205 */  { "ZEND_FRAMELESS_ICALL_1", ALL_USED | EXT_VAL_FLF }, -+	/*  206 */  { "ZEND_FRAMELESS_ICALL_2", ALL_USED | EXT_VAL_FLF }, -+	/*  207 */  { "ZEND_FRAMELESS_ICALL_3", ALL_USED | EXT_VAL_FLF }, -+	/*  208 */  { "ZEND_JMP_FRAMELESS", ALL_USED | EXT_CACHED_PTR | OP2_OPNUM }, -+#     endif -+#    endif - #   endif - #  endif - # else -@@ -814,6 +824,12 @@ void vld_dump_op(int nr, zend_op * op_ptr, unsigned int base_address, int notdea - 		last_lineno = op.lineno; - 	} -  -+#if PHP_VERSION_ID >= 80400 -+	if (flags & EXT_VAL_FLF) { -+		fetch_type = (char*) ZEND_FLF_FUNC(&op)->common.function_name->val; -+	} -+#endif -+ - 	if (op.opcode >= NUM_KNOWN_OPCODES) { - 		if (VLD_G(format)) { - 			vld_printf(stderr, "%5d %s %c %c %c %c %s <%03d>%-23s %s %-14s ", nr, VLD_G(col_sep), notdead ? ' ' : '*', entry ? 'E' : ' ', start ? '>' : ' ', end ? '>' : ' ', VLD_G(col_sep), op.opcode, VLD_G(col_sep), fetch_type); -@@ -834,6 +850,11 @@ void vld_dump_op(int nr, zend_op * op_ptr, unsigned int base_address, int notdea - 		} - 	} -  -+#if PHP_VERSION_ID >= 80400 -+	if (flags & EXT_CACHED_PTR) { -+		vld_printf(stderr, "s%-3d ", op.extended_value); -+	} else -+#endif - 	if (flags & EXT_VAL) { - #if PHP_VERSION_ID >= 70300 - 		if (op.opcode == ZEND_CATCH) { -@@ -1085,6 +1106,14 @@ int vld_find_jumps(zend_op_array *opa, unsigned int position, size_t *jump_count - 		*jump_count = 1; - 		return 1; -  -+#if PHP_VERSION_ID >= 80400 -+	} else if (opcode.opcode == ZEND_JMP_FRAMELESS) { -+		jumps[0] = VLD_ZNODE_JMP_LINE(opcode.op2, position, base_address); -+		jumps[1] = position + 1; -+		*jump_count = 2; -+		return 1; -+#endif -+ - 	} else if ( - 		opcode.opcode == ZEND_GENERATOR_RETURN || - 		opcode.opcode == ZEND_EXIT || -diff --git a/srm_oparray.h b/srm_oparray.h -index 7cc0803..ee65c25 100644 ---- a/srm_oparray.h -+++ b/srm_oparray.h -@@ -57,6 +57,8 @@ - #define EXT_VAL_JMP_ABS   1<<25 - #define VLD_IS_JMP_ARRAY  1<<26 - #define VLD_IS_INDEX      1<<27 -+#define EXT_VAL_FLF       1<<28 -+#define EXT_CACHED_PTR    1<<29 -  - typedef struct _op_usage { - 	const char  *name; -diff --git a/tests/jmp_frameless.inc b/tests/jmp_frameless.inc -new file mode 100644 -index 0000000..f693565 ---- /dev/null -+++ b/tests/jmp_frameless.inc -@@ -0,0 +1,6 @@ -+<?php -+namespace Foo { -+ -+echo substr("Derick Cool?", 7); -+ -+} ---  -2.46.0 - -From dc56f73a25b0230745afb5523871f2e8dd33fccd Mon Sep 17 00:00:00 2001 -From: Derick Rethans <github@derickrethans.nl> -Date: Thu, 22 Aug 2024 14:00:23 +0100 -Subject: [PATCH 6/6] PHP 8.4: Support for opcode-less exit - -Copied over from the Xdebug implementation. - -Fixes #83: minimal fix for 8.4.0beta3 ---- - srm_oparray.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 48 insertions(+), 2 deletions(-) - -diff --git a/srm_oparray.c b/srm_oparray.c -index 3bd6dce..2669697 100644 ---- a/srm_oparray.c -+++ b/srm_oparray.c -@@ -1108,15 +1108,17 @@ int vld_find_jumps(zend_op_array *opa, unsigned int position, size_t *jump_count -  - #if PHP_VERSION_ID >= 80400 - 	} else if (opcode.opcode == ZEND_JMP_FRAMELESS) { --		jumps[0] = VLD_ZNODE_JMP_LINE(opcode.op2, position, base_address); --		jumps[1] = position + 1; -+		jumps[0] = position + 1; -+		jumps[1] = VLD_ZNODE_JMP_LINE(opcode.op2, position, base_address); - 		*jump_count = 2; - 		return 1; - #endif -  - 	} else if ( - 		opcode.opcode == ZEND_GENERATOR_RETURN || -+#if PHP_VERSION_ID < 80400 - 		opcode.opcode == ZEND_EXIT || -+#endif - 		opcode.opcode == ZEND_THROW || - #if PHP_VERSION_ID >= 80000 - 		opcode.opcode == ZEND_MATCH_ERROR || -@@ -1126,6 +1128,48 @@ int vld_find_jumps(zend_op_array *opa, unsigned int position, size_t *jump_count - 		jumps[0] = VLD_JMP_EXIT; - 		*jump_count = 1; - 		return 1; -+	} else if ( -+		opcode.opcode == ZEND_INIT_FCALL -+	) { -+		zval *func_name = RT_CONSTANT(&opa->opcodes[position], opcode.op2); -+		if (zend_string_equals_literal(Z_PTR_P(func_name), "exit")) { -+			int level = 0; -+			uint32_t start = position + 1; -+ -+			for (;;) { -+				switch (opa->opcodes[start].opcode) { -+					case ZEND_INIT_FCALL: -+					case ZEND_INIT_FCALL_BY_NAME: -+					case ZEND_INIT_NS_FCALL_BY_NAME: -+					case ZEND_INIT_DYNAMIC_CALL: -+					case ZEND_INIT_USER_CALL: -+					case ZEND_INIT_METHOD_CALL: -+					case ZEND_INIT_STATIC_METHOD_CALL: -+#if PHP_VERSION_ID >= 80400 -+					case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL: -+#endif -+					case ZEND_NEW: -+						level++; -+						break; -+					case ZEND_DO_FCALL: -+					case ZEND_DO_FCALL_BY_NAME: -+					case ZEND_DO_ICALL: -+					case ZEND_DO_UCALL: -+						if (level == 0) { -+							goto done; -+						} -+						level--; -+						break; -+				} -+				start++; -+			} -+ done: -+			ZEND_ASSERT(opa->opcodes[start].opcode == ZEND_DO_ICALL); -+			jumps[0] = VLD_JMP_EXIT; -+			*jump_count = 1; -+			return 1; -+		} -+ - #if PHP_VERSION_ID >= 70200 - 	} else if ( - # if PHP_VERSION_ID >= 80000 -@@ -1265,6 +1309,7 @@ void vld_analyse_branch(zend_op_array *opa, unsigned int position, vld_set *set, - 			break; - 		} -  -+#if PHP_VERSION_ID < 80400 - 		/* See if we have an exit instruction */ - 		if (opa->opcodes[position].opcode == ZEND_EXIT) { - 			VLD_PRINT(1, "Exit found\n"); -@@ -1272,6 +1317,7 @@ void vld_analyse_branch(zend_op_array *opa, unsigned int position, vld_set *set, - 			branch_info->branches[position].start_lineno = opa->opcodes[position].lineno; - 			break; - 		} -+#endif - 		/* See if we have a return instruction */ - 		if ( - 			opa->opcodes[position].opcode == ZEND_RETURN ---  -2.46.0 -  | 
