~ chicken-core (chicken-5) 243ac40388aeb446c2cb2a41e85265c1edec7086
commit 243ac40388aeb446c2cb2a41e85265c1edec7086
Author: Peter Bex <peter@more-magic.net>
AuthorDate: Sat Aug 22 17:52:27 2015 +0200
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sat Aug 22 19:37:26 2015 +0200
create proper termination continuation before invoking toplevel
diff --git a/runtime.c b/runtime.c
index c616b42a..48845702 100644
--- a/runtime.c
+++ b/runtime.c
@@ -669,6 +669,7 @@ void parse_argv(C_char *cmds)
int CHICKEN_initialize(int heap, int stack, int symbols, void *toplevel)
{
+ C_SCHEME_BLOCK *k0;
int i;
#ifdef HAVE_SIGACTION
struct sigaction sa;
@@ -832,6 +833,14 @@ int CHICKEN_initialize(int heap, int stack, int symbols, void *toplevel)
callback_continuation_level = 0;
gc_ms = 0;
(void)C_randomize(C_fix(time(NULL)));
+
+ /* create k to invoke code for system-startup: */
+ k0 = (C_SCHEME_BLOCK *)C_align((C_word)C_fromspace_top);
+ C_fromspace_top += C_align(2 * sizeof(C_word));
+ k0->header = C_CLOSURE_TYPE | 1;
+ C_set_block_item(k0, 0, (C_word)termination_continuation);
+ C_save(k0);
+ C_save(C_SCHEME_UNDEFINED);
return 1;
}
Trap