aboutsummaryrefslogtreecommitdiff
path: root/qemu-arm
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-29 01:05:53 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-01-29 02:13:42 +0200
commitd3b1f0b627ccc6705d9fe958549badb87a74ded1 (patch)
treeccc7d03e2f5cd00bb022f70093ca99915715ba42 /qemu-arm
parent850212203a97754bdaf1844b71c8fe8ee905236f (diff)
py/runtime: mp_stack_ctrl_init() should be called immediately on startup.
Calling it from mp_init() is too late for some ports (like Unix), and leads to incomplete stack frame being captured, with following GC issues. So, now each port should call mp_stack_ctrl_init() on its own, ASAP after startup, and taking special precautions so it really was called before stack variables get allocated (because if such variable with a pointer is missed, it may lead to over-collecting (typical symptom is segfaulting)).
Diffstat (limited to 'qemu-arm')
-rw-r--r--qemu-arm/main.c1
-rw-r--r--qemu-arm/test_main.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/qemu-arm/main.c b/qemu-arm/main.c
index f29547523..b6ff73980 100644
--- a/qemu-arm/main.c
+++ b/qemu-arm/main.c
@@ -32,6 +32,7 @@ void do_str(const char *src, mp_parse_input_kind_t input_kind) {
}
int main(int argc, char **argv) {
+ mp_stack_ctrl_init();
mp_stack_set_limit(10240);
void *heap = malloc(16 * 1024);
gc_init(heap, (char*)heap + 16 * 1024);
diff --git a/qemu-arm/test_main.c b/qemu-arm/test_main.c
index a98e275ce..44f9cc666 100644
--- a/qemu-arm/test_main.c
+++ b/qemu-arm/test_main.c
@@ -49,6 +49,7 @@ end:
int main() {
const char a[] = {"sim"};
+ mp_stack_ctrl_init();
mp_stack_set_limit(10240);
void *heap = malloc(256 * 1024);
gc_init(heap, (char*)heap + 256 * 1024);