can someone explain this?

flat view

From: Kumar Gala <hidden>
Date: 1999-09-29 16:52:27

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;
#ifdef __SMP__
        extern void ret_from_smpfork(void);
#else
        extern void ret_from_syscall(void);
#endif
        /* 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[2] = (unsigned long) p;  /* `current' in
new task */
        childregs->gpr[3] = 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

thanks

 - kumar



ignorance is bliss.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help