1
0
Fork 0

add support for PHP_5_5

git-svn-id: svn://svn.lighttpd.net/xcache/trunk@1213 c26eb9a1-5813-0410-bd6c-c2e55f420ca7
This commit is contained in:
Xuefer 2012-12-19 08:42:53 +00:00
parent b31e2b14cd
commit 0f53de0a19
10 changed files with 250 additions and 8 deletions

View File

@ -1,3 +1,8 @@
3.1.0 2012-??-??
ChangeLog
========
* adds support for PHP_5_5
3.0.1 2012-??-??
ChangeLog
========

5
NEWS
View File

@ -1,5 +1,8 @@
3.1.1 2012-??-??
========
* adds support for PHP_5_5
3.0.1 2012-??-??
ChangeLog
========
* bug fixes
* improve compatibility with "the ionCube PHP Loader", Zend Optimizer

View File

@ -20,8 +20,10 @@ xc_const_string: \
xcache/xc_const_string_opcodes_php4.x.h \
xcache/xc_const_string_opcodes_php5.0.h \
xcache/xc_const_string_opcodes_php5.1.h \
xcache/xc_const_string_opcodes_php5.2.h \
xcache/xc_const_string_opcodes_php5.3.h \
xcache/xc_const_string_opcodes_php5.4.h \
xcache/xc_const_string_opcodes_php5.5.h \
xcache/xc_const_string_opcodes_php6.x.h
ifeq (${EA_DIR},)
@ -60,6 +62,15 @@ xcache/xc_const_string_opcodes_php5.1.h: ${PHP5_1_DIR}/Zend/zend_vm_def.h
mv "$@.tmp" "$@"
endif
ifeq (${PHP5_2_DIR},)
xcache/xc_const_string_opcodes_php5.2.h: dummy
@echo "Skipped $@: PHP_5_2_DIR not set"
else
xcache/xc_const_string_opcodes_php5.2.h: ${PHP5_2_DIR}/Zend/zend_vm_def.h
$(AWK) -f ./devel/gen_const_string_opcodes.awk < "$<" > "$@.tmp"
mv "$@.tmp" "$@"
endif
ifeq (${PHP5_3_DIR},)
xcache/xc_const_string_opcodes_php5.3.h: dummy
@echo "Skipped $@: PHP_5_3_DIR not set"
@ -78,6 +89,15 @@ xcache/xc_const_string_opcodes_php5.4.h: ${PHP5_4_DIR}/Zend/zend_vm_def.h
mv "$@.tmp" "$@"
endif
ifeq (${PHP5_5_DIR},)
xcache/xc_const_string_opcodes_php5.5.h: dummy
@echo "Skipped $@: PHP_5_5_DIR not set"
else
xcache/xc_const_string_opcodes_php5.5.h: ${PHP5_5_DIR}/Zend/zend_vm_def.h
$(AWK) -f ./devel/gen_const_string_opcodes.awk < "$<" > "$@.tmp"
mv "$@.tmp" "$@"
endif
ifeq (${PHP6_x_DIR},)
xcache/xc_const_string_opcodes_php6.x.h: dummy
@echo "Skipped $@: PHP_6_x_DIR not set"

View File

@ -164,10 +164,22 @@ static int op_get_flowinfo(op_flowinfo_t *fi, zend_op *opline) /* {{{ */
case ZEND_HANDLE_EXCEPTION:
#endif
case ZEND_RETURN:
#ifdef ZEND_FAST_RET
case ZEND_FAST_RET:
#endif
#ifdef ZEND_GENERATOR_RETURN
case ZEND_GENERATOR_RETURN:
#endif
case ZEND_EXIT:
return SUCCESS; /* no fall */
#ifdef ZEND_GOTO
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
fi->jmpout_op1 = Z_OP(opline->op1).opline_num;
return SUCCESS; /* no fall */

View File

