can someone explain this?
kumar at chaos.ph.utexas.edu
Thu Sep 30 02:52:27 EST 1999
I was looking around the ppc kernel source in arch/ppc/kernel/process.c
and was looking at how copy_thread() works.
I was wondering why so much space is stored off for copies of pt_regs
I can understand needing one copy for the process in user space, and 2nd
for the process in kernel space, but why a third?
copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
struct task_struct * p, struct pt_regs * regs)
struct pt_regs * childregs, *kregs;
extern void ret_from_smpfork(void);
extern void ret_from_syscall(void);
/* Copy registers */
childregs = ((struct pt_regs *)
((unsigned long)p + sizeof(union task_union)
- STACK_FRAME_OVERHEAD)) - 2;
*childregs = *regs;
if ((childregs->msr & MSR_PR) == 0)
childregs->gpr = (unsigned long) p; /* `current' in
new task */
childregs->gpr = 0; /* Result from fork() */
p->tss.regs = childregs;
p->tss.ksp = (unsigned long) childregs - STACK_FRAME_OVERHEAD;
p->tss.ksp -= sizeof(struct pt_regs ) + STACK_FRAME_OVERHEAD;
kregs = (struct pt_regs *)(p->tss.ksp + STACK_FRAME_OVERHEAD);
and what is going on with STACK_FRAME_OVERHEAD all over the place
ignorance is bliss.
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-dev