|
|
|
@ -636,6 +636,8 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
|
|
|
|
|
PROCESS(zend_uchar, result_type) |
|
|
|
|
#endif |
|
|
|
|
IFCOPY(` |
|
|
|
|
assert(processor->active_op_array_src); |
|
|
|
|
assert(processor->active_op_array_dst); |
|
|
|
|
#ifdef ZEND_ENGINE_2_4 |
|
|
|
|
pushdef(`UNION_znode_op_literal', ` |
|
|
|
|
if (src->$1_type == IS_CONST) { |
|
|
|
@ -652,9 +654,9 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
|
|
|
|
|
case ZEND_GOTO: |
|
|
|
|
#endif |
|
|
|
|
case ZEND_JMP: |
|
|
|
|
assert(Z_OP(src->op1).jmp_addr >= processor->active_opcodes_src && Z_OP(src->op1).jmp_addr - processor->active_opcodes_src < processor->active_op_array_src->last); |
|
|
|
|
Z_OP(dst->op1).jmp_addr = processor->active_opcodes_dst + (Z_OP(src->op1).jmp_addr - processor->active_opcodes_src); |
|
|
|
|
assert(Z_OP(dst->op1).jmp_addr >= processor->active_opcodes_dst && Z_OP(dst->op1).jmp_addr - processor->active_opcodes_dst < processor->active_op_array_dst->last); |
|
|
|
|
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); |
|
|
|
|
assert(Z_OP(dst->op1).jmp_addr >= processor->active_op_array_dst->opcodes && Z_OP(dst->op1).jmp_addr - processor->active_op_array_dst->opcodes < processor->active_op_array_dst->last); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ZEND_JMPZ: |
|
|
|
@ -664,9 +666,9 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
|
|
|
|
|
#ifdef ZEND_JMP_SET |
|
|
|
|
case ZEND_JMP_SET: |
|
|
|
|
#endif |
|
|
|
|
assert(Z_OP(src->op2).jmp_addr >= processor->active_opcodes_src && Z_OP(src->op2).jmp_addr - processor->active_opcodes_src < processor->active_op_array_src->last); |
|
|
|
|
Z_OP(dst->op2).jmp_addr = processor->active_opcodes_dst + (Z_OP(src->op2).jmp_addr - processor->active_opcodes_src); |
|
|
|
|
assert(Z_OP(dst->op2).jmp_addr >= processor->active_opcodes_dst && Z_OP(dst->op2).jmp_addr - processor->active_opcodes_dst < processor->active_op_array_dst->last); |
|
|
|
|
assert(Z_OP(src->op2).jmp_addr >= processor->active_op_array_src->opcodes && Z_OP(src->op2).jmp_addr - processor->active_op_array_src->opcodes < processor->active_op_array_src->last); |
|
|
|
|
Z_OP(dst->op2).jmp_addr = processor->active_op_array_dst->opcodes + (Z_OP(src->op2).jmp_addr - processor->active_op_array_src->opcodes); |
|
|
|
|
assert(Z_OP(dst->op2).jmp_addr >= processor->active_op_array_dst->opcodes && Z_OP(dst->op2).jmp_addr - processor->active_op_array_dst->opcodes < processor->active_op_array_dst->last); |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
@ -686,6 +688,11 @@ DEF_STRUCT_P_FUNC(`zend_literal', , `dnl {{{
|
|
|
|
|
dnl }}} |
|
|
|
|
#endif |
|
|
|
|
DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{ |
|
|
|
|
IFCOPY(` |
|
|
|
|
processor->active_op_array_dst = dst; |
|
|
|
|
processor->active_op_array_src = src; |
|
|
|
|
') |
|
|
|
|
{ |
|
|
|
|
IFRESTORE(` |
|
|
|
|
const xc_op_array_info_t *op_array_info = &processor->active_op_array_infos_src[processor->active_op_array_index++]; |
|
|
|
|
dnl shadow copy must NOT meet: |
|
|
|
@ -819,21 +826,13 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
|
|
|
|
|
IFSTORE(`dst->refcount[0] = 1;') |
|
|
|
|
|
|
|
|
|
#ifdef ZEND_ENGINE_2_4 |
|
|
|
|
dnl before copying opcodes |
|
|
|
|
dnl used when copying opcodes |
|
|
|
|
STRUCT_ARRAY(last_literal, zend_literal, literals) |
|
|
|
|
PROCESS(int, last_literal) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
pushdef(`AFTER_ALLOC', `IFCOPY(` |
|
|
|
|
#ifndef NDEBUG |
|
|
|
|
processor->active_op_array_dst = dst; |
|
|
|
|
processor->active_op_array_src = src; |
|
|
|
|
#endif |
|
|
|
|
processor->active_opcodes_dst = dst->opcodes; |
|
|
|
|
processor->active_opcodes_src = src->opcodes; |
|
|
|
|
')') |
|
|
|
|
dnl uses literals |
|
|
|
|
STRUCT_ARRAY(last, zend_op, opcodes) |
|
|
|
|
popdef(`AFTER_ALLOC') |
|
|
|
|
PROCESS(zend_uint, last) |
|
|
|
|
#ifndef ZEND_ENGINE_2_4 |
|
|
|
|
IFCOPY(`dst->size = src->last;DONE(size)', `PROCESS(zend_uint, size)') |
|
|
|
@ -961,6 +960,11 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
|
|
|
|
|
zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) xc_zend_extension_op_array_ctor_handler, dst TSRMLS_CC); |
|
|
|
|
} |
|
|
|
|
') |
|
|
|
|
} |
|
|
|
|
IFCOPY(` |
|
|
|
|
processor->active_op_array_dst = NULL; |
|
|
|
|
processor->active_op_array_src = NULL; |
|
|
|
|
') |
|
|
|
|
') |
|
|
|
|
dnl }}} |
|
|
|
|
|
|
|
|
|