diff options
Diffstat (limited to 'Mac/mwerks')
-rw-r--r-- | Mac/mwerks/macuseshlstart.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Mac/mwerks/macuseshlstart.c b/Mac/mwerks/macuseshlstart.c index d26a89f..32b808a 100644 --- a/Mac/mwerks/macuseshlstart.c +++ b/Mac/mwerks/macuseshlstart.c @@ -7,15 +7,30 @@ #include <setjmp.h> +#ifdef PRE_CW8 extern jmp_buf __program_exit; /* exit() does a longjmp() to here */ extern void (*__atexit_hook)(void); /* atexit() sets this up if it is ever called */ extern void (*___atexit_hook)(void); /* _atexit() sets this up if it is ever called */ extern int __aborting; /* abort() sets this and longjmps to __program_exit */ +#endif + +/* + * clear_stackframe_backlink - set 0(SP) to 0 + * + */ + +static asm void clear_stackframe_backlink(void) +{ + li r3,0 + stw r3,0(SP) + blr +} void __start(void) { char *argv = 0; +#ifdef PRE_CW8 if (setjmp(__program_exit) == 0) { // set up jmp_buf for exit() main(0, &argv); // call main(argc, argv) if (__atexit_hook) @@ -26,4 +41,9 @@ void __start(void) ___atexit_hook(); // call _atexit() procs } // ExitToShell(); +#else + clear_stackframe_backlink(); + main(0, &argv); + exit(0); +#endif } |