From 4833e377e36c6a33221489e090cc314419492916 Mon Sep 17 00:00:00 2001 From: Alexander Nyberg Date: Thu, 5 May 2005 16:15:03 -0700 Subject: [PATCH] --- yaml --- r: 963 b: refs/heads/master c: f48d9663f19afb88ac0e45b825da523180f1f9c0 h: refs/heads/master i: 961: d5c3ada56148d1db9dfc7a026c2ce343259d421c 959: e340247e2378d87e79914efa64f045f71e106054 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/process.c | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index d566c4da2870..8aac93d7609e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 47c297529bd23d93d2a088d9620bb220763e9cb1 +refs/heads/master: f48d9663f19afb88ac0e45b825da523180f1f9c0 diff --git a/trunk/arch/i386/kernel/process.c b/trunk/arch/i386/kernel/process.c index 85bd56d44314..96e3ea6b17c7 100644 --- a/trunk/arch/i386/kernel/process.c +++ b/trunk/arch/i386/kernel/process.c @@ -400,11 +400,6 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, int err; childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1; - *childregs = *regs; - childregs->eax = 0; - childregs->esp = esp; - - p->thread.esp = (unsigned long) childregs; /* * The below -8 is to reserve 8 bytes on top of the ring0 stack. * This is necessary to guarantee that the entire "struct pt_regs" @@ -415,7 +410,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, * "struct pt_regs" is possible, but they may contain the * completely wrong values. */ - p->thread.esp0 = (unsigned long) (childregs+1) - 8; + childregs = (struct pt_regs *) ((unsigned long) childregs - 8); + *childregs = *regs; + childregs->eax = 0; + childregs->esp = esp; + + p->thread.esp = (unsigned long) childregs; + p->thread.esp0 = (unsigned long) (childregs+1); p->thread.eip = (unsigned long) ret_from_fork;