summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-11-26 23:40:30 +1100
committerDamien George <damien.p.george@gmail.com>2017-12-11 13:49:09 +1100
commit357486d9b455a8ac0c7066a997ebd4ee8e22b38f (patch)
treea0d9a5ebf6a4241084cb27f5e85202f8a9d814c4
parentab750ee2fb6329eb7b0b06ff44a0d0d152ba32b7 (diff)
unix: Add support for using the Python stack.
-rw-r--r--ports/unix/main.c5
-rw-r--r--ports/unix/mpthreadport.c4
2 files changed, 9 insertions, 0 deletions
diff --git a/ports/unix/main.c b/ports/unix/main.c
index 25f3e04fb..03f2f357e 100644
--- a/ports/unix/main.c
+++ b/ports/unix/main.c
@@ -440,6 +440,11 @@ MP_NOINLINE int main_(int argc, char **argv) {
gc_init(heap, heap + heap_size);
#endif
+ #if MICROPY_ENABLE_PYSTACK
+ static mp_obj_t pystack[1024];
+ mp_pystack_init(pystack, &pystack[MP_ARRAY_SIZE(pystack)]);
+ #endif
+
mp_init();
char *home = getenv("HOME");
diff --git a/ports/unix/mpthreadport.c b/ports/unix/mpthreadport.c
index 8c636a445..baca0a2b1 100644
--- a/ports/unix/mpthreadport.c
+++ b/ports/unix/mpthreadport.c
@@ -66,6 +66,10 @@ STATIC void mp_thread_gc(int signo, siginfo_t *info, void *context) {
// that we don't need the extra information, enough is captured by the
// gc_collect_regs_and_stack function above
//gc_collect_root((void**)context, sizeof(ucontext_t) / sizeof(uintptr_t));
+ #if MICROPY_ENABLE_PYSTACK
+ void **ptrs = (void**)(void*)MP_STATE_THREAD(pystack_start);
+ gc_collect_root(ptrs, (MP_STATE_THREAD(pystack_cur) - MP_STATE_THREAD(pystack_start)) / sizeof(void*));
+ #endif
thread_signal_done = 1;
}
}