Пример #1
0
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 (;;);
}
Пример #2
0
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(;;);
}