diff options
| -rw-r--r-- | php-pecl-vld.spec | 67 | ||||
| -rw-r--r-- | vld-upstream.patch | 299 | 
2 files changed, 316 insertions, 50 deletions
diff --git a/php-pecl-vld.spec b/php-pecl-vld.spec index 3a2ed6c..54ea477 100644 --- a/php-pecl-vld.spec +++ b/php-pecl-vld.spec @@ -1,6 +1,6 @@  # remirepo spec file for php-pecl-vld  # -# Copyright (c) 2013-2023 Remi Collet +# Copyright (c) 2013-2024 Remi Collet  # License: CC-BY-SA-4.0  # http://creativecommons.org/licenses/by-sa/4.0/  # @@ -13,29 +13,21 @@  %global gh_short    %(c=%{gh_commit}; echo ${c:0:7})  %global gh_owner    derickr  %global gh_project  vld -#global gh_date     20180814  %global pecl_name   vld  %global with_zts    0%{!?_without_zts:%{?__ztsphp:1}}  %global ini_name    40-%{pecl_name}.ini -%if 0%{?gh_date:1} -%global sources     %{gh_project}-%{gh_commit} -%else  %global sources     %{pecl_name}-%{version} -%endif  %global _configure  ../%{sources}/configure  Summary:        Dump the internal representation of PHP scripts  Name:           %{?scl_prefix}php-pecl-%{pecl_name} -Version:        0.18.0 -%if 0%{?gh_date:1} -Release:        0.16.%{gh_date}.%{gh_short}%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} -Source0:        https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{pecl_name}-%{version}-%{gh_short}.tar.gz -%else -Release:        2%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')} -Source0:        https://pecl.php.net/get/%{sources}.tgz -%endif  License:        PHP-3.01 +Version:        0.18.0 +Release:        3%{?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 @@ -60,25 +52,18 @@ Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSIO  %prep  %setup -q -c -%if 0%{?gh_date:1} -%{__php} -r ' -  $pkg = simplexml_load_file("NTS/package.xml"); -  $pkg->date = substr("%{gh_date}",0,4)."-".substr("%{gh_date}",4,2)."-".substr("%{gh_date}",6,2); -  $pkg->version->release = "%{version}dev"; -  $pkg->stability->release = "devel"; -  $pkg->asXML("package.xml"); -' -%endif -%{?_licensedir:sed -e '/LICENSE/s/role="doc"/role="src"/' -i package.xml} +sed -e '/LICENSE/s/role="doc"/role="src"/' -i package.xml  pushd %{sources} -: Fix version -sed -e 's/"0.16.0"/"%{version}"/' -i vld.c +%patch -P0 -p1 + +#: Fix version +#sed -e 's/"0.16.0"/"%{version}"/' -i vld.c  : Check version -if ! grep -q '"%{version}%{?gh_date:-dev}"' vld.c; then -   : Error: Upstream extension version, expecting %{version}%{?gh_date:-dev}%{?prever:-%{prever}}. +if ! grep -q '"%{version}"' vld.c; then +   : Error: Upstream extension version, expecting %{version}.     exit 1  fi  popd @@ -147,27 +132,6 @@ cd %{sources}  for i in $(grep 'role="doc"' ../package.xml | sed -e 's/^.*name="//;s/".*$//')  do install -Dpm 644 $i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i  done -%{!?_licensedir:install -Dpm 644 LICENSE %{buildroot}%{pecl_docdir}/%{pecl_name}/LICENSE} - - -%if 0%{?fedora} < 24 && 0%{?rhel} < 8 -# when pear installed alone, after us -%triggerin -- %{?scl_prefix}php-pear -if [ -x %{__pecl} ] ; then -    %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : -fi - -# posttrans as pear can be installed after us -%posttrans -if [ -x %{__pecl} ] ; then -    %{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : -fi - -%postun -if [ $1 -eq 0 -a -x %{__pecl} ] ; then -    %{pecl_uninstall} %{pecl_name} >/dev/null || : -fi -%endif  %check @@ -185,7 +149,7 @@ fi  %files -%{?_licensedir:%license %{sources}/LICENSE} +%license %{sources}/LICENSE  %doc %{pecl_docdir}/%{pecl_name}  %{pecl_xmldir}/%{name}.xml @@ -199,6 +163,9 @@ fi  %changelog +* Fri Jul 12 2024 Remi Collet <remi@remirepo.net> - 0.18.0-3 +- add upstream patch for PHP 8.4 +  * Mon Sep  4 2023 Remi Collet <remi@remirepo.net> - 0.18.0-2  - build out of sources tree diff --git a/vld-upstream.patch b/vld-upstream.patch new file mode 100644 index 0000000..b57e4de --- /dev/null +++ b/vld-upstream.patch @@ -0,0 +1,299 @@ +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/5] 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.45.2 + +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/5] 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.45.2 + +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/5] 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.45.2 + +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/5] 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.45.2 + +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/5] 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.45.2 +  | 
