From 357486d9b455a8ac0c7066a997ebd4ee8e22b38f Mon Sep 17 00:00:00 2001 From: Damien George Date: Sun, 26 Nov 2017 23:40:30 +1100 Subject: [PATCH] unix: Add support for using the Python stack. --- ports/unix/main.c | 5 +++++ ports/unix/mpthreadport.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/ports/unix/main.c b/ports/unix/main.c index 25f3e04fb8..03f2f357ee 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 8c636a4457..baca0a2b1e 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; } }