php-src/ext/opcache/zend_accelerator_util_funcs.h
Nikita Popov c19977d054 Fix delayed early binding with optimization
It's possible for delayed early binding opcodes to get optimized
away if they are "unreachable". However, we still need to attempt
early binding for them. (In some cases we also corrupt the early
binding list outright during optimization, which is how I got here.)

Fix this by storing information about delayed early binding
independently of DECLARE_CLASS_DELAYED opcodes, so early binding is
performed even after the opcode has been dropped.
2021-09-29 18:00:20 +02:00

45 lines
2.4 KiB
C

/*
+----------------------------------------------------------------------+
| Zend OPcache |
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@php.net> |
| Zeev Suraski <zeev@php.net> |
| Stanislav Malyshev <stas@zend.com> |
| Dmitry Stogov <dmitry@php.net> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_ACCELERATOR_UTIL_FUNCS_H
#define ZEND_ACCELERATOR_UTIL_FUNCS_H
#include "zend.h"
#include "ZendAccelerator.h"
zend_persistent_script* create_persistent_script(void);
void free_persistent_script(zend_persistent_script *persistent_script, int destroy_elements);
void zend_accel_move_user_functions(HashTable *str, uint32_t count, zend_script *script);
void zend_accel_move_user_classes(HashTable *str, uint32_t count, zend_script *script);
void zend_accel_build_delayed_early_binding_list(zend_persistent_script *persistent_script);
void zend_accel_finalize_delayed_early_binding_list(zend_persistent_script *persistent_script);
void zend_accel_free_delayed_early_binding_list(zend_persistent_script *persistent_script);
zend_op_array* zend_accel_load_script(zend_persistent_script *persistent_script, int from_shared_memory);
#define ADLER32_INIT 1 /* initial Adler-32 value */
unsigned int zend_adler32(unsigned int checksum, unsigned char *buf, uint32_t len);
unsigned int zend_accel_script_checksum(zend_persistent_script *persistent_script);
#endif /* ZEND_ACCELERATOR_UTIL_FUNCS_H */