Browse Source

remove php 4 support completely

git-svn-id: svn://svn.lighttpd.net/xcache/trunk@1281 c26eb9a1-5813-0410-bd6c-c2e55f420ca7
3.1
Xuefer 8 years ago
parent
commit
c7492e6c3a
  1. 3
      ChangeLog
  2. 4
      Makefile.frag.deps
  3. 2
      NEWS
  4. 1
      devel/prepare.cfg.example
  5. 10
      devel/prepare.mak
  6. 6
      devel/run
  7. 20
      lib/Decompiler.class.php
  8. 16
      mod_cacher/xc_cache.h
  9. 79
      mod_cacher/xc_cacher.c
  10. 5
      mod_coverager/xc_coverager.c
  11. 11
      mod_disassembler/xc_disassembler.c
  12. 31
      mod_optimizer/xc_optimizer.c
  13. 10
      processor/head.m4
  14. 110
      processor/processor.m4
  15. 16
      xcache.c
  16. 12
      xcache/xc_compatibility.c
  17. 38
      xcache/xc_compatibility.h
  18. 4
      xcache/xc_const_string.c
  19. 116
      xcache/xc_const_string_opcodes_php4.x.h
  20. 2
      xcache/xc_const_string_opcodes_php5.3.h
  21. 3
      xcache/xc_ini.h
  22. 6
      xcache/xc_opcode_spec.c
  23. 63
      xcache/xc_opcode_spec_def.h
  24. 6
      xcache/xc_sandbox.c
  25. 61
      xcache/xc_utils.c
  26. 2
      xcache/xc_utils.h

3
ChangeLog

@ -1,12 +1,13 @@
3.1.0 2013-??-??
ChangeLog
========
* drop support for PHP_4 in source code
* disassembler: fixes crash with nested sandbox
* adds support for PHP_5_5
* compatible with fcntl fork
* support for __FILE__ __DIR__ handling after files moved/hardlinked (without xcache.experimental)
3.0.3 2013-16.18
3.0.3 2013-16-18
========
* clean files in release (fix htdocs config)

4
Makefile.frag.deps

