static void xenon_exit(int status) { char s[256]; int i, stuck = 0; // all threads are down remove syscall for lock and unlock __syscalls.malloc_lock = NULL; __syscalls.malloc_unlock = NULL; // network is down too //network_stdout_hook = NULL; sprintf(s, "[Exit] with code %d\n", status); vfs_console_write(NULL, 0, s, strlen(s)); for (i = 0; i < 6; ++i) { if (xenon_is_thread_task_running(i)) { sprintf(s, "Thread %d is still running !\n", i); vfs_console_write(NULL, 0, s, strlen(s)); stuck = 1; } } shutdown_drivers(); if (stuck) { sprintf(s, "Can't reload Xell, looping..."); vfs_console_write(NULL, 0, s, strlen(s)); } else { sprintf(s, "Reloading Xell..."); vfs_console_write(NULL, 0, s, strlen(s)); xenon_set_single_thread_mode(); try_return_to_xell(0xc8070000, 0x1c000000); // xell-gggggg (ggboot) try_return_to_xell(0xc8095060, 0x1c040000); // xell-2f (freeboot) try_return_to_xell(0xc8100000, 0x1c000000); // xell-1f, xell-ggggggg } for (;;); }
void _exit(int status) { char s[256]; int i,stuck=0; //threading_shutdown(); sprintf(s,"\n[Exit] with code %d\n", status); vfs_console_write(NULL,s,strlen(s)); for(i=0;i<6;++i) { if (xenon_is_thread_task_running(i)){ sprintf(s,"Thread %d is still running !\n",i); vfs_console_write(NULL,s,strlen(s)); stuck=1; } } shutdown_drivers(); if(stuck){ sprintf(s,"Can't reload Xell, looping..."); vfs_console_write(NULL,s,strlen(s)); }else{ sprintf(s,"Reloading Xell..."); vfs_console_write(NULL,s,strlen(s)); xenon_set_single_thread_mode(); try_return_to_xell(0xc8070000,0x1c000000); // xell-gggggg (ggboot) try_return_to_xell(0xc8095060,0x1c040000); // xell-2f (freeboot) try_return_to_xell(0xc8100000,0x1c000000); // xell-1f, xell-ggggggg } for(;;); }