}
/* }}} */
-void zend_init_opcodes_handlers(void);
-
static void module_destructor_zval(zval *zv) /* {{{ */
{
zend_module_entry *module = (zend_module_entry*)Z_PTR_P(zv);
/* Set up the default garbage collection implementation. */
gc_collect_cycles = zend_gc_collect_cycles;
- zend_init_opcodes_handlers();
+ zend_vm_init();
/* set up version */
zend_version_info = strdup(ZEND_CORE_VERSION_INFO);
void zend_shutdown(void) /* {{{ */
{
+ zend_vm_dtor();
+
zend_destroy_rsrc_list(&EG(persistent_list));
zend_destroy_modules();
ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data *ex);
ZEND_API int zend_vm_kind(void);
+void zend_vm_init(void);
+void zend_vm_dtor(void);
+
END_EXTERN_C()
#define ZEND_VM_SET_OPCODE_HANDLER(opline) zend_vm_set_opcode_handler(opline)
#ifndef VM_TRACE
# define VM_TRACE(op)
#endif
+#ifndef VM_TRACE_START()
+# define VM_TRACE_START()
+#endif
+#ifndef VM_TRACE_END()
+# define VM_TRACE_END()
+#endif
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
#define HYBRID_NEXT() goto *(void**)(OPLINE->handler)
#define HYBRID_SWITCH() HYBRID_NEXT();
}
-void zend_init_opcodes_handlers(void)
+void zend_vm_init(void)
{
static const void * const labels[] = {
ZEND_NOP_SPEC_HANDLER,
zend_handlers_count = sizeof(labels) / sizeof(void*);
zend_spec_handlers = specs;
#endif
+ VM_TRACE_START();
+}
+
+void zend_vm_dtor(void)
+{
+ VM_TRACE_END();
}
static HashTable *zend_handlers_table = NULL;
void {%INITIALIZER_NAME%}(void)
{
{%EXTERNAL_LABELS%}
+ VM_TRACE_START();
+}
+
+void zend_vm_dtor(void)
+{
+ VM_TRACE_END();
}
static HashTable *zend_handlers_table = NULL;
out($f,"#ifndef VM_TRACE\n");
out($f,"# define VM_TRACE(op)\n");
out($f,"#endif\n");
+ out($f,"#ifndef VM_TRACE_START()\n");
+ out($f,"# define VM_TRACE_START()\n");
+ out($f,"#endif\n");
+ out($f,"#ifndef VM_TRACE_END()\n");
+ out($f,"# define VM_TRACE_END()\n");
+ out($f,"#endif\n");
switch ($kind) {
case ZEND_VM_KIND_HYBRID:
out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
out($f, "255\n};\n\n");
// Generate specialized executor
- gen_executor($f, $skl, ZEND_VM_SPEC, ZEND_VM_KIND, "execute", "zend_init_opcodes_handlers");
+ gen_executor($f, $skl, ZEND_VM_SPEC, ZEND_VM_KIND, "execute", "zend_vm_init");
// Generate zend_vm_get_opcode_handler() function
out($f, "static const void *zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)\n");