summaryrefslogtreecommitdiff
path: root/tools/mpy-tool.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-09-06 23:55:15 +1000
committerDamien George <damien.p.george@gmail.com>2019-09-06 23:55:15 +1000
commitc69f58e6b97b954d06734797f06feeab4e510855 (patch)
tree4a03c5ee6bf82b50f81aa95956e99cd3707731d9 /tools/mpy-tool.py
parentbd2e46e0a575029367caed118c15a73a5f9851b5 (diff)
tools/mpy-tool.py: Fix freezing of non-bytecode funcs with settrace.
Only bytecode functions can be profiled at this stage. Native functions (eg inline assembler) may not even have a valid prelude. Fixes issue #5075.
Diffstat (limited to 'tools/mpy-tool.py')
-rwxr-xr-xtools/mpy-tool.py33
1 files changed, 17 insertions, 16 deletions
diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index e5c8f0959..e159165f1 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -412,22 +412,23 @@ class RawCode(object):
print(' .fun_data_len = %u,' % len(self.bytecode))
print(' .n_obj = %u,' % len(self.objs))
print(' .n_raw_code = %u,' % len(self.raw_codes))
- print(' #if MICROPY_PY_SYS_SETTRACE')
- print(' .prelude = {')
- print(' .n_state = %u,' % self.prelude[0])
- print(' .n_exc_stack = %u,' % self.prelude[1])
- print(' .scope_flags = %u,' % self.prelude[2])
- print(' .n_pos_args = %u,' % self.prelude[3])
- print(' .n_kwonly_args = %u,' % self.prelude[4])
- print(' .n_def_pos_args = %u,' % self.prelude[5])
- print(' .qstr_block_name = %s,' % self.simple_name.qstr_id)
- print(' .qstr_source_file = %s,' % self.source_file.qstr_id)
- print(' .line_info = fun_data_%s + %u,' % (self.escaped_name, 0)) # TODO
- print(' .locals = fun_data_%s + %u,' % (self.escaped_name, 0)) # TODO
- print(' .opcodes = fun_data_%s + %u,' % (self.escaped_name, self.ip))
- print(' },')
- print(' .line_of_definition = %u,' % 0) # TODO
- print(' #endif')
+ if self.code_kind == MP_CODE_BYTECODE:
+ print(' #if MICROPY_PY_SYS_SETTRACE')
+ print(' .prelude = {')
+ print(' .n_state = %u,' % self.prelude[0])
+ print(' .n_exc_stack = %u,' % self.prelude[1])
+ print(' .scope_flags = %u,' % self.prelude[2])
+ print(' .n_pos_args = %u,' % self.prelude[3])
+ print(' .n_kwonly_args = %u,' % self.prelude[4])
+ print(' .n_def_pos_args = %u,' % self.prelude[5])
+ print(' .qstr_block_name = %s,' % self.simple_name.qstr_id)
+ print(' .qstr_source_file = %s,' % self.source_file.qstr_id)
+ print(' .line_info = fun_data_%s + %u,' % (self.escaped_name, 0)) # TODO
+ print(' .locals = fun_data_%s + %u,' % (self.escaped_name, 0)) # TODO
+ print(' .opcodes = fun_data_%s + %u,' % (self.escaped_name, self.ip))
+ print(' },')
+ print(' .line_of_definition = %u,' % 0) # TODO
+ print(' #endif')
print(' #if MICROPY_EMIT_MACHINE_CODE')
print(' .prelude_offset = %u,' % self.prelude_offset)
print(' .n_qstr = %u,' % len(qstr_links))