Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
c5e32c69
Commit
c5e32c69
authored
Apr 23, 2014
by
Paul Sokolovsky
Browse files
vm: Add rudimentary bytecode execution tracing capability.
parent
4c6b3759
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/bc.h
View file @
c5e32c69
...
...
@@ -13,6 +13,7 @@ typedef struct _mp_exc_stack {
mp_vm_return_kind_t
mp_execute_byte_code
(
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_byte_code_2
(
const
byte
*
code_info
,
const
byte
**
ip_in_out
,
mp_obj_t
*
fastn
,
mp_obj_t
**
sp_in_out
,
mp_exc_stack_t
*
exc_stack
,
mp_exc_stack_t
**
exc_sp_in_out
,
volatile
mp_obj_t
inject_exc
);
void
mp_byte_code_print
(
const
byte
*
code
,
int
len
);
void
mp_byte_code_print2
(
const
byte
*
code
,
int
len
);
// Helper macros to access pointer with least significant bit holding a flag
#define MP_TAGPTR_PTR(x) ((void*)((machine_uint_t)(x) & ~((machine_uint_t)1)))
...
...
py/showbc.c
View file @
c5e32c69
...
...
@@ -28,6 +28,8 @@
ip += sizeof(machine_uint_t); \
} while (0)
void
mp_byte_code_print2
(
const
byte
*
ip
,
int
len
);
void
mp_byte_code_print
(
const
byte
*
ip
,
int
len
)
{
const
byte
*
ip_start
=
ip
;
...
...
@@ -71,7 +73,11 @@ void mp_byte_code_print(const byte *ip, int len) {
printf
(
" bc="
INT_FMT
" line="
UINT_FMT
"
\n
"
,
bc
,
source_line
);
}
}
mp_byte_code_print2
(
ip
,
len
-
0
);
}
void
mp_byte_code_print2
(
const
byte
*
ip
,
int
len
)
{
const
byte
*
ip_start
=
ip
;
machine_uint_t
unum
;
qstr
qstr
;
while
(
ip
-
ip_start
<
len
)
{
...
...
py/vm.c
View file @
c5e32c69
...
...
@@ -14,6 +14,11 @@
#include
"objgenerator.h"
#define DETECT_VM_STACK_OVERFLOW (0)
#if 0
#define TRACE(ip) mp_byte_code_print2(ip, 1);
#else
#define TRACE(ip)
#endif
// Value stack grows up (this makes it incompatible with native C stack, but
// makes sure that arguments to functions are in natural order arg1..argN
...
...
@@ -168,6 +173,7 @@ mp_vm_return_kind_t mp_execute_byte_code_2(const byte *code_info, const byte **i
#if MICROPY_USE_COMPUTED_GOTO
#include
"vmentrytable.h"
#define DISPATCH() do { \
TRACE(ip); \
save_ip = ip; \
op = *ip++; \
goto *entry_table[op]; \
...
...
@@ -223,6 +229,7 @@ dispatch_loop:
#if MICROPY_USE_COMPUTED_GOTO
DISPATCH
();
#else
TRACE
(
ip
);
save_ip
=
ip
;
op
=
*
ip
++
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment