diff options
author | Damien George <damien.p.george@gmail.com> | 2019-07-11 17:32:01 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-07-11 17:32:01 +1000 |
commit | fd49fcb229b6694d69d8f7646c7940e40b67a0cb (patch) | |
tree | ca9e1becbd2d865cb1b110cdf83ef3364037b270 | |
parent | a73859d5af7bc08356f69cb0ee677a0e80047148 (diff) |
stm32/gccollect: Always use MP_STATE_THREAD(stack_top) to get stack top.
In a non-thread build, using &_ram_end as the top-of-stack is no longer
correct because the stack is not always at the very top end of RAM. See
eg 04c7cdb668cc7ee391ef5fe000f825389197f7e2 and
378659209778a1bde24e9b15793087023b02bbd9. The correct value to use is
&_estack, which is the value stored in MP_STATE_THREAD(stack_top), and
using the same code for both thread and non-thread builds makes the code
cleaner.
-rw-r--r-- | ports/stm32/gccollect.c | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/ports/stm32/gccollect.c b/ports/stm32/gccollect.c index 5c1bf1e06..f5a49b7d0 100644 --- a/ports/stm32/gccollect.c +++ b/ports/stm32/gccollect.c @@ -48,11 +48,7 @@ void gc_collect(void) { uintptr_t sp = gc_helper_get_regs_and_sp(regs); // trace the stack, including the registers (since they live on the stack in this function) - #if MICROPY_PY_THREAD gc_collect_root((void**)sp, ((uint32_t)MP_STATE_THREAD(stack_top) - sp) / sizeof(uint32_t)); - #else - gc_collect_root((void**)sp, ((uint32_t)&_ram_end - sp) / sizeof(uint32_t)); - #endif // trace root pointers from any threads #if MICROPY_PY_THREAD |