Module Name: src Committed By: snj Date: Fri Jun 5 18:34:47 UTC 2009
Modified Files: src/sys/arch/m68k/include [netbsd-5]: m68k.h src/sys/arch/m68k/m68k [netbsd-5]: switch_subr.s vm_machdep.c Log Message: Pull up following revision(s) (requested by martin in ticket #787): sys/arch/m68k/include/m68k.h: revision 1.14 sys/arch/m68k/m68k/switch_subr.s: revision 1.22 sys/arch/m68k/m68k/vm_machdep.c: revision 1.28 Do not use lwp_trampoline for cpu_setfunc, we do not want to call lwp_startup() after a setfunc. Grow a simplified setfunc_trampoline instead. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.13.30.1 src/sys/arch/m68k/include/m68k.h cvs rdiff -u -r1.21 -r1.21.30.1 src/sys/arch/m68k/m68k/switch_subr.s cvs rdiff -u -r1.26 -r1.26.30.1 src/sys/arch/m68k/m68k/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/m68k/include/m68k.h diff -u src/sys/arch/m68k/include/m68k.h:1.13 src/sys/arch/m68k/include/m68k.h:1.13.30.1 --- src/sys/arch/m68k/include/m68k.h:1.13 Wed Oct 17 19:55:05 2007 +++ src/sys/arch/m68k/include/m68k.h Fri Jun 5 18:34:46 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: m68k.h,v 1.13 2007/10/17 19:55:05 garbled Exp $ */ +/* $NetBSD: m68k.h,v 1.13.30.1 2009/06/05 18:34:46 snj Exp $ */ /* * Copyright (c) 1982, 1990, 1993 @@ -144,7 +144,6 @@ int getsfc(void); /* switch_subr.s */ -void lwp_trampoline(void); void savectx(struct pcb *); /* w16copy.s */ Index: src/sys/arch/m68k/m68k/switch_subr.s diff -u src/sys/arch/m68k/m68k/switch_subr.s:1.21 src/sys/arch/m68k/m68k/switch_subr.s:1.21.30.1 --- src/sys/arch/m68k/m68k/switch_subr.s:1.21 Wed Oct 17 19:55:12 2007 +++ src/sys/arch/m68k/m68k/switch_subr.s Fri Jun 5 18:34:47 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: switch_subr.s,v 1.21 2007/10/17 19:55:12 garbled Exp $ */ +/* $NetBSD: switch_subr.s,v 1.21.30.1 2009/06/05 18:34:47 snj Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation. @@ -397,4 +397,17 @@ addql #8,%sp | toss SP and stack adjust jra _ASM_LABEL(rei) | and return +/* + * Very similar to lwp_trampoline, but do not call lwp_startup + */ +ENTRY_NOPROFILE(setfunc_trampoline) + movl %a3,%...@- | push function arg + jbsr %a2@ | call function + addql #4,%sp | pop arg + movl %sp@(FR_SP),%a0 | grab and load + movl %a0,%usp | user SP + moveml %...@+,#0x7FFF | restore most user regs + addql #8,%sp | toss SP and stack adjust + jra _ASM_LABEL(rei) | and return + Index: src/sys/arch/m68k/m68k/vm_machdep.c diff -u src/sys/arch/m68k/m68k/vm_machdep.c:1.26 src/sys/arch/m68k/m68k/vm_machdep.c:1.26.30.1 --- src/sys/arch/m68k/m68k/vm_machdep.c:1.26 Wed Oct 17 19:55:12 2007 +++ src/sys/arch/m68k/m68k/vm_machdep.c Fri Jun 5 18:34:47 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.26 2007/10/17 19:55:12 garbled Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.26.30.1 2009/06/05 18:34:47 snj Exp $ */ /* * Copyright (c) 1982, 1986, 1990, 1993 @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.26 2007/10/17 19:55:12 garbled Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.26.30.1 2009/06/05 18:34:47 snj Exp $"); #include "opt_coredump.h" @@ -131,6 +131,7 @@ struct trapframe *tf; struct switchframe *sf; extern struct pcb *curpcb; + extern void lwp_trampoline(void); l2->l_md.md_flags = l1->l_md.md_flags; @@ -173,8 +174,9 @@ struct pcb *pcb = &l->l_addr->u_pcb; struct trapframe *tf = (struct trapframe *)l->l_md.md_regs; struct switchframe *sf = (struct switchframe *)tf - 1; + extern void setfunc_trampoline(void); - sf->sf_pc = (u_int)lwp_trampoline; + sf->sf_pc = (u_int)setfunc_trampoline; pcb->pcb_regs[6] = (int)func; /* A2 */ pcb->pcb_regs[7] = (int)arg; /* A3 */ pcb->pcb_regs[11] = (int)sf; /* SSP */