From fc630e70c4d5fdf067a167e50e016d506463f943 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 19 Aug 2024 14:38:59 +1000 Subject: [PATCH] zephyr/main: Collect registers during a MicroPython GC scan. Signed-off-by: Damien George --- ports/zephyr/CMakeLists.txt | 1 + ports/zephyr/main.c | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ports/zephyr/CMakeLists.txt b/ports/zephyr/CMakeLists.txt index c8bb1fc456..a2c2120319 100644 --- a/ports/zephyr/CMakeLists.txt +++ b/ports/zephyr/CMakeLists.txt @@ -54,6 +54,7 @@ list(TRANSFORM MICROPY_SOURCE_PORT PREPEND ${MICROPY_PORT_DIR}/) set(MICROPY_SOURCE_SHARED libc/printf.c readline/readline.c + runtime/gchelper_generic.c runtime/interrupt_char.c runtime/mpirq.c runtime/pyexec.c diff --git a/ports/zephyr/main.c b/ports/zephyr/main.c index 47c9546221..a2af609ed3 100644 --- a/ports/zephyr/main.c +++ b/ports/zephyr/main.c @@ -48,6 +48,7 @@ #include "py/gc.h" #include "py/mphal.h" #include "py/stackctrl.h" +#include "shared/runtime/gchelper.h" #include "shared/runtime/pyexec.h" #include "shared/readline/readline.h" #include "extmod/modbluetooth.h" @@ -180,11 +181,8 @@ soft_reset: } void gc_collect(void) { - // WARNING: This gc_collect implementation doesn't try to get root - // pointers from CPU registers, and thus may function incorrectly. - void *dummy; gc_collect_start(); - gc_collect_root(&dummy, ((mp_uint_t)MP_STATE_THREAD(stack_top) - (mp_uint_t)&dummy) / sizeof(mp_uint_t)); + gc_helper_collect_regs_and_stack(); #if MICROPY_PY_THREAD mp_thread_gc_others(); #endif