~ 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