From: krakjoe Date: Sun, 10 Nov 2013 18:28:50 +0000 (+0000) Subject: print opcode names X-Git-Tag: php-5.6.0alpha1~110^2~519 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cc85f285c6eb1de28c5f259d1fb99a40ee443ba3;p=php print opcode names --- diff --git a/phpdbg_prompt.c b/phpdbg_prompt.c index 252af0a16f..39ad020310 100644 --- a/phpdbg_prompt.c +++ b/phpdbg_prompt.c @@ -329,11 +329,184 @@ int phpdbg_interactive(int argc, char **argv TSRMLS_DC) /* {{{ */ return SUCCESS; } /* }}} */ +static const char *phpdbg_decode_opcode(zend_uchar opcode TSRMLS_DC) { /* {{{ */ + switch (opcode) { + case ZEND_NOP: return "ZEND_NOP"; + case ZEND_ADD: return "ZEND_ADD"; + case ZEND_SUB: return "ZEND_SUB"; + case ZEND_MUL: return "ZEND_MUL"; + case ZEND_DIV: return "ZEND_DIV"; + case ZEND_MOD: return "ZEND_MOD"; + case ZEND_SL: return "ZEND_SL"; + case ZEND_SR: return "ZEND_SR"; + case ZEND_CONCAT: return "ZEND_CONCAT"; + case ZEND_BW_OR: return "ZEND_BW_OR"; + case ZEND_BW_AND: return "ZEND_BW_AND"; + case ZEND_BW_XOR: return "ZEND_BW_XOR"; + case ZEND_BW_NOT: return "ZEND_BW_NOT"; + case ZEND_BOOL_NOT: return "ZEND_BOOL_NOT"; + case ZEND_BOOL_XOR: return "ZEND_BOOL_XOR"; + case ZEND_IS_IDENTICAL: return "ZEND_IS_IDENTICAL"; + case ZEND_IS_NOT_IDENTICAL: return "ZEND_IS_NOT_IDENTICAL"; + case ZEND_IS_EQUAL: return "ZEND_IS_EQUAL"; + case ZEND_IS_NOT_EQUAL: return "ZEND_IS_NOT_EQUAL"; + case ZEND_IS_SMALLER: return "ZEND_IS_SMALLER"; + case ZEND_IS_SMALLER_OR_EQUAL: return "ZEND_IS_SMALLER_OR_EQUAL"; + case ZEND_CAST: return "ZEND_CAST"; + case ZEND_QM_ASSIGN: return "ZEND_QM_ASSIGN"; + case ZEND_ASSIGN_ADD: return "ZEND_ASSIGN_ADD"; + case ZEND_ASSIGN_SUB: return "ZEND_ASSIGN_SUB"; + case ZEND_ASSIGN_MUL: return "ZEND_ASSIGN_MUL"; + case ZEND_ASSIGN_DIV: return "ZEND_ASSIGN_DIV"; + case ZEND_ASSIGN_MOD: return "ZEND_ASSIGN_MOD"; + case ZEND_ASSIGN_SL: return "ZEND_ASSIGN_SL"; + case ZEND_ASSIGN_SR: return "ZEND_ASSIGN_SR"; + case ZEND_ASSIGN_CONCAT: return "ZEND_ASSIGN_CONCAT"; + case ZEND_ASSIGN_BW_OR: return "ZEND_ASSIGN_BW_OR"; + case ZEND_ASSIGN_BW_AND: return "ZEND_ASSIGN_BW_AND"; + case ZEND_ASSIGN_BW_XOR: return "ZEND_ASSIGN_BW_XOR"; + case ZEND_PRE_INC: return "ZEND_PRE_INC"; + case ZEND_PRE_DEC: return "ZEND_PRE_DEC"; + case ZEND_POST_INC: return "ZEND_POST_INC"; + case ZEND_POST_DEC: return "ZEND_POST_DEC"; + case ZEND_ASSIGN: return "ZEND_ASSIGN"; + case ZEND_ASSIGN_REF: return "ZEND_ASSIGN_REF"; + case ZEND_ECHO: return "ZEND_ECHO"; + case ZEND_PRINT: return "ZEND_PRINT"; + case ZEND_JMP: return "ZEND_JMP"; + case ZEND_JMPZ: return "ZEND_JMPZ"; + case ZEND_JMPNZ: return "ZEND_JMPNZ"; + case ZEND_JMPZNZ: return "ZEND_JMPZNZ"; + case ZEND_JMPZ_EX: return "ZEND_JMPZ_EX"; + case ZEND_JMPNZ_EX: return "ZEND_JMPNZ_EX"; + case ZEND_CASE: return "ZEND_CASE"; + case ZEND_SWITCH_FREE: return "ZEND_SWITCH_FREE"; + case ZEND_BRK: return "ZEND_BRK"; + case ZEND_CONT: return "ZEND_CONT"; + case ZEND_BOOL: return "ZEND_BOOL"; + case ZEND_INIT_STRING: return "ZEND_INIT_STRING"; + case ZEND_ADD_CHAR: return "ZEND_ADD_CHAR"; + case ZEND_ADD_STRING: return "ZEND_ADD_STRING"; + case ZEND_ADD_VAR: return "ZEND_ADD_VAR"; + case ZEND_BEGIN_SILENCE: return "ZEND_BEGIN_SILENCE"; + case ZEND_END_SILENCE: return "ZEND_END_SILENCE"; + case ZEND_INIT_FCALL_BY_NAME: return "ZEND_INIT_FCALL_BY_NAME"; + case ZEND_DO_FCALL: return "ZEND_DO_FCALL"; + case ZEND_DO_FCALL_BY_NAME: return "ZEND_DO_FCALL_BY_NAME"; + case ZEND_RETURN: return "ZEND_RETURN"; + case ZEND_RECV: return "ZEND_RECV"; + case ZEND_RECV_INIT: return "ZEND_RECV_INIT"; + case ZEND_SEND_VAL: return "ZEND_SEND_VAL"; + case ZEND_SEND_VAR: return "ZEND_SEND_VAR"; + case ZEND_SEND_REF: return "ZEND_SEND_REF"; + case ZEND_NEW: return "ZEND_NEW"; + case ZEND_INIT_NS_FCALL_BY_NAME: return "ZEND_INIT_NS_FCALL_BY_NAME"; + case ZEND_FREE: return "ZEND_FREE"; + case ZEND_INIT_ARRAY: return "ZEND_INIT_ARRAY"; + case ZEND_ADD_ARRAY_ELEMENT: return "ZEND_ADD_ARRAY_ELEMENT"; + case ZEND_INCLUDE_OR_EVAL: return "ZEND_INCLUDE_OR_EVAL"; + case ZEND_UNSET_VAR: return "ZEND_UNSET_VAR"; + case ZEND_UNSET_DIM: return "ZEND_UNSET_DIM"; + case ZEND_UNSET_OBJ: return "ZEND_UNSET_OBJ"; + case ZEND_FE_RESET: return "ZEND_FE_RESET"; + case ZEND_FE_FETCH: return "ZEND_FE_FETCH"; + case ZEND_EXIT: return "ZEND_EXIT"; + case ZEND_FETCH_R: return "ZEND_FETCH_R"; + case ZEND_FETCH_DIM_R: return "ZEND_FETCH_DIM_R"; + case ZEND_FETCH_OBJ_R: return "ZEND_FETCH_OBJ_R"; + case ZEND_FETCH_W: return "ZEND_FETCH_W"; + case ZEND_FETCH_DIM_W: return "ZEND_FETCH_DIM_W"; + case ZEND_FETCH_OBJ_W: return "ZEND_FETCH_OBJ_W"; + case ZEND_FETCH_RW: return "ZEND_FETCH_RW"; + case ZEND_FETCH_DIM_RW: return "ZEND_FETCH_DIM_RW"; + case ZEND_FETCH_OBJ_RW: return "ZEND_FETCH_OBJ_RW"; + case ZEND_FETCH_IS: return "ZEND_FETCH_IS"; + case ZEND_FETCH_DIM_IS: return "ZEND_FETCH_DIM_IS"; + case ZEND_FETCH_OBJ_IS: return "ZEND_FETCH_OBJ_IS"; + case ZEND_FETCH_FUNC_ARG: return "ZEND_FETCH_FUNC_ARG"; + case ZEND_FETCH_DIM_FUNC_ARG: return "ZEND_FETCH_DIM_FUNC_ARG"; + case ZEND_FETCH_OBJ_FUNC_ARG: return "ZEND_FETCH_OBJ_FUNC_ARG"; + case ZEND_FETCH_UNSET: return "ZEND_FETCH_UNSET"; + case ZEND_FETCH_DIM_UNSET: return "ZEND_FETCH_DIM_UNSET"; + case ZEND_FETCH_OBJ_UNSET: return "ZEND_FETCH_OBJ_UNSET"; + case ZEND_FETCH_DIM_TMP_VAR: return "ZEND_FETCH_DIM_TMP_VAR"; + case ZEND_FETCH_CONSTANT: return "ZEND_FETCH_CONSTANT"; + case ZEND_GOTO: return "ZEND_GOTO"; + case ZEND_EXT_STMT: return "ZEND_EXT_STMT"; + case ZEND_EXT_FCALL_BEGIN: return "ZEND_EXT_FCALL_BEGIN"; + case ZEND_EXT_FCALL_END: return "ZEND_EXT_FCALL_END"; + case ZEND_EXT_NOP: return "ZEND_EXT_NOP"; + case ZEND_TICKS: return "ZEND_TICKS"; + case ZEND_SEND_VAR_NO_REF: return "ZEND_SEND_VAR_NO_REF"; + case ZEND_CATCH: return "ZEND_CATCH"; + case ZEND_THROW: return "ZEND_THROW"; + case ZEND_FETCH_CLASS: return "ZEND_FETCH_CLASS"; + case ZEND_CLONE: return "ZEND_CLONE"; + case ZEND_RETURN_BY_REF: return "ZEND_RETURN_BY_REF"; + case ZEND_INIT_METHOD_CALL: return "ZEND_INIT_METHOD_CALL"; + case ZEND_INIT_STATIC_METHOD_CALL: return "ZEND_INIT_STATIC_METHOD_CALL"; + case ZEND_ISSET_ISEMPTY_VAR: return "ZEND_ISSET_ISEMPTY_VAR"; + case ZEND_ISSET_ISEMPTY_DIM_OBJ: return "ZEND_ISSET_ISEMPTY_DIM_OBJ"; + case ZEND_PRE_INC_OBJ: return "ZEND_PRE_INC_OBJ"; + case ZEND_PRE_DEC_OBJ: return "ZEND_PRE_DEC_OBJ"; + case ZEND_POST_INC_OBJ: return "ZEND_POST_INC_OBJ"; + case ZEND_POST_DEC_OBJ: return "ZEND_POST_DEC_OBJ"; + case ZEND_ASSIGN_OBJ: return "ZEND_ASSIGN_OBJ"; + case ZEND_INSTANCEOF: return "ZEND_INSTANCEOF"; + case ZEND_DECLARE_CLASS: return "ZEND_DECLARE_CLASS"; + case ZEND_DECLARE_INHERITED_CLASS: return "ZEND_DECLARE_INHERITED_CLASS"; + case ZEND_DECLARE_FUNCTION: return "ZEND_DECLARE_FUNCTION"; + case ZEND_RAISE_ABSTRACT_ERROR: return "ZEND_RAISE_ABSTRACT_ERROR"; + case ZEND_DECLARE_CONST: return "ZEND_DECLARE_CONST"; + case ZEND_ADD_INTERFACE: return "ZEND_ADD_INTERFACE"; + case ZEND_DECLARE_INHERITED_CLASS_DELAYED: return "ZEND_DECLARE_INHERITED_CLASS_DELAYED"; + case ZEND_VERIFY_ABSTRACT_CLASS: return "ZEND_VERIFY_ABSTRACT_CLASS"; + case ZEND_ASSIGN_DIM: return "ZEND_ASSIGN_DIM"; + case ZEND_ISSET_ISEMPTY_PROP_OBJ: return "ZEND_ISSET_ISEMPTY_PROP_OBJ"; + case ZEND_HANDLE_EXCEPTION: return "ZEND_HANDLE_EXCEPTION"; + case ZEND_USER_OPCODE: return "ZEND_USER_OPCODE"; +#ifdef ZEND_JMP_SET + case ZEND_JMP_SET: return "ZEND_JMP_SET"; +#endif + case ZEND_DECLARE_LAMBDA_FUNCTION: return "ZEND_DECLARE_LAMBDA_FUNCTION"; +#ifdef ZEND_ADD_TRAIT + case ZEND_ADD_TRAIT: return "ZEND_ADD_TRAIT"; +#endif +#ifdef ZEND_BIND_TRAITS + case ZEND_BIND_TRAITS: return "ZEND_BIND_TRAITS"; +#endif +#ifdef ZEND_SEPARATE + case ZEND_SEPARATE: return "ZEND_SEPARATE"; +#endif +#ifdef ZEND_QM_ASSIGN_VAR + case ZEND_QM_ASSIGN_VAR: return "ZEND_QM_ASSIGN_VAR"; +#endif +#ifdef ZEND_JMP_SET_VAR + case ZEND_JMP_SET_VAR: return "ZEND_JMP_SET_VAR"; +#endif + case ZEND_DISCARD_EXCEPTION: return "ZEND_DISCARD_EXCEPTION"; + case ZEND_YIELD: return "ZEND_YIELD"; + case ZEND_GENERATOR_RETURN: return "ZEND_GENERATOR_RETURN"; +#ifdef ZEND_FAST_CALL + case ZEND_FAST_CALL: return "ZEND_FAST_CALL"; +#endif +#ifdef ZEND_FAST_RET + case ZEND_FAST_RET: return "ZEND_FAST_RET"; +#endif +#ifdef ZEND_RECV_VARIADIC + case ZEND_RECV_VARIADIC: return "ZEND_RECV_VARIADIC"; +#endif + case ZEND_OP_DATA: return "ZEND_OP_DATA"; + + default: return "UNKNOWN"; + } +} /* }}} */ + static void phpdbg_print_opline(zend_execute_data *execute_data TSRMLS_DC) { /* {{{ */ zend_op *opline = execute_data->opline; printf( - "[OPLINE: %p:%d]\n", opline, opline->opcode); + "[OPLINE: %p:%s]\n", opline, phpdbg_decode_opcode(opline->opcode TSRMLS_CC)); } /* }}} */ void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC)