From a4ac5b9f05367c66eb22ae3a0274968db697420c Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 3 Jun 2014 01:24:29 +0300 Subject: [PATCH] showbc: Make sure it's possible to trace MAKE_FUNCTION arg to actual bytecode. --- py/bc.h | 2 +- py/emitglue.c | 2 +- py/showbc.c | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/py/bc.h b/py/bc.h index 6c604fe1c..915a0f269 100644 --- a/py/bc.h +++ b/py/bc.h @@ -51,7 +51,7 @@ typedef struct _mp_code_state { mp_vm_return_kind_t mp_execute_bytecode(const byte *code, const mp_obj_t *args, uint n_args, const mp_obj_t *args2, uint n_args2, mp_obj_t *ret); mp_vm_return_kind_t mp_execute_bytecode2(mp_code_state *code_state, volatile mp_obj_t inject_exc); -void mp_bytecode_print(const byte *code, int len); +void mp_bytecode_print(const void *descr, const byte *code, int len); void mp_bytecode_print2(const byte *code, int len); // Helper macros to access pointer with least significant bit holding a flag diff --git a/py/emitglue.c b/py/emitglue.c index 528c3bd36..fa62ace6d 100644 --- a/py/emitglue.c +++ b/py/emitglue.c @@ -81,7 +81,7 @@ void mp_emit_glue_assign_bytecode(mp_raw_code_t *rc, byte *code, uint len, uint #endif #if MICROPY_DEBUG_PRINTERS if (mp_verbose_flag > 0) { - mp_bytecode_print(code, len); + mp_bytecode_print(rc, code, len); } #endif } diff --git a/py/showbc.c b/py/showbc.c index 816936841..5a4e918cd 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -56,7 +56,7 @@ void mp_bytecode_print2(const byte *ip, int len); -void mp_bytecode_print(const byte *ip, int len) { +void mp_bytecode_print(const void *descr, const byte *ip, int len) { const byte *ip_start = ip; // get code info size @@ -66,7 +66,8 @@ void mp_bytecode_print(const byte *ip, int len) { qstr source_file = code_info[4] | (code_info[5] << 8) | (code_info[6] << 16) | (code_info[7] << 24); qstr block_name = code_info[8] | (code_info[9] << 8) | (code_info[10] << 16) | (code_info[11] << 24); - printf("File %s, code block '%s' (%d bytes)\n", qstr_str(source_file), qstr_str(block_name), len); + printf("File %s, code block '%s' (descriptor: %p, bytecode @%p %d bytes)\n", + qstr_str(source_file), qstr_str(block_name), descr, code_info, len); // bytecode prelude: state size and exception stack size; 16 bit uints { @@ -434,25 +435,25 @@ void mp_bytecode_print2(const byte *ip, int len) { case MP_BC_MAKE_FUNCTION: DECODE_PTR; - printf("MAKE_FUNCTION " UINT_FMT, unum); + printf("MAKE_FUNCTION %p", (void*)unum); break; case MP_BC_MAKE_FUNCTION_DEFARGS: DECODE_PTR; - printf("MAKE_FUNCTION_DEFARGS " UINT_FMT, unum); + printf("MAKE_FUNCTION_DEFARGS %p", (void*)unum); break; case MP_BC_MAKE_CLOSURE: { DECODE_PTR; machine_uint_t n_closed_over = *ip++; - printf("MAKE_CLOSURE " UINT_FMT " " UINT_FMT, unum, n_closed_over); + printf("MAKE_CLOSURE %p " UINT_FMT, (void*)unum, n_closed_over); break; } case MP_BC_MAKE_CLOSURE_DEFARGS: { DECODE_PTR; machine_uint_t n_closed_over = *ip++; - printf("MAKE_CLOSURE_DEFARGS " UINT_FMT " " UINT_FMT, unum, n_closed_over); + printf("MAKE_CLOSURE_DEFARGS %p " UINT_FMT, (void*)unum, n_closed_over); break; }