@ -5,14 +5,14 @@ mod_coverager/xc_coverager.lo $(builddir)/mod_coverager/xc_coverager.lo: $(srcdi
mod_decoder/xc_decoder.lo $(builddir)/mod_decoder/xc_decoder.lo:
mod_disassembler/xc_disassembler.lo $(builddir)/mod_disassembler/xc_disassembler.lo: $(srcdir)/mod_cacher/xc_cache.h $(srcdir)/mod_disassembler/xc_disassembler.h $(srcdir)/xcache.h $(srcdir)/xcache/xc_allocator.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_ini.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_sandbox.h $(srcdir)/xcache/xc_shm.h $(srcdir)/xcache/xc_utils.h $(XCACHE_PROC_H)
mod_encoder/xc_encoder.lo $(builddir)/mod_encoder/xc_encoder.lo:
mod_optimizer/xc_optimizer.lo $(builddir)/mod_optimizer/xc_optimizer.lo: $(srcdir)/mod_optimizer/xc_optimizer.h $(srcdir)/util/xc_stack.h $(srcdir)/util/xc_trace.h $(srcdir)/xcache_globals.h $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_extension.h $(srcdir)/xcache/xc_ini.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h $(srcdir)/xcache/xc_utils.h
mod_optimizer/xc_optimizer.lo $(builddir)/mod_optimizer/xc_optimizer.lo: $(srcdir)/mod_cacher/xc_cache.h $(srcdir)/mod_optimizer/xc_optimizer.h $(srcdir)/util/xc_stack.h $(srcdir)/util/xc_trace.h $(srcdir)/xcache_globals.h $(srcdir)/xcache.h $(srcdir)/xcache/xc_allocator.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_const_string.h $(srcdir)/xcache/xc_extension.h $(srcdir)/xcache/xc_ini.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h $(srcdir)/xcache/xc_utils.h $(XCACHE_PROC_H)
util/xc_stack.lo $(builddir)/util/xc_stack.lo: $(srcdir)/util/xc_stack.h $(srcdir)/util/xc_trace.h
util/xc_trace.lo $(builddir)/util/xc_trace.lo: $(srcdir)/util/xc_trace.h
xcache.lo $(builddir)/xcache.lo: $(srcdir)/util/xc_foreachcoresig.h $(srcdir)/util/xc_stack.h $(srcdir)/xcache_globals.h $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_const_string.h $(srcdir)/xcache/xc_extension.h $(srcdir)/xcache/xc_ini.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_opcode_spec.h $(srcdir)/xcache/xc_shm.h $(srcdir)/xcache/xc_utils.h
xcache/xc_allocator_bestfit.lo $(builddir)/xcache/xc_allocator_bestfit.lo: $(srcdir)/util/xc_align.h $(srcdir)/util/xc_trace.h $(srcdir)/xcache/xc_allocator.h $(srcdir)/xcache/xc_shm.h
xcache/xc_allocator.lo $(builddir)/xcache/xc_allocator.lo: $(srcdir)/xcache/xc_allocator.h $(srcdir)/xcache/xc_shm.h
xcache/xc_compatibility.lo $(builddir)/xcache/xc_compatibility.lo: $(srcdir)/xcache/xc_compatibility.h
xcache/xc_const_string.lo $(builddir)/xcache/xc_const_string.lo: $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_const_string.h $(srcdir)/xcache/xc_const_string_opcodes_php5.5.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h
xcache/xc_const_string.lo $(builddir)/xcache/xc_const_string.lo: $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_const_string.h $(srcdir)/xcache/xc_const_string_opcodes_php5.0.h $(srcdir)/xcache/xc_const_string_opcodes_php5.1.h $(srcdir)/xcache/xc_const_string_opcodes_php5.3.h $(srcdir)/xcache/xc_const_string_opcodes_php5.4.h $(srcdir)/xcache/xc_const_string_opcodes_php5.5.h $(srcdir)/xcache/xc_const_string_opcodes_php6.x.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h
xcache/xc_extension.lo $(builddir)/xcache/xc_extension.lo: $(srcdir)/util/xc_stack.h $(srcdir)/util/xc_trace.h $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_extension.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h
xcache/xc_ini.lo $(builddir)/xcache/xc_ini.lo: $(srcdir)/xcache/xc_ini.h
xcache/xc_lock.lo $(builddir)/xcache/xc_lock.lo: $(srcdir)/xcache.h $(srcdir)/xcache/xc_compatibility.h $(srcdir)/xcache/xc_lock.h $(srcdir)/xcache/xc_shm.h

2
NEWS

@ -5,7 +5,7 @@
* compatible with fcntl fork
* support for __FILE__ __DIR__ handling after files moved/hardlinked
3.0.3 2013-16.18
3.0.3 2013-16-18
========
* clean files in release (fix htdocs config)

1
devel/prepare.cfg.example

@ -1,5 +1,4 @@
# copy this file as prepare.cfg before modifying
PHP4_x_DIR=
PHP5_0_DIR=
PHP5_1_DIR=
PHP5_3_DIR=

10
devel/prepare.mak

@ -17,7 +17,6 @@ clean_xc_const_string:
.PHONY: xc_const_string
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.3.h \
@ -34,15 +33,6 @@ xcache/xc_opcode_spec_def.h: ${EA_DIR}/opcodes.c
mv "$@".tmp "$@"
endif
ifeq (${PHP4_x_DIR},)
xcache/xc_const_string_opcodes_php4.x.h: dummy
@echo "Skipped $@: PHP_4_x_DIR not set"
else
xcache/xc_const_string_opcodes_php4.x.h: ${PHP4_x_DIR}/Zend/zend_compile.h
$(AWK) -f ./devel/gen_const_string_opcodes.awk < "$<" > "$@.tmp"
mv "$@.tmp" "$@"
endif
ifeq (${PHP5_0_DIR},)
xcache/xc_const_string_opcodes_php5.0.h: dummy
@echo "Skipped $@: PHP_5_0_DIR not set"

6
devel/run

@ -96,6 +96,12 @@ updatedeps() { # {{{1
esac
case "$dependency" in
*xc_const_string_opcodes_php*)
for dependency in xcache/xc_const_string_*.h; do
echo '$(srcdir)/'$dependency
done
;;
/*) ;;
$sourceFile) ;;

20
lib/Decompiler.class.php

@ -1407,9 +1407,6 @@ class Decompiler
$EX['object'] = (int) $res['var'];
$EX['called_scope'] = null;
$EX['fbc'] = 'new ' . unquoteName($this->getOpVal($op1, $EX), $EX);
if (!ZEND_ENGINE_2) {
$resvar = '$new object$';
}
break;
// }}}
case XC_THROW: // {{{
@ -1480,7 +1477,7 @@ class Decompiler
$fetchtype = ($ext & ZEND_FETCH_TYPE_MASK);
}
else {
$fetchtype = $op2[!ZEND_ENGINE_2 ? 'fetch_type' : 'EA.type'];
$fetchtype = $op2['EA.type'];
}
switch ($fetchtype) {
case ZEND_FETCH_STATIC_MEMBER:
@ -1701,7 +1698,7 @@ class Decompiler
}
}
switch ((!ZEND_ENGINE_2 ? $op['op2']['var'] /* constant */ : $ext) & (ZEND_ISSET|ZEND_ISEMPTY)) {
switch (($ext & (ZEND_ISSET|ZEND_ISEMPTY))) {
case ZEND_ISSET:
$rvalue = "isset(" . str($rvalue) . ")";
break;
@ -1754,9 +1751,6 @@ class Decompiler
case XC_INIT_NS_FCALL_BY_NAME:
case XC_INIT_FCALL_BY_NAME: // {{{
array_push($EX['arg_types_stack'], array($EX['fbc'], $EX['object'], $EX['called_scope']));
if (!ZEND_ENGINE_2 && ($ext & ZEND_CTOR_CALL)) {
break;
}
$EX['object'] = null;
$EX['called_scope'] = null;
$EX['fbc'] = $this->getOpVal($op2, $EX);
@ -2475,10 +2469,7 @@ class Decompiler
}
$mangled = false;
if (!ZEND_ENGINE_2) {
echo 'var ';
}
else if (!isset($info)) {
if (!isset($info)) {
echo 'public ';
}
else {
@ -2639,7 +2630,6 @@ define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.3.99");
define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3.");
define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2.");
define('ZEND_ENGINE_2_1', ZEND_ENGINE_2_2 || PHP_VERSION >= "5.1.");
define('ZEND_ENGINE_2', ZEND_ENGINE_2_1 || PHP_VERSION >= "5.0.");
define('ZEND_ACC_STATIC', 0x01);
define('ZEND_ACC_ABSTRACT', 0x02);
@ -2737,10 +2727,10 @@ define('BYREF_FORCE_REST', 3);
define('IS_NULL', 0);
define('IS_LONG', 1);
define('IS_DOUBLE', 2);
define('IS_BOOL', ZEND_ENGINE_2 ? 3 : 6);
define('IS_BOOL', 3);
define('IS_ARRAY', 4);
define('IS_OBJECT', 5);
define('IS_STRING', ZEND_ENGINE_2 ? 6 : 3);
define('IS_STRING', 6);
define('IS_RESOURCE', 7);
define('IS_CONSTANT', 8);
define('IS_CONSTANT_ARRAY', 9);

16
mod_cacher/xc_cache.h

@ -36,16 +36,16 @@ typedef struct {
/* {{{ xc_classinfo_t */
typedef struct {
#ifdef IS_UNICODE
zend_uchar type;
zend_uchar type;
#endif
const24_zstr key;
zend_uint key_size;
ulong h;
zend_uint methodinfo_cnt;
const24_zstr key;
zend_uint key_size;
ulong h;
zend_uint methodinfo_cnt;
xc_op_array_info_t *methodinfos;
xc_cest_t cest;
zend_class_entry *class_entry;
#ifndef ZEND_COMPILE_DELAYED_BINDING
int oplineno;
int oplineno;
#endif
} xc_classinfo_t;
/* }}} */
@ -189,10 +189,8 @@ zend_bool xc_is_ro(const void *p);
zend_bool xc_is_shm(const void *p);
/* {{{ xc_gc_op_array_t */
typedef struct {
#ifdef ZEND_ENGINE_2
zend_uint num_args;
zend_arg_info *arg_info;
#endif
#ifdef ZEND_ENGINE_2_4
zend_literal *literals;
#endif

79
mod_cacher/xc_cacher.c

@ -762,11 +762,6 @@ static zend_op_array *xc_entry_install(xc_entry_php_t *entry_php TSRMLS_DC) /* {
zend_uint i;
xc_entry_data_php_t *p = entry_php->php;
zend_op_array *old_active_op_array = CG(active_op_array);
#ifndef ZEND_ENGINE_2
ALLOCA_FLAG(use_heap)
/* new ptr which is stored inside CG(class_table) */
xc_cest_t **new_cest_ptrs = (xc_cest_t **)xc_do_alloca(sizeof(xc_cest_t*) * p->classinfo_cnt, use_heap);
#endif
CG(active_op_array) = p->op_array;
@ -789,21 +784,11 @@ static zend_op_array *xc_entry_install(xc_entry_php_t *entry_php TSRMLS_DC) /* {
/* install class */
for (i = 0; i < p->classinfo_cnt; i ++) {
xc_classinfo_t *ci = &p->classinfos[i];
#ifndef ZEND_ENGINE_2
zend_class_entry *ce = CestToCePtr(ci->cest);
/* fix pointer to the be which inside class_table */
if (ce->parent) {
zend_uint class_idx = (/* class_num */ (int) (long) ce->parent) - 1;
assert(class_idx < i);
ci->cest.parent = new_cest_ptrs[class_idx];
}
new_cest_ptrs[i] =
#endif
#ifdef ZEND_COMPILE_DELAYED_BINDING
xc_install_class(entry_php->entry.name.str.val, &ci->cest, -1,
xc_install_class(entry_php->entry.name.str.val, ci->class_entry, -1,
UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC);
#else
xc_install_class(entry_php->entry.name.str.val, &ci->cest, ci->oplineno,
xc_install_class(entry_php->entry.name.str.val, ci->class_entry, ci->oplineno,
UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC);
#endif
}
@ -825,14 +810,6 @@ static zend_op_array *xc_entry_install(xc_entry_php_t *entry_php TSRMLS_DC) /* {
CG(zend_lineno) = 0;
#endif
i = 1;
#ifndef ZEND_ENGINE_2_2
zend_hash_add(&EG(included_files), entry_php->entry.name.str.val, entry_php->entry.name.str.len+1, (void *)&i, sizeof(int), NULL);
#endif
#ifndef ZEND_ENGINE_2
xc_free_alloca(new_cest_ptrs, use_heap);
#endif
CG(active_op_array) = old_active_op_array;
return p->op_array;
}
@ -1297,12 +1274,12 @@ static void xc_cache_early_binding_class_cb(zend_op *opline, int oplineno, void
char *class_name;
zend_uint i;
int class_len;
xc_cest_t cest;
zend_class_entry *class_entry;
xc_entry_data_php_t *php = (xc_entry_data_php_t *) data;
class_name = Z_OP_CONSTANT(opline->op1).value.str.val;
class_len = Z_OP_CONSTANT(opline->op1).value.str.len;
if (zend_hash_find(CG(class_table), class_name, class_len, (void **) &cest) == FAILURE) {
if (zend_hash_find(CG(class_table), class_name, class_len, (void **) &class_entry) == FAILURE) {
assert(0);
}
TRACE("got ZEND_DECLARE_INHERITED_CLASS: %s", class_name + 1);
@ -1745,15 +1722,13 @@ static void xc_compile_php(xc_compiler_t *compiler, zend_file_handle *h, int typ
} while(0)
#ifdef HAVE_XCACHE_CONSTANT
b = EG(zend_constants)->pListHead; COPY_H(xc_constinfo_t, constinfos, constinfo_cnt, constant, zend_constant);
b = EG(zend_constants)->pListHead; COPY_H(xc_constinfo_t, constinfos, constinfo_cnt, constant, zend_constant);
#endif
b = CG(function_table)->pListHead; COPY_H(xc_funcinfo_t, funcinfos, funcinfo_cnt, func, zend_function);
b = CG(class_table)->pListHead; COPY_H(xc_classinfo_t, classinfos, classinfo_cnt, cest, xc_cest_t);
b = CG(function_table)->pListHead; COPY_H(xc_funcinfo_t, funcinfos, funcinfo_cnt, func, zend_function);
b = CG(class_table)->pListHead; COPY_H(xc_classinfo_t, classinfos, classinfo_cnt, class_entry, zend_class_entry *);
#undef COPY_H
/* for ZE1, cest need to be fixed inside store */
#ifdef ZEND_ENGINE_2_1
/* scan for acatived auto globals */
i = 0;
@ -1790,8 +1765,7 @@ static void xc_compile_php(xc_compiler_t *compiler, zend_file_handle *h, int typ
for (i = 0; i < compiler->new_php.classinfo_cnt; i ++) {
xc_classinfo_t *classinfo = &compiler->new_php.classinfos[i];
zend_class_entry *ce = CestToCePtr(classinfo->cest);
classinfo->methodinfo_cnt = ce->function_table.nTableSize;
classinfo->methodinfo_cnt = classinfo->class_entry->function_table.nTableSize;
if (classinfo->methodinfo_cnt) {
int j;
@ -1800,7 +1774,7 @@ static void xc_compile_php(xc_compiler_t *compiler, zend_file_handle *h, int typ
goto err_alloc;
}
for (j = 0, b = ce->function_table.pListHead; b; j ++, b = b->pListNext) {
for (j = 0, b = classinfo->class_entry->function_table.pListHead; b; j ++, b = b->pListNext) {
xc_collect_op_array_info(compiler, &const_usage, &classinfo->methodinfos[j], (zend_op_array *) b->pData TSRMLS_CC);
}
}
@ -2000,11 +1974,7 @@ static zend_op_array *xc_compile_file_sandboxed(void *data TSRMLS_DC) /* {{{ */
sandboxed_compiler->stored_php = stored_php;
/* discard newly compiled result, restore from stored one */
if (compiler->new_php.op_array) {
#ifdef ZEND_ENGINE_2
destroy_op_array(compiler->new_php.op_array TSRMLS_CC);
#else
destroy_op_array(compiler->new_php.op_array);
#endif
efree(compiler->new_php.op_array);
compiler->new_php.op_array = NULL;
}
@ -2268,7 +2238,6 @@ static void xc_gc_op_array(void *pDest) /* {{{ */
{
xc_gc_op_array_t *op_array = (xc_gc_op_array_t *) pDest;
zend_uint i;
#ifdef ZEND_ENGINE_2
if (op_array->arg_info) {
for (i = 0; i < op_array->num_args; i++) {
efree((char *) ZSTR_V(op_array->arg_info[i].name));
@ -2278,7 +2247,6 @@ static void xc_gc_op_array(void *pDest) /* {{{ */
}
efree(op_array->arg_info);
}
#endif
if (op_array->opcodes) {
efree(op_array->opcodes);
}
@ -2794,8 +2762,8 @@ static void xc_holds_destroy(TSRMLS_D) /* {{{ */
static void xc_request_init(TSRMLS_D) /* {{{ */
{
if (!XG(internal_table_copied)) {
zend_function tmp_func;
xc_cest_t tmp_cest;
zend_function dummy_func;
zend_class_entry *dummy_class_entry;
#ifdef HAVE_XCACHE_CONSTANT
zend_hash_destroy(&XG(internal_constant_table));
@ -2812,16 +2780,14 @@ static void xc_request_init(TSRMLS_D) /* {{{ */
#ifdef HAVE_XCACHE_CONSTANT
xc_copy_internal_zend_constants(&XG(internal_constant_table), EG(zend_constants));
#endif
zend_hash_copy(&XG(internal_function_table), CG(function_table), NULL, &tmp_func, sizeof(tmp_func));
zend_hash_copy(&XG(internal_class_table), CG(class_table), NULL, &tmp_cest, sizeof(tmp_cest));
zend_hash_copy(&XG(internal_function_table), CG(function_table), NULL, &dummy_func, sizeof(dummy_func));
zend_hash_copy(&XG(internal_class_table), CG(class_table), NULL, &dummy_class_entry, sizeof(dummy_class_entry));
XG(internal_table_copied) = 1;
}
xc_holds_init(TSRMLS_C);
xc_var_namespace_init(TSRMLS_C);
#ifdef ZEND_ENGINE_2
zend_llist_init(&XG(gc_op_arrays), sizeof(xc_gc_op_array_t), xc_gc_op_array, 0);
#endif
#if PHP_API_VERSION <= 20041225
XG(request_time) = time(NULL);
@ -2842,9 +2808,7 @@ static void xc_request_shutdown(TSRMLS_D) /* {{{ */
xc_gc_expires_var(TSRMLS_C);
xc_gc_deletes(TSRMLS_C);
xc_var_namespace_destroy(TSRMLS_C);
#ifdef ZEND_ENGINE_2
zend_llist_destroy(&XG(gc_op_arrays));
#endif
}
/* }}} */
@ -3775,16 +3739,10 @@ static PHP_RINIT_FUNCTION(xcache_cacher) /* {{{ */
return SUCCESS;
}
/* }}} */
/* {{{ static PHP_RSHUTDOWN_FUNCTION(xcache_cacher) */
#ifndef ZEND_ENGINE_2
static PHP_RSHUTDOWN_FUNCTION(xcache_cacher)
#else
/* {{{ static ZEND_MODULE_POST_ZEND_DEACTIVATE_D(xcache_cacher) */
static ZEND_MODULE_POST_ZEND_DEACTIVATE_D(xcache_cacher)
#endif
{
#ifdef ZEND_ENGINE_2
TSRMLS_FETCH();
#endif
xc_request_shutdown(TSRMLS_C);
return SUCCESS;
@ -3797,22 +3755,13 @@ static zend_module_entry xcache_cacher_module_entry = { /* {{{ */
PHP_MINIT(xcache_cacher),
PHP_MSHUTDOWN(xcache_cacher),
PHP_RINIT(xcache_cacher),
#ifndef ZEND_ENGINE_2
PHP_RSHUTDOWN(xcache_cacher),
#else
NULL,
#endif
PHP_MINFO(xcache_cacher),
XCACHE_VERSION,
#ifdef PHP_GINIT
NO_MODULE_GLOBALS,
#endif
#ifdef ZEND_ENGINE_2
ZEND_MODULE_POST_ZEND_DEACTIVATE_N(xcache_cacher),
#else
NULL,
NULL,
#endif
STANDARD_MODULE_PROPERTIES_EX
};
/* }}} */

5
mod_coverager/xc_coverager.c

@ -702,12 +702,7 @@ static zend_module_entry xcache_coverager_module_entry = { /* {{{ */
#ifdef PHP_GINIT
NO_MODULE_GLOBALS,
#endif
#ifdef ZEND_ENGINE_2
NULL,
#else
NULL,
NULL,
#endif
STANDARD_MODULE_PROPERTIES_EX
};
/* }}} */

11
mod_disassembler/xc_disassembler.c

@ -75,7 +75,7 @@ static void xc_dasm(zval *output, zend_op_array *op_array TSRMLS_DC) /* {{{ */
ALLOC_INIT_ZVAL(zv);
array_init(zv);
xc_dasm_zend_class_entry(&dasm, zv, CestToCePtr(*(xc_cest_t *)b->pData) TSRMLS_CC);
xc_dasm_zend_class_entry(&dasm, zv, *(zend_class_entry **)b->pData TSRMLS_CC);
keysize = BUCKET_KEY_SIZE(b) + 2;
if (keysize > bufsize) {
@ -150,11 +150,7 @@ zend_op_array *xc_dasm_sandboxed(void *data TSRMLS_DC) /* {{{ */
xc_dasm(sandboxed_dasm->output, op_array TSRMLS_CC);
/* free */
#ifdef ZEND_ENGINE_2
destroy_op_array(op_array TSRMLS_CC);
#else
destroy_op_array(op_array);
#endif
efree(op_array);
return NULL;
@ -250,12 +246,7 @@ static zend_module_entry xcache_disassembler_module_entry = { /* {{{ */
#ifdef PHP_GINIT
NO_MODULE_GLOBALS,
#endif
#ifdef ZEND_ENGINE_2
NULL,
#else
NULL,
NULL,
#endif
STANDARD_MODULE_PROPERTIES_EX
};
/* }}} */

31
mod_optimizer/xc_optimizer.c

@ -1,4 +1,4 @@
#if 1
#if 0
# define XCACHE_DEBUG
#endif
@ -43,9 +43,7 @@ typedef struct _bb_t {
int size;
bbid_t fall;
#ifdef ZEND_ENGINE_2
bbid_t catch;
#endif
#ifdef ZEND_ENGINE_2_5
bbid_t finally;
#endif
@ -299,9 +297,7 @@ static bb_t *bb_new_ex(zend_op *opcodes, int count) /* {{{ */
bb_t *bb = (bb_t *) ecalloc(sizeof(bb_t), 1);
bb->fall = BBID_INVALID;
#ifdef ZEND_ENGINE_2
bb->catch = BBID_INVALID;
#endif
#ifdef ZEND_ENGINE_2_5
bb->finally = BBID_INVALID;
#endif
@ -335,12 +331,12 @@ static void bb_print(bb_t *bb, zend_op_array *op_array) /* {{{ */
int line = bb->opcodes - op_array->opcodes;
op_flowinfo_t fi;
zend_op *last = bb->opcodes + bb->count - 1;
bbid_t catchbbid = ZESW(BBID_INVALID, bb->catch);
bbid_t catchbbid = bb->catch;
bbid_t finallybbid;
#ifdef ZEND_ENGINE_2_5
finallybbid = BBID_INVALID;
#else
finallybbid = bb->finally;
#else
finallybbid = BBID_INVALID;
#endif
op_get_flowinfo(&fi, last);
@ -412,9 +408,7 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
typedef struct {
zend_bool isbbhead;
bbid_t bbid;
#ifdef ZEND_ENGINE_2
bbid_t catchbbid;
#endif
#ifdef ZEND_ENGINE_2_5
bbid_t finallybbid;
#endif
@ -441,12 +435,10 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
}
}
}
#ifdef ZEND_ENGINE_2
/* mark try start */
for (i = 0; i < op_array->last_try_catch; i ++) {
oplineinfos[op_array->try_catch_array[i].try_op].isbbhead = 1;
}
#endif
/* }}} */
/* {{{ fill op lines with newly allocated id */
for (i = 0; i < count; i ++) {
@ -462,7 +454,6 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
TRACE("bbids[%d] = %d", i, id);
}
/* }}} */
#ifdef ZEND_ENGINE_2
/* {{{ fill op lines with catch id */
for (i = 0; i < count; i ++) {
oplineinfos[i].catchbbid = BBID_INVALID;
@ -493,7 +484,6 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
}
#endif
/* }}} */
#endif
/* {{{ create basic blocks */
start = 0;
id = 0;
@ -505,9 +495,7 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
opline = op_array->opcodes + start;
bb = bbs_new_bb_ex(bbs, opline, i - start);
#ifdef ZEND_ENGINE_2
bb->catch = oplineinfos[start].catchbbid;
#endif
#ifdef ZEND_ENGINE_2_5
bb->finally = oplineinfos[start].finallybbid;
#endif
@ -548,10 +536,8 @@ static int bbs_build_from(bbs_t *bbs, zend_op_array *op_array, int count) /* {{{
static void bbs_restore_opnum(bbs_t *bbs, zend_op_array *op_array) /* {{{ */
{
int i;
#ifdef ZEND_ENGINE_2
bbid_t lasttrybbid;
bbid_t lastcatchbbid;
#endif
#ifdef ZEND_ENGINE_2_5
bbid_t lastfinallybbid;
#endif
@ -577,7 +563,6 @@ static void bbs_restore_opnum(bbs_t *bbs, zend_op_array *op_array) /* {{{ */
}
}
#ifdef ZEND_ENGINE_2
lasttrybbid = BBID_INVALID;
lastcatchbbid = BBID_INVALID;
#ifdef ZEND_ENGINE_2_5
@ -607,7 +592,6 @@ static void bbs_restore_opnum(bbs_t *bbs, zend_op_array *op_array) /* {{{ */
}
}
/* it is impossible to have last bb catched */
#endif
}
/* }}} */
@ -623,6 +607,7 @@ static int xc_optimize_op_array(zend_op_array *op_array TSRMLS_DC) /* {{{ */
}
#ifdef XCACHE_DEBUG
xc_fix_opcode(op_array TSRMLS_CC);
# if 0
TRACE("optimize file: %s", op_array->filename);
xc_dprint_zend_op_array(op_array, 0 TSRMLS_CC);
@ -653,6 +638,7 @@ static int xc_optimize_op_array(zend_op_array *op_array TSRMLS_DC) /* {{{ */
xc_dprint_zend_op_array(op_array, 0 TSRMLS_CC);
# endif
op_print(op_array, 0, op_array->opcodes, op_array->opcodes + op_array->last);
xc_undo_fix_opcode(op_array TSRMLS_CC);
#endif
return 0;
}
@ -736,12 +722,7 @@ static zend_module_entry xcache_optimizer_module_entry = { /* {{{ */
#ifdef PHP_GINIT
NO_MODULE_GLOBALS,
#endif
#ifdef ZEND_ENGINE_2
NULL,
#else
NULL,
NULL,
#endif
STANDARD_MODULE_PROPERTIES_EX
};
/* }}} */

10
processor/head.m4

@ -247,8 +247,8 @@ static zend_ulong xc_get_class_num(xc_processor_t *processor, zend_class_entry *
return processor->cache_class_index + 1;
}
for (i = 0; i < php->classinfo_cnt; i ++) {
ceptr = CestToCePtr(php->classinfos[i].cest);
if (ZCEP_REFCOUNT_PTR(ceptr) == ZCEP_REFCOUNT_PTR(ce)) {
ceptr = php->classinfos[i].class_entry;
if (ceptr == ce) {
processor->cache_ce = ceptr;
processor->cache_class_index = i;
return i + 1;
@ -260,16 +260,13 @@ static zend_ulong xc_get_class_num(xc_processor_t *processor, zend_class_entry *
define(`xc_get_class_num', `xc_get_class_numNOTDEFINED')
/* }}} */
/* {{{ xc_get_class */
#ifdef ZEND_ENGINE_2
static zend_class_entry *xc_get_class(xc_processor_t *processor, zend_ulong class_num) {
/* must be parent or currrent class */
assert(class_num <= processor->active_class_index + 1);
return CestToCePtr(processor->php_dst->classinfos[class_num - 1].cest);
return processor->php_dst->classinfos[class_num - 1].class_entry;
}
#endif
define(`xc_get_class', `xc_get_classNOTDEFINED')
/* }}} */
#ifdef ZEND_ENGINE_2
/* fix method on store */
static void xc_fix_method(xc_processor_t *processor, zend_op_array *dst TSRMLS_DC) /* {{{ */
{
@ -344,7 +341,6 @@ static void xc_fix_method(xc_processor_t *processor, zend_op_array *dst TSRMLS_D
}
}
/* }}} */
#endif
/* {{{ call op_array ctor handler */
extern zend_bool xc_have_op_array_ctor;
static void xc_zend_extension_op_array_ctor_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC)

110
processor/processor.m4

@ -11,9 +11,7 @@ DECL_STRUCT_P_FUNC(`zend_constant')
DECL_STRUCT_P_FUNC(`zend_function')
DECL_STRUCT_P_FUNC(`xc_entry_var_t')
DECL_STRUCT_P_FUNC(`xc_entry_php_t')
#ifdef ZEND_ENGINE_2
DECL_STRUCT_P_FUNC(`zend_property_info')
#endif
/* }}} */
dnl ====================================================
#ifdef IS_CV
@ -33,18 +31,6 @@ DEF_STRUCT_P_FUNC(`zend_uint', , `dnl {{{
DONE_SIZE(sizeof(src[0]))
')
dnl }}}
#ifndef ZEND_ENGINE_2
DEF_STRUCT_P_FUNC(`int', , `dnl {{{
IFCOPY(`*dst = *src;')
IFDPRINT(`
INDENT()
fprintf(stderr, "%d\n", src[0]);
')
DONE_SIZE(sizeof(src[0]))
')
dnl }}}
#endif
#ifdef ZEND_ENGINE_2
DEF_STRUCT_P_FUNC(`zend_try_catch_element', , `dnl {{{
PROCESS(zend_uint, try_op)
PROCESS(zend_uint, catch_op)
@ -54,7 +40,6 @@ DEF_STRUCT_P_FUNC(`zend_try_catch_element', , `dnl {{{
#endif
')
dnl }}}
#endif
DEF_STRUCT_P_FUNC(`zend_brk_cont_element', , `dnl {{{
#ifdef ZEND_ENGINE_2_2
PROCESS(int, start)
@ -66,9 +51,7 @@ DEF_STRUCT_P_FUNC(`zend_brk_cont_element', , `dnl {{{
dnl }}}
DEF_HASH_TABLE_FUNC(`HashTable_zval_ptr', `zval_ptr')
DEF_HASH_TABLE_FUNC(`HashTable_zend_function', `zend_function')
#ifdef ZEND_ENGINE_2
DEF_HASH_TABLE_FUNC(`HashTable_zend_property_info', `zend_property_info')
#endif
DEF_STRUCT_P_FUNC(`zval', , `dnl {{{
IFDASM(`do {
zval_dtor(dst);
@ -132,10 +115,6 @@ proc_unicode:
case IS_OBJECT:
IFNOTMEMCPY(`IFCOPY(`memcpy(dst, src, sizeof(src[0]));')')
dnl STRUCT(value.obj)
#ifndef ZEND_ENGINE_2
STRUCT_P(zend_class_entry, value.obj.ce)
STRUCT_P(HashTable, value.obj.properties, HashTable_zval_ptr)
#endif
break;
default:
@ -153,10 +132,8 @@ dnl }}}
#ifdef ZEND_ENGINE_2_3
PROCESS(zend_uint, refcount__gc)
#elif defined(ZEND_ENGINE_2)
PROCESS(zend_uint, refcount)
#else
PROCESS(zend_ushort, refcount)
PROCESS(zend_uint, refcount)
#endif
')dnl IFDASM
')
@ -225,7 +202,6 @@ DEF_STRUCT_P_FUNC(`zval_ptr_nullable', , `dnl {{{
DONE_SIZE(sizeof(zval_ptr_nullable))
')
dnl }}}
#ifdef ZEND_ENGINE_2
DEF_STRUCT_P_FUNC(`zend_arg_info', , `dnl {{{
PROCESS(zend_uint, name_len)
PROC_ZSTRING_L(, name, name_len)
@ -244,7 +220,6 @@ DEF_STRUCT_P_FUNC(`zend_arg_info', , `dnl {{{
#endif
')
dnl }}}
#endif
#ifdef HAVE_XCACHE_CONSTANT
DEF_STRUCT_P_FUNC(`zend_constant', , `dnl {{{
STRUCT(zval, value)
@ -278,7 +253,6 @@ DEF_STRUCT_P_FUNC(`zend_function', , `dnl {{{
DONE_SIZE(sizeof(src[0]))
')
dnl }}}
#ifdef ZEND_ENGINE_2
DEF_STRUCT_P_FUNC(`zend_property_info', , `dnl {{{
PROCESS(zend_uint, flags)
PROCESS(int, name_length)
@ -297,7 +271,6 @@ DEF_STRUCT_P_FUNC(`zend_property_info', , `dnl {{{
#endif
')
dnl }}}
#endif
#ifdef ZEND_ENGINE_2_4
DEF_STRUCT_P_FUNC(`zend_trait_method_reference', , `dnl {{{
PROCESS(unsigned int, mname_len)
@ -360,31 +333,14 @@ DEF_STRUCT_P_FUNC(`zend_class_entry', , `dnl {{{
PROCESS(char, type)
PROCESS(zend_uint, name_length)
PROC_ZSTRING_L(, name, name_length)
IFRESTORE(`
#ifndef ZEND_ENGINE_2
/* just copy parent and resolve on install_class */
COPY(parent)
#else
PROC_CLASS_ENTRY_P(parent)
#endif
', `
PROC_CLASS_ENTRY_P(parent)
')
#ifdef ZEND_ENGINE_2
PROC_CLASS_ENTRY_P(parent)
PROCESS(int, refcount)
#else
STRUCT_P(int, refcount)
#endif
#ifndef ZEND_ENGINE_2_4
PROCESS(zend_bool, constants_updated)
#endif
#ifdef ZEND_ENGINE_2
PROCESS(zend_uint, ce_flags)
#endif
#ifdef ZEND_ENGINE_2
STRUCT(HashTable, properties_info, HashTable_zend_property_info)
#endif
#ifdef ZEND_ENGINE_2_4
STRUCT_ARRAY(int, default_properties_count, zval_ptr_nullable, default_properties_table)
@ -401,12 +357,11 @@ DEF_STRUCT_P_FUNC(`zend_class_entry', , `dnl {{{
STRUCT(HashTable, default_static_members, HashTable_zval_ptr)
IFCOPY(`dst->static_members = &dst->default_static_members;')
DONE(static_members)
# elif defined(ZEND_ENGINE_2)
# else
STRUCT_P(HashTable, static_members, HashTable_zval_ptr)
# endif
#endif /* ZEND_ENGINE_2_4 */
#ifdef ZEND_ENGINE_2
STRUCT(HashTable, constants_table, HashTable_zval_ptr)
#ifdef ZEND_ENGINE_2_2
@ -489,11 +444,6 @@ DEF_STRUCT_P_FUNC(`zend_class_entry', , `dnl {{{
/* # NOT DONE */
COPY(module)
# endif
#else /* ZEND_ENGINE_2 */
COPY(handle_function_call)
COPY(handle_property_get)
COPY(handle_property_set)
#endif
dnl must do after SETNULL(constructor) and dst->parent
STRUCT(HashTable, function_table, HashTable_zend_function)
IFRESTORE(`dst->function_table.pDestructor = ZEND_FUNCTION_DTOR;')
@ -600,9 +550,6 @@ DEF_STRUCT_P_FUNC(`znode', , `dnl {{{
case IS_UNUSED:
IFDASM(`PROCESS(zend_uint, u.var)')
PROCESS(zend_uint, u.opline_num)
#ifndef ZEND_ENGINE_2
PROCESS(zend_uint, u.fetch_type)
#endif
PROCESS(zend_uint, u.EA.type)
break;
')
@ -664,11 +611,9 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
#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);
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);
#endif
break;
case ZEND_JMPZ:
@ -681,11 +626,9 @@ DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{
#ifdef ZEND_JMP_SET_VAR
case ZEND_JMP_SET_VAR:
#endif
#ifdef ZEND_ENGINE_2
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);
#endif
break;
default:
@ -740,10 +683,8 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
#endif
/* deep */
STRUCT_P(HashTable, static_variables, HashTable_zval_ptr)
#ifdef ZEND_ENGINE_2
STRUCT_ARRAY(zend_uint, num_args, zend_arg_info, arg_info)
gc_arg_info = 1;
#endif
dst->filename = processor->entry_php_src->filepath;
#ifdef ZEND_ENGINE_2_4
if (src->literals) {
@ -787,9 +728,7 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
#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
break;
case ZEND_JMPZ:
@ -802,9 +741,7 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
#ifdef ZEND_JMP_SET_VAR
case ZEND_JMP_SET_VAR:
#endif
#ifdef ZEND_ENGINE_2
Z_OP(opline->op2).jmp_addr = &dst->opcodes[Z_OP(opline->op2).jmp_addr - src->opcodes];
#endif
break;
default:
@ -818,10 +755,8 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
#endif
) {
xc_gc_op_array_t gc_op_array;
#ifdef ZEND_ENGINE_2
gc_op_array.num_args = gc_arg_info ? dst->num_args : 0;
gc_op_array.arg_info = gc_arg_info ? dst->arg_info : NULL;
#endif
gc_op_array.opcodes = gc_opcodes ? dst->opcodes : NULL;
#ifdef ZEND_ENGINE_2_4
gc_op_array.literals = gc_literals ? dst->literals : NULL;
@ -838,7 +773,6 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
/* Common elements */
PROCESS(zend_uchar, type)
PROC_ZSTRING(, function_name)
#ifdef ZEND_ENGINE_2
PROCESS(zend_uint, fn_flags)
STRUCT_ARRAY(zend_uint, num_args, zend_arg_info, arg_info)
PROCESS(zend_uint, num_args)
@ -846,26 +780,6 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
# ifndef ZEND_ENGINE_2_4
PROCESS(zend_bool, pass_rest_by_reference)
# endif
#else
if (src->arg_types) {
ALLOC(dst->arg_types, zend_uchar, src->arg_types[0] + 1)
IFCOPY(`memcpy(dst->arg_types, src->arg_types, sizeof(src->arg_types[0]) * (src->arg_types[0]+1));')
IFDASM(`do {
int i;
zval *zv;
ALLOC_INIT_ZVAL(zv);
array_init(zv);
for (i = 0; i < src->arg_types[0]; i ++) {
add_next_index_long(zv, src->arg_types[i + 1]);
}
add_assoc_zval_ex(dst, ZEND_STRS("arg_types"), zv);
} while (0);')
DONE(arg_types)
}
else {
COPYNULL(arg_types)
}
#endif
#ifndef ZEND_ENGINE_2_4
PROCESS(unsigned char, return_reference)
#endif
@ -916,14 +830,9 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
#ifndef ZEND_ENGINE_2_4
PROCESS(zend_uint, current_brk_cont)
#endif
#ifndef ZEND_ENGINE_2
PROCESS(zend_bool, uses_globals)
#endif
#ifdef ZEND_ENGINE_2
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
@ -954,12 +863,10 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
PROC_STRING(script_encoding)
')
#endif
#ifdef ZEND_ENGINE_2
PROCESS(zend_uint, line_start)
PROCESS(zend_uint, line_end)
PROCESS(int, doc_comment_len)
PROC_ZSTRING_L(, doc_comment, doc_comment_len)
#endif
#ifdef ZEND_COMPILE_DELAYED_BINDING
PROCESS(zend_uint, early_binding);
#endif
@ -976,7 +883,6 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
} while (0);
IFRESTORE(`xc_fix_op_array_info(processor->entry_php_src, processor->php_src, dst, shallow_copy, op_array_info TSRMLS_CC);')
#ifdef ZEND_ENGINE_2
dnl mark it as -1 on store, and lookup parent on restore
IFSTORE(`dst->prototype = (processor->active_class_entry_src && src->prototype) ? (zend_function *) -1 : NULL;', `
IFRESTORE(`do {
@ -1005,16 +911,12 @@ DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{
')
DONE(prototype)
#endif
#ifdef ZEND_ENGINE_2
PROC_CLASS_ENTRY_P(scope)
IFCOPY(`
if (src->scope) {
xc_fix_method(processor, dst TSRMLS_CC);
}
')
#endif
IFRESTORE(`
if (xc_have_op_array_ctor) {
@ -1099,11 +1001,7 @@ DEF_STRUCT_P_FUNC(`xc_classinfo_t', , `dnl {{{
processor->active_op_array_infos_src = src->methodinfos;
processor->active_op_array_index = 0;
')
#ifdef ZEND_ENGINE_2
STRUCT_P(zend_class_entry, cest)
#else
STRUCT(zend_class_entry, cest)
#endif
STRUCT_P(zend_class_entry, class_entry)
#ifndef ZEND_COMPILE_DELAYED_BINDING
PROCESS(int, oplineno)
#endif

16
xcache.c

@ -114,17 +114,13 @@ static int xc_init_constant(int module_number TSRMLS_DC) /* {{{ */
}
/* }}} */
/* {{{ PHP_GINIT_FUNCTION(xcache) */
#pragma GCC push_options
#pragma GCC diagnostic ignored "-Wshadow"
#define xcache_globals xcacheglobals
#ifdef PHP_GINIT_FUNCTION
static PHP_GINIT_FUNCTION(xcache)
#else
static void xc_init_globals(zend_xcache_globals* xcache_globals TSRMLS_DC)
static void xc_init_globals(zend_xcache_globals *xcache_globals TSRMLS_DC)
#endif
{
#pragma GCC pop_options
memset(xcache_globals, 0, sizeof(zend_xcache_globals));
#ifdef HAVE_XCACHE_CONSTANT
@ -133,10 +129,12 @@ static void xc_init_globals(zend_xcache_globals* xcache_globals TSRMLS_DC)
zend_hash_init_ex(&xcache_globals->internal_function_table, 1, NULL, NULL, 1, 0);
zend_hash_init_ex(&xcache_globals->internal_class_table, 1, NULL, NULL, 1, 0);
}
#undef xcache_globals
/* }}} */
/* {{{ PHP_GSHUTDOWN_FUNCTION(xcache) */
static
#ifdef PHP_GSHUTDOWN_FUNCTION
#define xcache_globals xcacheglobals
PHP_GSHUTDOWN_FUNCTION(xcache)
#else
void xc_shutdown_globals(zend_xcache_globals* xcache_globals TSRMLS_DC)
@ -170,6 +168,7 @@ void xc_shutdown_globals(zend_xcache_globals* xcache_globals TSRMLS_DC)
zend_hash_destroy(&xcache_globals->internal_class_table);
}
}
#undef xcache_globals
/* }}} */
/* {{{ proto int xcache_get_refcount(mixed variable)
@ -886,12 +885,7 @@ zend_module_entry xcache_module_entry = {
PHP_GINIT(xcache),
PHP_GSHUTDOWN(xcache),
#endif
#ifdef ZEND_ENGINE_2
NULL /* ZEND_MODULE_POST_ZEND_DEACTIVATE_N */,
#else
NULL,
NULL,
#endif
STANDARD_MODULE_PROPERTIES_EX
};

12
xcache/xc_compatibility.c

@ -1,18 +1,6 @@
#include "xc_compatibility.h"
#ifndef ZEND_ENGINE_2_3
#include "ext/standard/php_string.h"
size_t xc_dirname(char *path, size_t len) /* {{{ */
{
#ifdef ZEND_ENGINE_2
return php_dirname(path, len);
#else
php_dirname(path, len);
return strlen(path);
#endif
}
/* }}} */
long xc_atol(const char *str, int str_len) /* {{{ */
{
long retval;

38
xcache/xc_compatibility.h

@ -27,12 +27,7 @@
#endif
#define NOTHING
/* ZendEngine code Switcher */
#ifndef ZEND_ENGINE_2
# define ZESW(v1, v2) v1
#else
# define ZESW(v1, v2) v2
#endif
/* ZendEngine version code Switcher */
#ifdef ZEND_ENGINE_2_4
# define ZEND_24(pre24, v24) v24
#else
@ -111,9 +106,9 @@ typedef znode znode_op;
# define Z_CLASS_INFO(className) (className)
static inline int php_output_start_default(TSRMLS_D) { php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); }
static inline int php_output_get_contents(zval *p TSRMLS_DC) { php_ob_get_buffer(p TSRMLS_CC); }
static inline int php_output_discard(TSRMLS_D) { php_end_ob_buffer(0, 0 TSRMLS_CC); }
static inline int php_output_start_default(TSRMLS_D) { return php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); }
static inline int php_output_get_contents(zval *p TSRMLS_DC) { return php_ob_get_buffer(p TSRMLS_CC); }
static inline int php_output_discard(TSRMLS_D) { php_end_ob_buffer(0, 0 TSRMLS_CC); return SUCCESS; }
#endif
/* unicode */
@ -212,24 +207,9 @@ typedef const zstr const_zstr;
#endif
/* }}} */
/* the class entry type to be stored in class_table */
typedef ZESW(zend_class_entry, zend_class_entry*) xc_cest_t;
/* xc_cest_t to (zend_class_entry*) */
#define CestToCePtr(st) (ZESW(\
&(st), \
st \
) )
/* ZCEP=zend class entry ptr */
#define ZCEP_REFCOUNT_PTR(pce) (ZESW( \
(pce)->refcount, \
&((pce)->refcount) \
))
#ifndef ZEND_ENGINE_2_3
size_t xc_dirname(char *path, size_t len);
#define zend_dirname xc_dirname
#include "ext/standard/php_string.h"
static inline size_t zend_dirname(char *path, size_t len) { return php_dirname(path, len); }
long xc_atol(const char *str, int len);
#define zend_atol xc_atol
#endif
@ -239,11 +219,7 @@ long xc_atol(const char *str, int len);
#endif
#ifndef PHP_FE_END
# ifdef ZEND_ENGINE_2
# define PHP_FE_END {NULL, NULL, NULL, 0, 0}
# else
# define PHP_FE_END {NULL, NULL, NULL}
# endif
# define PHP_FE_END {NULL, NULL, NULL, 0, 0}
#endif
#endif /* XC_COMPATIBILITY_H_54F26ED90198353558718191D5EE244C */

4
xcache/xc_const_string.c

@ -71,10 +71,8 @@ const char *xc_get_data_type(zend_uchar data_type)
# include "xc_const_string_opcodes_php5.3.h"
#elif defined(ZEND_ENGINE_2_1)
# include "xc_const_string_opcodes_php5.1.h"
#elif defined(ZEND_ENGINE_2)
# include "xc_const_string_opcodes_php5.0.h"
#else
# include "xc_const_string_opcodes_php4.x.h"
# include "xc_const_string_opcodes_php5.0.h"
#endif
zend_uchar xc_get_opcode_count()

116
xcache/xc_const_string_opcodes_php4.x.h

@ -1,116 +0,0 @@
/* size = 113 */
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 */ "JMP_NO_CTOR",
/* 70 */ "FREE",
/* 71 */ "INIT_ARRAY",
/* 72 */ "ADD_ARRAY_ELEMENT",
/* 73 */ "INCLUDE_OR_EVAL",
/* 74 */ "UNSET_VAR",
/* 75 */ "UNSET_DIM_OBJ",
/* 76 */ "ISSET_ISEMPTY",
/* 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 */ "DECLARE_FUNCTION_OR_CLASS",
/* 101 */ "EXT_STMT",
/* 102 */ "EXT_FCALL_BEGIN",
/* 103 */ "EXT_FCALL_END",
/* 104 */ "EXT_NOP",
/* 105 */ "TICKS",
/* 106 */ "SEND_VAR_NO_REF",
/* 107 */ "UNDEF",
/* 108 */ "UNDEF",
/* 109 */ "UNDEF",
/* 110 */ "DO_FCALL_BY_FUNC",
/* 111 */ "INIT_FCALL_BY_FUNC",
/* 112 */ "UNDEF"
};

2
xcache/xc_const_string_opcodes_php5.3.h

@ -151,7 +151,9 @@ static const char *const xc_opcode_names[] = {
/* 148 */ "ISSET_ISEMPTY_PROP_OBJ",
/* 149 */ "HANDLE_EXCEPTION",
/* 150 */ "USER_OPCODE",
#ifdef ZEND_ENGINE_2_3
/* 151 */ "UNDEF",
/* 152 */ "JMP_SET",
/* 153 */ "DECLARE_LAMBDA_FUNCTION"
#endif
};

3
xcache/xc_ini.h

@ -12,8 +12,5 @@ PHP_INI_MH(xcache_OnUpdateDummy);
PHP_INI_MH(xcache_OnUpdateULong);
PHP_INI_MH(xcache_OnUpdateBool);
PHP_INI_MH(xcache_OnUpdateString);
#ifndef ZEND_ENGINE_2
#define OnUpdateLong OnUpdateInt
#endif
#endif /* XC_INI_H_E208B8E597E7FAD950D249BE9C6B6F53 */

6
xcache/xc_opcode_spec.c

@ -4,11 +4,7 @@
/* {{{ opcode_spec */
#define OPSPEC(ext, op1, op2, res) { OPSPEC_##ext, OPSPEC_##op1, OPSPEC_##op2, OPSPEC_##res },
#ifdef ZEND_ENGINE_2
# define OPSPEC_VAR_2 OPSPEC_STD
#else
# define OPSPEC_VAR_2 OPSPEC_VAR
#endif
#define OPSPEC_VAR_2 OPSPEC_STD
#include "xc_opcode_spec_def.h"
zend_uchar xc_get_opcode_spec_count()

63
xcache/xc_opcode_spec_def.h

@ -22,7 +22,6 @@ static const xc_opcode_spec_t xc_opcode_spec[] = {
OPSPEC( UNUSED, STD, STD, TMP) /* 20 IS_SMALLER_OR_EQUAL */
OPSPEC( CAST, STD, UNUSED, TMP) /* 21 CAST */
OPSPEC( UNUSED, STD, UNUSED, TMP) /* 22 QM_ASSIGN */
#ifdef ZEND_ENGINE_2
OPSPEC( ASSIGN, STD, STD, VAR) /* 23 ASSIGN_ADD */
OPSPEC( ASSIGN, STD, STD, VAR) /* 24 ASSIGN_SUB */
OPSPEC( ASSIGN, STD, STD, VAR) /* 25 ASSIGN_MUL */
@ -34,19 +33,6 @@ static const xc_opcode_spec_t xc_opcode_spec[] = {
OPSPEC( ASSIGN, STD, STD, VAR) /* 31 ASSIGN_BW_OR */
OPSPEC( ASSIGN, STD, STD, VAR) /* 32 ASSIGN_BW_AND */
OPSPEC( ASSIGN, STD, STD, VAR) /* 33 ASSIGN_BW_XOR */
#else
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
OPSPEC( UNUSED, VAR, STD, VAR)
#endif
OPSPEC( UNUSED, VAR, UNUSED, VAR) /* 34 PRE_INC */
OPSPEC( UNUSED, VAR, UNUSED, VAR) /* 35 PRE_DEC */
OPSPEC( UNUSED, VAR, UNUSED, TMP) /* 36 POST_INC */
@ -55,23 +41,12 @@ static const xc_opcode_spec_t xc_opcode_spec[] = {
OPSPEC( UNUSED, VAR, VAR, VAR) /* 39 ASSIGN_REF */
OPSPEC( UNUSED, STD, UNUSED, UNUSED) /* 40 ECHO */
OPSPEC( UNUSED, STD, UNUSED, TMP) /* 41 PRINT */
#ifdef ZEND_ENGINE_2
OPSPEC( UNUSED, JMPADDR, UNUSED, UNUSED) /* 42 JMP */
OPSPEC( UNUSED, STD, JMPADDR, UNUSED) /* 43 JMPZ */
OPSPEC( UNUSED, STD, JMPADDR, UNUSED) /* 44 JMPNZ */
#else
OPSPEC( UNUSED, OPLINE, UNUSED, UNUSED)
OPSPEC( UNUSED, STD, OPLINE, UNUSED)
OPSPEC( UNUSED, STD, OPLINE, UNUSED)
#endif
OPSPEC( OPLINE, STD, OPLINE, UNUSED) /* 45 JMPZNZ */
#ifdef ZEND_ENGINE_2
OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 46 JMPZ_EX */
OPSPEC( UNUSED, STD, JMPADDR, TMP) /* 47 JMPNZ_EX */
#else
OPSPEC( UNUSED, STD, OPLINE, TMP)
OPSPEC( UNUSED, STD, OPLINE, TMP)
#endif
OPSPEC( UNUSED, STD, STD, TMP) /* 48 CASE */
OPSPEC( BIT, STD, UNUSED, UNUSED) /* 49 SWITCH_FREE */
OPSPEC( UNUSED, BRK, STD, UNUSED) /* 50 BRK */
@ -84,24 +59,15 @@ static const xc_opcode_spec_t xc_opcode_spec[] = {
OPSPEC( UNUSED, UNUSED, UNUSED, TMP) /* 57 BEGIN_SILENCE */
OPSPEC( UNUSED, TMP, UNUSED, UNUSED) /* 58 END_SILENCE */
OPSPEC(INIT_FCALL, STD, STD, UNUSED) /* 59 INIT_FCALL_BY_NAME */
#ifdef ZEND_ENGINE_2
OPSPEC( FCALL, STD, OPLINE, VAR) /* 60 DO_FCALL */
OPSPEC( FCALL, STD, OPLINE, VAR) /* 61 DO_FCALL_BY_NAME */
#else
OPSPEC( FCALL, STD, UNUSED, VAR)
OPSPEC( FCALL, STD, UNUSED, VAR)