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 04c7cdb668 and
3786592097.  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.
This commit is contained in:
Damien George 2019-07-11 17:32:01 +10:00
parent a73859d5af
commit fd49fcb229

View File

@ -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