summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-07-11 17:32:01 +1000
committerDamien George <damien.p.george@gmail.com>2019-07-11 17:32:01 +1000
commitfd49fcb229b6694d69d8f7646c7940e40b67a0cb (patch)
treeca9e1becbd2d865cb1b110cdf83ef3364037b270
parenta73859d5af7bc08356f69cb0ee677a0e80047148 (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.c4
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