22#define GEN_MAP(n, name) do { \
23 ZVAL_LONG(&tmp, (zend_long)(uintptr_t)zend_opcode_handlers[n]); \
24 zend_hash_str_add(&vm_trace_ht, #name, sizeof(#name) - 1, &tmp); \
27#define VM_TRACE_START() do { \
29 zend_hash_init(&vm_trace_ht, 0, NULL, NULL, 1); \
30 VM_HANDLERS(GEN_MAP) \
31 zend_vm_trace_init(); \
35# define ADDR_FMT "%016I64x"
36#elif SIZEOF_SIZE_T == 4
37# define ADDR_FMT "%08zx"
38#elif SIZEOF_SIZE_T == 8
39# define ADDR_FMT "%016zx"
41# error "Unknown SIZEOF_SIZE_T"
46static int zend_vm_trace_compare(
const Bucket *p1,
const Bucket *p2)
57static void zend_vm_trace_init(
void)
64 f =
fopen(
"zend_vm.map",
"w+");
76 fprintf(f, ADDR_FMT
" "ADDR_FMT
" t %s\n", prev_addr, 0,
ZSTR_VAL(prev_key));
fprintf($stream, string $format, mixed ... $values)
fopen(string $filename, string $mode, bool $use_include_path=false, $context=null)
unsigned char key[REFLECTION_KEY_LEN]
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
int(* bucket_compare_func_t)(Bucket *a, Bucket *b)
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(ht, _key, _val)
struct _zend_string zend_string
struct _zend_array HashTable