diff options
-rw-r--r-- | sys/arm/arm/vm_machdep.c | 5 | ||||
-rw-r--r-- | sys/arm/include/param.h | 2 | ||||
-rw-r--r-- | sys/arm/sa11x0/assabet_machdep.c | 3 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/iq31244_machdep.c | 3 |
4 files changed, 7 insertions, 6 deletions
diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c index 481f72c..4e37463 100644 --- a/sys/arm/arm/vm_machdep.c +++ b/sys/arm/arm/vm_machdep.c @@ -145,7 +145,6 @@ cpu_fork(register struct thread *td1, register struct proc *p2, struct trapframe *tf; struct switchframe *sf; struct mdproc *mdp2; - vm_offset_t uarea = td2->td_kstack + td2->td_kstack_pages * PAGE_SIZE; pcb1 = td1->td_pcb; pcb2 = (struct pcb *)(td2->td_kstack + td2->td_kstack_pages * PAGE_SIZE) - 1; @@ -156,8 +155,8 @@ cpu_fork(register struct thread *td1, register struct proc *p2, bcopy(td1->td_pcb, pcb2, sizeof(*pcb2)); mdp2 = &p2->p_md; bcopy(&td1->td_proc->p_md, mdp2, sizeof(*mdp2)); - pcb2->un_32.pcb32_und_sp = uarea + USPACE_UNDEF_STACK_TOP; - pcb2->un_32.pcb32_sp = uarea + + pcb2->un_32.pcb32_und_sp = td2->td_kstack + USPACE_UNDEF_STACK_TOP; + pcb2->un_32.pcb32_sp = td2->td_kstack + USPACE_SVC_STACK_TOP - sizeof(*pcb2); pmap_activate(td2); td2->td_frame = tf = diff --git a/sys/arm/include/param.h b/sys/arm/include/param.h index 65ea52b..885f2d2 100644 --- a/sys/arm/include/param.h +++ b/sys/arm/include/param.h @@ -106,7 +106,7 @@ #define KSTACK_GUARD_PAGES 1 #endif /* !KSTACK_GUARD_PAGES */ -#define USPACE_SVC_STACK_TOP 0 +#define USPACE_SVC_STACK_TOP KSTACK_PAGES * PAGE_SIZE #define USPACE_SVC_STACK_BOTTOM (USPACE_SVC_STACK_TOP - 0x1000) #define USPACE_UNDEF_STACK_TOP (USPACE_SVC_STACK_BOTTOM - 0x10) #define USPACE_UNDEF_STACK_BOTTOM (FPCONTEXTSIZE + 10) diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c index 92fc4cb..04f637c 100644 --- a/sys/arm/sa11x0/assabet_machdep.c +++ b/sys/arm/sa11x0/assabet_machdep.c @@ -417,5 +417,6 @@ initarm(void *arg, void *arg2) init_param2(physmem); kdb_init(); avail_end = 0xc0000000 + 0x02000000 - 1; - return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP)); + return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP - + sizeof(struct pcb))); } diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c index 4e58334..0bb644a 100644 --- a/sys/arm/xscale/i80321/iq31244_machdep.c +++ b/sys/arm/xscale/i80321/iq31244_machdep.c @@ -432,5 +432,6 @@ initarm(void *arg, void *arg2) init_param2(physmem); avail_end = 0xa0000000 + memsize - 1; kdb_init(); - return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP)); + return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP - + sizeof(struct pcb))); } |