void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)) { int flags = 0, pages; if(sig_stack != NULL){ pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER); set_sigstack(sig_stack, pages * page_size()); flags = SA_ONSTACK; } if(usr1_handler) set_handler(SIGUSR1, usr1_handler, flags, -1); }
int start_uml_skas(void) { stack_protections((unsigned long) &cpu0_irqstack); set_sigstack(cpu0_irqstack, THREAD_SIZE); if(proc_mm) userspace_pid[0] = start_userspace(0); init_new_thread_signals(); init_task.thread.request.u.thread.proc = start_kernel_proc; init_task.thread.request.u.thread.arg = NULL; return(start_idle_thread(task_stack_page(&init_task), &init_task.thread.mode.skas.switch_buf)); }
int __init start_uml(void) { stack_protections((unsigned long) &cpu0_irqstack); set_sigstack(cpu0_irqstack, THREAD_SIZE); if (proc_mm) { userspace_pid[0] = start_userspace(0); if (userspace_pid[0] < 0) { printf("start_uml - start_userspace returned %d\n", userspace_pid[0]); exit(1); } } init_new_thread_signals(); init_task.thread.request.u.thread.proc = start_kernel_proc; init_task.thread.request.u.thread.arg = NULL; return start_idle_thread(task_stack_page(&init_task), &init_task.thread.switch_buf); }
void init_new_thread_stack(void *sig_stack, void (*usr1_handler)(int)) { int flags = 0, pages; if(sig_stack != NULL){ pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER); set_sigstack(sig_stack, pages * UM_KERN_PAGE_SIZE); flags = SA_ONSTACK; } if(usr1_handler){ struct sigaction sa; sa.sa_handler = usr1_handler; sigemptyset(&sa.sa_mask); sa.sa_flags = flags; sa.sa_restorer = NULL; if(sigaction(SIGUSR1, &sa, NULL) < 0) panic("init_new_thread_stack - sigaction failed - " "errno = %d\n", errno); } }