Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

proc_trampoline(9) [netbsd man page]

CPU_LWP_FORK(9) 					   BSD Kernel Developer's Manual					   CPU_LWP_FORK(9)

NAME
cpu_lwp_fork, child_return, proc_trampoline -- finish a fork operation SYNOPSIS
#include <sys/proc.h> void cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack, size_t stacksize, void (*func)(void *), void *arg); void child_return(void *arg); DESCRIPTION
cpu_lwp_fork() is the machine-dependent portion of fork1() which finishes a fork operation, with child lwp l2 nearly set up. It copies and updates the PCB and trap frame from the parent l1, making the child ready to run. cpu_lwp_fork() rigs the child's kernel stack so that it will start in proc_trampoline(). proc_trampoline() does not have a normal calling sequence and is entered by cpu_switch(). If an alternate user-level stack is requested (with non-zero values in both the stack and stacksize arguments), the user stack pointer is set up accordingly. After being entered by cpu_switch() and while running in user context (within the kernel) proc_trampoline() will invoke the function func with the argument arg. If a kernel thread is being created, the return path and argument are specified with func and arg. If a user process is being created, fork1() will pass child_return() and l2 to cpu_lwp_fork() as func and arg respectively. This causes the newly-created child process to go directly to user level with an apparent return value of 0 from fork(2), while the parent process returns normally. SEE ALSO
fork(2), cpu_switchto(9), fork1(9) BSD
April 13, 2010 BSD

Check Out this Related Man Page

CPU_LWP_FORK(9) 					   BSD Kernel Developer's Manual					   CPU_LWP_FORK(9)

NAME
cpu_lwp_fork, child_return, proc_trampoline -- finish a fork operation SYNOPSIS
#include <sys/proc.h> void cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack, size_t stacksize, void (*func)(void *), void *arg); void child_return(void *arg); DESCRIPTION
cpu_lwp_fork() is the machine-dependent portion of fork1() which finishes a fork operation, with child lwp l2 nearly set up. It copies and updates the PCB and trap frame from the parent l1, making the child ready to run. cpu_lwp_fork() rigs the child's kernel stack so that it will start in proc_trampoline(). proc_trampoline() does not have a normal calling sequence and is entered by cpu_switch(). If an alternate user-level stack is requested (with non-zero values in both the stack and stacksize arguments), the user stack pointer is set up accordingly. After being entered by cpu_switch() and while running in user context (within the kernel) proc_trampoline() will invoke the function func with the argument arg. If a kernel thread is being created, the return path and argument are specified with func and arg. If a user process is being created, fork1() will pass child_return() and l2 to cpu_lwp_fork() as func and arg respectively. This causes the newly-created child process to go directly to user level with an apparent return value of 0 from fork(2), while the parent process returns normally. SEE ALSO
fork(2), cpu_switchto(9), fork1(9) BSD
April 13, 2010 BSD
Man Page