@ -48,6 +48,10 @@ dnl }}}
DEF_STRUCT_P_FUNC(`zend_try_catch_element', , `dnl {{{
PROCESS(zend_uint, try_op)
PROCESS(zend_uint, catch_op)
#ifdef ZEND_ENGINE_2_5
PROCESS(zend_uint, finally_op)
PROCESS(zend_uint, finally_end)
#endif
')
dnl }}}
#endif
@ -653,6 +657,9 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
#ifdef ZEND_ENGINE_2
assert(Z_OP(src->op1).jmp_addr >= processor->active_op_array_src->opcodes && Z_OP(src->op1).jmp_addr - processor->active_op_array_src->opcodes < processor->active_op_array_src->last);
Z_OP(dst->op1).jmp_addr = processor->active_op_array_dst->opcodes + (Z_OP(src->op1).jmp_addr - processor->active_op_array_src->opcodes);
@ -761,6 +768,9 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
#ifdef ZEND_ENGINE_2
Z_OP(opline->op1).jmp_addr = &dst->opcodes[Z_OP(opline->op1).jmp_addr - src->opcodes];
#endif
@ -873,6 +883,11 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
PROCESS(zend_uint, T)
#ifdef ZEND_ENGINE_2_4
PROCESS(zend_uint, nested_calls)
PROCESS(zend_uint, used_stack)
#endif
STRUCT_ARRAY(last_brk_cont_t, last_brk_cont, zend_brk_cont_element, brk_cont_array)
PROCESS(last_brk_cont_t, last_brk_cont)
#ifndef ZEND_ENGINE_2_4
@ -886,6 +901,9 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
STRUCT_ARRAY(int, last_try_catch, zend_try_catch_element, try_catch_array)
PROCESS(int, last_try_catch)
#endif
#ifdef ZEND_ENGINE_2_5
PROCESS(zend_bool, has_finally_block)
#endif
STRUCT_P(HashTable, static_variables, HashTable_zval_ptr)

View File

@ -10,7 +10,10 @@
/* Purpose: Privode stuffs for compatibility with different PHP version
*/
#if !defined(ZEND_ENGINE_2_4) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 4 || PHP_MAJOR_VERSION > 5)
#if !defined(ZEND_ENGINE_2_5) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 5 || PHP_MAJOR_VERSION > 6)
# define ZEND_ENGINE_2_5
#endif
#if !defined(ZEND_ENGINE_2_4) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 4 || defined(ZEND_ENGINE_2_5))
# define ZEND_ENGINE_2_4
#endif
#if !defined(ZEND_ENGINE_2_3) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 3 || defined(ZEND_ENGINE_2_4))

View File

@ -63,6 +63,8 @@ const char *xc_get_data_type(zend_uchar data_type)
/* {{{ xc_get_opcode */
#if PHP_MAJOR_VERSION >= 6
# include "xc_const_string_opcodes_php6.x.h"
#elif defined(ZEND_ENGINE_2_5)
# include "xc_const_string_opcodes_php5.5.h"
#elif defined(ZEND_ENGINE_2_4)
# include "xc_const_string_opcodes_php5.4.h"
#elif defined(ZEND_ENGINE_2_3)

View File

@ -0,0 +1,167 @@
/* size = 164 */
static const char *const xc_opcode_names[] = {
/* 0 */ "NOP",
/* 1 */ "ADD",
/* 2 */ "SUB",
/* 3 */ "MUL",
/* 4 */ "DIV",
/* 5 */ "MOD",
/* 6 */ "SL",
/* 7 */ "SR",
/* 8 */ "CONCAT",
/* 9 */ "BW_OR",
/* 10 */ "BW_AND",
/* 11 */ "BW_XOR",
/* 12 */ "BW_NOT",
/* 13 */ "BOOL_NOT",
/* 14 */ "BOOL_XOR",
/* 15 */ "IS_IDENTICAL",
/* 16 */ "IS_NOT_IDENTICAL",
/* 17 */ "IS_EQUAL",
/* 18 */ "IS_NOT_EQUAL",
/* 19 */ "IS_SMALLER",
/* 20 */ "IS_SMALLER_OR_EQUAL",
/* 21 */ "CAST",
/* 22 */ "QM_ASSIGN",
/* 23 */ "ASSIGN_ADD",
/* 24 */ "ASSIGN_SUB",
/* 25 */ "ASSIGN_MUL",
/* 26 */ "ASSIGN_DIV",
/* 27 */ "ASSIGN_MOD",
/* 28 */ "ASSIGN_SL",
/* 29 */ "ASSIGN_SR",
/* 30 */ "ASSIGN_CONCAT",
/* 31 */ "ASSIGN_BW_OR",
/* 32 */ "ASSIGN_BW_AND",
/* 33 */ "ASSIGN_BW_XOR",
/* 34 */ "PRE_INC",
/* 35 */ "PRE_DEC",
/* 36 */ "POST_INC",
/* 37 */ "POST_DEC",
/* 38 */ "ASSIGN",
/* 39 */ "ASSIGN_REF",
/* 40 */ "ECHO",
/* 41 */ "PRINT",
/* 42 */ "JMP",
/* 43 */ "JMPZ",
/* 44 */ "JMPNZ",
/* 45 */ "JMPZNZ",
/* 46 */ "JMPZ_EX",
/* 47 */ "JMPNZ_EX",
/* 48 */ "CASE",
/* 49 */ "SWITCH_FREE",
/* 50 */ "BRK",
/* 51 */ "CONT",
/* 52 */ "BOOL",
/* 53 */ "INIT_STRING",
/* 54 */ "ADD_CHAR",
/* 55 */ "ADD_STRING",
/* 56 */ "ADD_VAR",
/* 57 */ "BEGIN_SILENCE",
/* 58 */ "END_SILENCE",
/* 59 */ "INIT_FCALL_BY_NAME",
/* 60 */ "DO_FCALL",
/* 61 */ "DO_FCALL_BY_NAME",
/* 62 */ "RETURN",
/* 63 */ "RECV",
/* 64 */ "RECV_INIT",
/* 65 */ "SEND_VAL",
/* 66 */ "SEND_VAR",
/* 67 */ "SEND_REF",
/* 68 */ "NEW",
/* 69 */ "INIT_NS_FCALL_BY_NAME",
/* 70 */ "FREE",
/* 71 */ "INIT_ARRAY",
/* 72 */ "ADD_ARRAY_ELEMENT",
/* 73 */ "INCLUDE_OR_EVAL",
/* 74 */ "UNSET_VAR",
/* 75 */ "UNSET_DIM",
/* 76 */ "UNSET_OBJ",
/* 77 */ "FE_RESET",
/* 78 */ "FE_FETCH",
/* 79 */ "EXIT",
/* 80 */ "FETCH_R",
/* 81 */ "FETCH_DIM_R",
/* 82 */ "FETCH_OBJ_R",
/* 83 */ "FETCH_W",
/* 84 */ "FETCH_DIM_W",
/* 85 */ "FETCH_OBJ_W",
/* 86 */ "FETCH_RW",
/* 87 */ "FETCH_DIM_RW",
/* 88 */ "FETCH_OBJ_RW",
/* 89 */ "FETCH_IS",
/* 90 */ "FETCH_DIM_IS",
/* 91 */ "FETCH_OBJ_IS",
/* 92 */ "FETCH_FUNC_ARG",
/* 93 */ "FETCH_DIM_FUNC_ARG",
/* 94 */ "FETCH_OBJ_FUNC_ARG",
/* 95 */ "FETCH_UNSET",
/* 96 */ "FETCH_DIM_UNSET",
/* 97 */ "FETCH_OBJ_UNSET",
/* 98 */ "FETCH_DIM_TMP_VAR",
/* 99 */ "FETCH_CONSTANT",
/* 100 */ "GOTO",
/* 101 */ "EXT_STMT",
/* 102 */ "EXT_FCALL_BEGIN",
/* 103 */ "EXT_FCALL_END",
/* 104 */ "EXT_NOP",
/* 105 */ "TICKS",
/* 106 */ "SEND_VAR_NO_REF",
/* 107 */ "CATCH",
/* 108 */ "THROW",
/* 109 */ "FETCH_CLASS",
/* 110 */ "CLONE",
/* 111 */ "RETURN_BY_REF",
/* 112 */ "INIT_METHOD_CALL",
/* 113 */ "INIT_STATIC_METHOD_CALL",
/* 114 */ "ISSET_ISEMPTY_VAR",
/* 115 */ "ISSET_ISEMPTY_DIM_OBJ",
/* 116 */ "UNDEF",
/* 117 */ "UNDEF",
/* 118 */ "UNDEF",
/* 119 */ "UNDEF",
/* 120 */ "UNDEF",
/* 121 */ "UNDEF",
/* 122 */ "UNDEF",
/* 123 */ "UNDEF",
/* 124 */ "UNDEF",
/* 125 */ "UNDEF",
/* 126 */ "UNDEF",
/* 127 */ "UNDEF",
/* 128 */ "UNDEF",
/* 129 */ "UNDEF",
/* 130 */ "UNDEF",
/* 131 */ "UNDEF",
/* 132 */ "PRE_INC_OBJ",
/* 133 */ "PRE_DEC_OBJ",
/* 134 */ "POST_INC_OBJ",
/* 135 */ "POST_DEC_OBJ",
/* 136 */ "ASSIGN_OBJ",
/* 137 */ "OP_DATA",
/* 138 */ "INSTANCEOF",
/* 139 */ "DECLARE_CLASS",
/* 140 */ "DECLARE_INHERITED_CLASS",
/* 141 */ "DECLARE_FUNCTION",
/* 142 */ "RAISE_ABSTRACT_ERROR",
/* 143 */ "DECLARE_CONST",
/* 144 */ "ADD_INTERFACE",
/* 145 */ "DECLARE_INHERITED_CLASS_DELAYED",
/* 146 */ "VERIFY_ABSTRACT_CLASS",
/* 147 */ "ASSIGN_DIM",
/* 148 */ "ISSET_ISEMPTY_PROP_OBJ",
/* 149 */ "HANDLE_EXCEPTION",
/* 150 */ "USER_OPCODE",
/* 151 */ "UNDEF",
/* 152 */ "JMP_SET",
/* 153 */ "DECLARE_LAMBDA_FUNCTION",
/* 154 */ "ADD_TRAIT",
/* 155 */ "BIND_TRAITS",
/* 156 */ "SEPARATE",
/* 157 */ "QM_ASSIGN_VAR",
/* 158 */ "JMP_SET_VAR",
/* 159 */ "DISCARD_EXCEPTION",
/* 160 */ "YIELD",
/* 161 */ "GENERATOR_RETURN",
/* 162 */ "FAST_CALL",
/* 163 */ "FAST_RET"
};

View File

@ -237,17 +237,20 @@ static const xc_opcode_spec_t xc_opcode_spec[] = {
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 151 UNDEF */
OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 152 JMP_SET */
OPSPEC( UNUSED, STD, STD, TMP) /* 153 DECLARE_LAMBDA_FUNCTION */
# ifdef ZEND_ENGINE_2_4
# endif
# ifdef ZEND_ENGINE_2_4
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 154 ADD_TRAIT */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 155 BIND_TRAITS */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 156 SEPARATE */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 157 QM_ASSIGN_VAR */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 158 JMP_SET_VAR */
# endif
# else
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 151 UNDEF */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 152 UNDEF */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 153 UNDEF */
# endif
# ifdef ZEND_ENGINE_2_5
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 159 DISCARD_EXCEPTION */
OPSPEC( UNUSED, STD, STD, UNUSED) /* 160 YIELD */
OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 161 GENERATOR_RETURN */
OPSPEC( UNUSED, JMPADDR, UNUSED, UNUSED) /* 162 FAST_CALL */
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 163 FAST_RET */
# endif
#else
OPSPEC( UNUSED, UNUSED, UNUSED, UNUSED) /* 107 UNDEF */

View File

@ -151,6 +151,9 @@ int xc_undo_pass_two(zend_op_array *op_array TSRMLS_DC) /* {{{ */
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
assert(Z_OP(opline->op1).jmp_addr >= op_array->opcodes && (zend_uint) (Z_OP(opline->op1).jmp_addr - op_array->opcodes) < op_array->last);
Z_OP(opline->op1).opline_num = Z_OP(opline->op1).jmp_addr - op_array->opcodes;
break;
@ -238,6 +241,9 @@ int xc_redo_pass_two(zend_op_array *op_array TSRMLS_DC) /* {{{ */
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
assert(Z_OP(opline->op1).opline_num < op_array->last);
Z_OP(opline->op1).jmp_addr = op_array->opcodes + Z_OP(opline->op1).opline_num;
break;
@ -346,6 +352,9 @@ int xc_foreach_early_binding_class(zend_op_array *op_array, xc_foreach_early_bin
case ZEND_GOTO:
#endif
case ZEND_JMP:
#ifdef ZEND_FAST_CALL
case ZEND_FAST_CALL:
#endif
next = begin + Z_OP(opline->op1).opline_num;
break;