Pass pointers to frames from assembly, do not use the 'frame on stack
as argument passed by value' trick, as gcc 3.3.x makes (valid) assumptions about the stack that will not be true. Costs 2 instructions per trap/syscall on i386, 4 per interrupt for MP. One instruction per trap/syscall on amd64, 2 per interrupt for MP. I expect gcc 3.3.1 to make up for this by better optimization (it'd better..) While here, make amd64 compile again by using subr_mbr_disk.c
This commit is contained in:
parent
544307ba64
commit
c43b35423e
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: locore.S,v 1.5 2003/08/07 16:26:35 agc Exp $ */
|
||||
/* $NetBSD: locore.S,v 1.6 2003/08/20 21:48:47 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright-o-rama!
|
||||
@ -1190,6 +1190,7 @@ IDTVEC(syscall)
|
||||
movq %rsp,L_MD_REGS(%r14) # save pointer to frame
|
||||
movq L_PROC(%r14),%r15
|
||||
andl $~MDP_IRET,L_MD_FLAGS(%r14)
|
||||
movq %rsp,%rdi
|
||||
call *P_MD_SYSCALL(%r15)
|
||||
1: /* Check for ASTs on exit to user mode. */
|
||||
cli
|
||||
@ -1199,6 +1200,7 @@ IDTVEC(syscall)
|
||||
CLEAR_ASTPENDING(%r11)
|
||||
sti
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
movq %rsp,%rdi
|
||||
call _C_LABEL(trap)
|
||||
jmp 1b
|
||||
2:
|
||||
@ -1288,6 +1290,7 @@ osyscall1:
|
||||
movq CPUVAR(CURLWP),%rdx
|
||||
movq %rsp,L_MD_REGS(%rdx) # save pointer to frame
|
||||
movq L_PROC(%rdx),%rdx
|
||||
movq %rsp,%rdi
|
||||
call *P_MD_SYSCALL(%rdx)
|
||||
_C_LABEL(osyscall_return):
|
||||
2: /* Check for ASTs on exit to user mode. */
|
||||
@ -1298,6 +1301,7 @@ _C_LABEL(osyscall_return):
|
||||
CLEAR_ASTPENDING(%r11)
|
||||
sti
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
movq %rsp,%rdi
|
||||
call _C_LABEL(trap)
|
||||
jmp 2b
|
||||
iret_return:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: netbsd32_syscall.c,v 1.2 2003/07/14 23:32:32 lukem Exp $ */
|
||||
/* $NetBSD: netbsd32_syscall.c,v 1.3 2003/08/20 21:48:48 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: netbsd32_syscall.c,v 1.2 2003/07/14 23:32:32 lukem Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: netbsd32_syscall.c,v 1.3 2003/08/20 21:48:48 fvdl Exp $");
|
||||
|
||||
#include "opt_syscall_debug.h"
|
||||
#include "opt_ktrace.h"
|
||||
@ -65,8 +65,8 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_syscall.c,v 1.2 2003/07/14 23:32:32 lukem E
|
||||
#include <machine/userret.h>
|
||||
|
||||
void netbsd32_syscall_intern(struct proc *);
|
||||
void netbsd32_syscall_plain(struct trapframe);
|
||||
void netbsd32_syscall_fancy(struct trapframe);
|
||||
void netbsd32_syscall_plain(struct trapframe *);
|
||||
void netbsd32_syscall_fancy(struct trapframe *);
|
||||
|
||||
void
|
||||
netbsd32_syscall_intern(p)
|
||||
@ -89,7 +89,7 @@ netbsd32_syscall_intern(p)
|
||||
|
||||
void
|
||||
netbsd32_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -104,9 +104,9 @@ netbsd32_syscall_plain(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_rax;
|
||||
code = frame->tf_rax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_rsp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_rsp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -150,9 +150,9 @@ netbsd32_syscall_plain(frame)
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_rax = rval[0];
|
||||
frame.tf_rdx = rval[1];
|
||||
frame.tf_rflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_rax = rval[0];
|
||||
frame->tf_rdx = rval[1];
|
||||
frame->tf_rflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -160,15 +160,15 @@ netbsd32_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_rip -= frame.tf_err;
|
||||
frame->tf_rip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_rax = error;
|
||||
frame.tf_rflags |= PSL_C; /* carry bit */
|
||||
frame->tf_rax = error;
|
||||
frame->tf_rflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -180,7 +180,7 @@ netbsd32_syscall_plain(frame)
|
||||
|
||||
void
|
||||
netbsd32_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -199,9 +199,9 @@ netbsd32_syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_rax;
|
||||
code = frame->tf_rax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_rsp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_rsp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -256,9 +256,9 @@ netbsd32_syscall_fancy(frame)
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_rax = rval[0];
|
||||
frame.tf_rdx = rval[1];
|
||||
frame.tf_rflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_rax = rval[0];
|
||||
frame->tf_rdx = rval[1];
|
||||
frame->tf_rflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -266,15 +266,15 @@ netbsd32_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_rip -= frame.tf_err;
|
||||
frame->tf_rip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_rax = error;
|
||||
frame.tf_rflags |= PSL_C; /* carry bit */
|
||||
frame->tf_rax = error;
|
||||
frame->tf_rflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: spl.S,v 1.1 2003/04/26 18:39:32 fvdl Exp $ */
|
||||
/* $NetBSD: spl.S,v 1.2 2003/08/20 21:48:48 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Wasabi Systems, Inc.
|
||||
@ -182,6 +182,7 @@ IDTVEC(doreti)
|
||||
sti
|
||||
movl $T_ASTFLT,TF_TRAPNO(%rsp) /* XXX undo later.. */
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
movq %rsp,%rdi
|
||||
call _C_LABEL(trap)
|
||||
cli
|
||||
jmp 5b
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: syscall.c,v 1.2 2003/07/14 23:32:33 lukem Exp $ */
|
||||
/* $NetBSD: syscall.c,v 1.3 2003/08/20 21:48:49 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.2 2003/07/14 23:32:33 lukem Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.3 2003/08/20 21:48:49 fvdl Exp $");
|
||||
|
||||
#include "opt_syscall_debug.h"
|
||||
#include "opt_ktrace.h"
|
||||
@ -65,8 +65,8 @@ __KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.2 2003/07/14 23:32:33 lukem Exp $");
|
||||
#include <machine/userret.h>
|
||||
|
||||
void syscall_intern __P((struct proc *));
|
||||
void syscall_plain __P((struct trapframe));
|
||||
void syscall_fancy __P((struct trapframe));
|
||||
void syscall_plain __P((struct trapframe *));
|
||||
void syscall_fancy __P((struct trapframe *));
|
||||
|
||||
void
|
||||
syscall_intern(p)
|
||||
@ -94,7 +94,7 @@ syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -108,7 +108,7 @@ syscall_plain(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_rax;
|
||||
code = frame->tf_rax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
argoff = 0;
|
||||
argp = &args[0];
|
||||
@ -119,7 +119,7 @@ syscall_plain(frame)
|
||||
/*
|
||||
* Code is first argument, followed by actual args.
|
||||
*/
|
||||
code = frame.tf_rdi;
|
||||
code = frame->tf_rdi;
|
||||
argp = &args[1];
|
||||
argoff = 1;
|
||||
break;
|
||||
@ -134,24 +134,24 @@ syscall_plain(frame)
|
||||
if (argsize) {
|
||||
switch (MIN(argsize, 6)) {
|
||||
case 6:
|
||||
args[5] = frame.tf_r9;
|
||||
args[5] = frame->tf_r9;
|
||||
case 5:
|
||||
args[4] = frame.tf_r8;
|
||||
args[4] = frame->tf_r8;
|
||||
case 4:
|
||||
args[3] = frame.tf_r10;
|
||||
args[3] = frame->tf_r10;
|
||||
case 3:
|
||||
args[2] = frame.tf_rdx;
|
||||
args[2] = frame->tf_rdx;
|
||||
case 2:
|
||||
args[1] = frame.tf_rsi;
|
||||
args[1] = frame->tf_rsi;
|
||||
case 1:
|
||||
args[0] = frame.tf_rdi;
|
||||
args[0] = frame->tf_rdi;
|
||||
break;
|
||||
default:
|
||||
panic("impossible syscall argsize");
|
||||
}
|
||||
if (argsize > 6) {
|
||||
argsize -= 6;
|
||||
params = (caddr_t)frame.tf_rsp + sizeof(register_t);
|
||||
params = (caddr_t)frame->tf_rsp + sizeof(register_t);
|
||||
error = copyin(params, (caddr_t)&args[6],
|
||||
argsize << 3);
|
||||
if (error != 0)
|
||||
@ -171,9 +171,9 @@ syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_rax = rval[0];
|
||||
frame.tf_rdx = rval[1];
|
||||
frame.tf_rflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_rax = rval[0];
|
||||
frame->tf_rdx = rval[1];
|
||||
frame->tf_rflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -181,15 +181,15 @@ syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_rip -= frame.tf_err;
|
||||
frame->tf_rip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_rax = error;
|
||||
frame.tf_rflags |= PSL_C; /* carry bit */
|
||||
frame->tf_rax = error;
|
||||
frame->tf_rflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -201,7 +201,7 @@ syscall_plain(frame)
|
||||
|
||||
void
|
||||
syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -215,7 +215,7 @@ syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_rax;
|
||||
code = frame->tf_rax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
argp = &args[0];
|
||||
argoff = 0;
|
||||
@ -226,7 +226,7 @@ syscall_fancy(frame)
|
||||
/*
|
||||
* Code is first argument, followed by actual args.
|
||||
*/
|
||||
code = frame.tf_rdi;
|
||||
code = frame->tf_rdi;
|
||||
argp = &args[1];
|
||||
argoff = 1;
|
||||
break;
|
||||
@ -240,24 +240,24 @@ syscall_fancy(frame)
|
||||
if (argsize) {
|
||||
switch (MIN(argsize, 6)) {
|
||||
case 6:
|
||||
args[5] = frame.tf_r9;
|
||||
args[5] = frame->tf_r9;
|
||||
case 5:
|
||||
args[4] = frame.tf_r8;
|
||||
args[4] = frame->tf_r8;
|
||||
case 4:
|
||||
args[3] = frame.tf_r10;
|
||||
args[3] = frame->tf_r10;
|
||||
case 3:
|
||||
args[2] = frame.tf_rdx;
|
||||
args[2] = frame->tf_rdx;
|
||||
case 2:
|
||||
args[1] = frame.tf_rsi;
|
||||
args[1] = frame->tf_rsi;
|
||||
case 1:
|
||||
args[0] = frame.tf_rdi;
|
||||
args[0] = frame->tf_rdi;
|
||||
break;
|
||||
default:
|
||||
panic("impossible syscall argsize");
|
||||
}
|
||||
if (argsize > 6) {
|
||||
argsize -= 6;
|
||||
params = (caddr_t)frame.tf_rsp + sizeof(register_t);
|
||||
params = (caddr_t)frame->tf_rsp + sizeof(register_t);
|
||||
error = copyin(params, (caddr_t)&args[6],
|
||||
argsize << 3);
|
||||
if (error != 0)
|
||||
@ -277,9 +277,9 @@ syscall_fancy(frame)
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_rax = rval[0];
|
||||
frame.tf_rdx = rval[1];
|
||||
frame.tf_rflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_rax = rval[0];
|
||||
frame->tf_rdx = rval[1];
|
||||
frame->tf_rflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -287,15 +287,15 @@ syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_rip -= frame.tf_err;
|
||||
frame->tf_rip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_rax = error;
|
||||
frame.tf_rflags |= PSL_C; /* carry bit */
|
||||
frame->tf_rax = error;
|
||||
frame->tf_rflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: trap.c,v 1.7 2003/08/07 16:26:35 agc Exp $ */
|
||||
/* $NetBSD: trap.c,v 1.8 2003/08/20 21:48:49 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -75,12 +75,11 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.7 2003/08/07 16:26:35 agc Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.8 2003/08/20 21:48:49 fvdl Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_kgdb.h"
|
||||
#include "opt_lockdebug.h"
|
||||
#include "opt_math_emulate.h"
|
||||
#include "opt_multiprocessor.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -117,7 +116,7 @@ __KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.7 2003/08/07 16:26:35 agc Exp $");
|
||||
#include <sys/kgdb.h>
|
||||
#endif
|
||||
|
||||
void trap __P((struct trapframe));
|
||||
void trap __P((struct trapframe *));
|
||||
#if defined(I386_CPU)
|
||||
int trapwrite __P((unsigned));
|
||||
#endif
|
||||
@ -168,11 +167,11 @@ static void frame_dump(struct trapframe *);
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
trap(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
struct lwp *l = curlwp;
|
||||
struct proc *p = l ? l->l_proc : 0;
|
||||
int type = (int)frame.tf_trapno;
|
||||
int type = (int)frame->tf_trapno;
|
||||
struct pcb *pcb;
|
||||
extern char fusuintrfailure[],
|
||||
resume_iret[], IDTVEC(oosyscall)[];
|
||||
@ -193,17 +192,17 @@ trap(frame)
|
||||
if (trapdebug) {
|
||||
printf("trap %d code %lx eip %lx cs %lx rflags %lx cr2 %lx "
|
||||
"cpl %x\n",
|
||||
type, frame.tf_err, frame.tf_rip, frame.tf_cs,
|
||||
frame.tf_rflags, rcr2(), curcpu()->ci_ilevel);
|
||||
type, frame->tf_err, frame->tf_rip, frame->tf_cs,
|
||||
frame->tf_rflags, rcr2(), curcpu()->ci_ilevel);
|
||||
printf("curlwp %p\n", curlwp);
|
||||
if (curlwp)
|
||||
printf("pid %d lid %d\n", l->l_proc->p_pid, l->l_lid);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!KERNELMODE(frame.tf_cs, frame.tf_rflags)) {
|
||||
if (!KERNELMODE(frame->tf_cs, frame->tf_rflags)) {
|
||||
type |= T_USER;
|
||||
l->l_md.md_regs = &frame;
|
||||
l->l_md.md_regs = frame;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
@ -211,7 +210,7 @@ trap(frame)
|
||||
default:
|
||||
we_re_toast:
|
||||
#ifdef KGDB
|
||||
if (kgdb_trap(type, &frame))
|
||||
if (kgdb_trap(type, frame))
|
||||
return;
|
||||
else {
|
||||
/*
|
||||
@ -225,18 +224,18 @@ trap(frame)
|
||||
}
|
||||
#endif
|
||||
#ifdef DDB
|
||||
if (kdb_trap(type, 0, &frame))
|
||||
if (kdb_trap(type, 0, frame))
|
||||
return;
|
||||
#endif
|
||||
if (frame.tf_trapno < trap_types)
|
||||
printf("fatal %s", trap_type[frame.tf_trapno]);
|
||||
if (frame->tf_trapno < trap_types)
|
||||
printf("fatal %s", trap_type[frame->tf_trapno]);
|
||||
else
|
||||
printf("unknown trap %ld", (u_long)frame.tf_trapno);
|
||||
printf("unknown trap %ld", (u_long)frame->tf_trapno);
|
||||
printf(" in %s mode\n", (type & T_USER) ? "user" : "supervisor");
|
||||
printf("trap type %d code %lx rip %lx cs %lx rflags %lx cr2 "
|
||||
" %lx cpl %x rsp %lx\n",
|
||||
type, frame.tf_err, (u_long)frame.tf_rip, frame.tf_cs,
|
||||
frame.tf_rflags, rcr2(), curcpu()->ci_ilevel, frame.tf_rsp);
|
||||
type, frame->tf_err, (u_long)frame->tf_rip, frame->tf_cs,
|
||||
frame->tf_rflags, rcr2(), curcpu()->ci_ilevel, frame->tf_rsp);
|
||||
|
||||
/* panic("trap"); */
|
||||
cpu_reboot(RB_HALT, NULL);
|
||||
@ -253,8 +252,8 @@ trap(frame)
|
||||
copyefault:
|
||||
error = EFAULT;
|
||||
copyfault:
|
||||
frame.tf_rip = (u_int64_t)pcb->pcb_onfault;
|
||||
frame.tf_rax = error;
|
||||
frame->tf_rip = (u_int64_t)pcb->pcb_onfault;
|
||||
frame->tf_rax = error;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -275,9 +274,9 @@ copyfault:
|
||||
* at this point is the same as on exit from a `slow'
|
||||
* interrupt.
|
||||
*/
|
||||
switch (*(u_char *)frame.tf_rip) {
|
||||
switch (*(u_char *)frame->tf_rip) {
|
||||
case 0xcf: /* iret */
|
||||
vframe = (void *)((u_int64_t)&frame.tf_rsp - 44);
|
||||
vframe = (void *)((u_int64_t)&frame->tf_rsp - 44);
|
||||
resume = resume_iret;
|
||||
break;
|
||||
/*
|
||||
@ -288,11 +287,11 @@ copyfault:
|
||||
*/
|
||||
#if 0
|
||||
case 0x1f: /* popl %ds */
|
||||
vframe = (void *)((u_int64_t)&frame.tf_rsp - 4);
|
||||
vframe = (void *)((u_int64_t)&frame->tf_rsp - 4);
|
||||
resume = resume_pop_ds;
|
||||
break;
|
||||
case 0x07: /* popl %es */
|
||||
vframe = (void *)((u_int64_t)&frame.tf_rsp - 0);
|
||||
vframe = (void *)((u_int64_t)&frame->tf_rsp - 0);
|
||||
resume = resume_pop_es;
|
||||
break;
|
||||
#endif
|
||||
@ -302,7 +301,7 @@ copyfault:
|
||||
if (KERNELMODE(vframe->tf_cs, vframe->tf_rflags))
|
||||
goto we_re_toast;
|
||||
|
||||
frame.tf_rip = (u_int64_t)resume;
|
||||
frame->tf_rip = (u_int64_t)resume;
|
||||
return;
|
||||
|
||||
case T_PROTFLT|T_USER: /* protection fault */
|
||||
@ -313,7 +312,7 @@ copyfault:
|
||||
case T_NMI|T_USER:
|
||||
#ifdef TRAP_SIGDEBUG
|
||||
printf("pid %d (%s): BUS at rip %lx addr %lx\n",
|
||||
p->p_pid, p->p_comm, frame.tf_rip, rcr2());
|
||||
p->p_pid, p->p_comm, frame->tf_rip, rcr2());
|
||||
frame_dump(&frame);
|
||||
#endif
|
||||
KERNEL_PROC_LOCK(l);
|
||||
@ -325,7 +324,7 @@ copyfault:
|
||||
case T_FPOPFLT|T_USER: /* coprocessor operand fault */
|
||||
#ifdef TRAP_SIGDEBUG
|
||||
printf("pid %d (%s): ILL at rip %lx addr %lx\n",
|
||||
p->p_pid, p->p_comm, frame.tf_rip, rcr2());
|
||||
p->p_pid, p->p_comm, frame->tf_rip, rcr2());
|
||||
frame_dump(&frame);
|
||||
#endif
|
||||
KERNEL_PROC_LOCK(l);
|
||||
@ -365,7 +364,7 @@ copyfault:
|
||||
|
||||
case T_ARITHTRAP|T_USER:
|
||||
case T_XMM|T_USER:
|
||||
fputrap(&frame);
|
||||
fputrap(frame);
|
||||
goto out;
|
||||
|
||||
case T_PAGEFLT: /* allow page faults in kernel mode */
|
||||
@ -413,7 +412,7 @@ faultcommon:
|
||||
map = kernel_map;
|
||||
else
|
||||
map = &vm->vm_map;
|
||||
if (frame.tf_err & PGEX_W)
|
||||
if (frame->tf_err & PGEX_W)
|
||||
ftype = VM_PROT_WRITE;
|
||||
else
|
||||
ftype = VM_PROT_READ;
|
||||
@ -482,7 +481,7 @@ faultcommon:
|
||||
} else {
|
||||
#ifdef TRAP_SIGDEBUG
|
||||
printf("pid %d (%s): SEGV at rip %lx addr %lx\n",
|
||||
p->p_pid, p->p_comm, frame.tf_rip, va);
|
||||
p->p_pid, p->p_comm, frame->tf_rip, va);
|
||||
frame_dump(&frame);
|
||||
#endif
|
||||
(*p->p_emul->e_trapsignal)(l, SIGSEGV, T_PAGEFLT);
|
||||
@ -496,10 +495,10 @@ faultcommon:
|
||||
|
||||
case T_TRCTRAP:
|
||||
/* Check whether they single-stepped into a lcall. */
|
||||
if (frame.tf_rip == (int)IDTVEC(oosyscall))
|
||||
if (frame->tf_rip == (int)IDTVEC(oosyscall))
|
||||
return;
|
||||
if (frame.tf_rip == (int)IDTVEC(oosyscall) + 1) {
|
||||
frame.tf_rflags &= ~PSL_T;
|
||||
if (frame->tf_rip == (int)IDTVEC(oosyscall) + 1) {
|
||||
frame->tf_rflags &= ~PSL_T;
|
||||
return;
|
||||
}
|
||||
goto we_re_toast;
|
||||
@ -510,7 +509,7 @@ faultcommon:
|
||||
trace:
|
||||
#endif
|
||||
if ((p->p_nras == 0) ||
|
||||
(ras_lookup(p, (caddr_t)frame.tf_rip) == (caddr_t)-1)) {
|
||||
(ras_lookup(p, (caddr_t)frame->tf_rip) == (caddr_t)-1)) {
|
||||
KERNEL_PROC_LOCK(l);
|
||||
(*p->p_emul->e_trapsignal)(l, SIGTRAP, type &~ T_USER);
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vector.S,v 1.2 2003/05/04 23:46:41 fvdl Exp $ */
|
||||
/* $NetBSD: vector.S,v 1.3 2003/08/20 21:48:51 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 Wasabi Systems, Inc.
|
||||
@ -225,6 +225,7 @@ calltrap:
|
||||
#ifdef DIAGNOSTIC
|
||||
movl CPUVAR(ILEVEL),%ebx
|
||||
#endif /* DIAGNOSTIC */
|
||||
movq %rsp,%rdi
|
||||
call _C_LABEL(trap)
|
||||
2: /* Check for ASTs on exit to user mode. */
|
||||
cli
|
||||
@ -235,6 +236,7 @@ calltrap:
|
||||
5: CLEAR_ASTPENDING(%r11)
|
||||
sti
|
||||
movl $T_ASTFLT,TF_TRAPNO(%rsp)
|
||||
movq %rsp,%rdi
|
||||
call _C_LABEL(trap)
|
||||
jmp 2b
|
||||
#ifndef DIAGNOSTIC
|
||||
@ -370,8 +372,8 @@ IDTVEC(intr_lapic_ltimer)
|
||||
#endif /* NLAPIC > 0 */
|
||||
|
||||
#ifdef MULTIPROCESSOR
|
||||
#define LOCK_KERNEL call _C_LABEL(x86_intlock)
|
||||
#define UNLOCK_KERNEL call _C_LABEL(x86_intunlock)
|
||||
#define LOCK_KERNEL movq %rsp,%rdi ; call _C_LABEL(x86_intlock)
|
||||
#define UNLOCK_KERNEL movq %rsp,%rdi ; call _C_LABEL(x86_intunlock)
|
||||
#else
|
||||
#define LOCK_KERNEL
|
||||
#define UNLOCK_KERNEL
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $NetBSD: files.amd64,v 1.4 2003/07/27 01:19:25 thorpej Exp $
|
||||
# $NetBSD: files.amd64,v 1.5 2003/08/20 21:48:52 fvdl Exp $
|
||||
#
|
||||
# new style config file for amd64 architecture
|
||||
#
|
||||
@ -32,7 +32,7 @@ file arch/amd64/amd64/db_disasm.c ddb
|
||||
file arch/amd64/amd64/db_interface.c ddb
|
||||
file arch/amd64/amd64/db_memrw.c ddb | kgdb
|
||||
file arch/amd64/amd64/db_trace.c ddb
|
||||
file arch/amd64/amd64/disksubr.c disk
|
||||
file kern/subr_disk_mbr.c disk
|
||||
file arch/amd64/amd64/gdt.c
|
||||
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: proc.h,v 1.2 2003/08/07 16:26:36 agc Exp $ */
|
||||
/* $NetBSD: proc.h,v 1.3 2003/08/20 21:48:52 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991 Regents of the University of California.
|
||||
@ -48,7 +48,7 @@ struct mdlwp {
|
||||
struct mdproc {
|
||||
int md_flags;
|
||||
/* Syscall handling function */
|
||||
void (*md_syscall) __P((struct trapframe));
|
||||
void (*md_syscall) __P((struct trapframe *));
|
||||
__volatile int md_astpending;
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: compat_13_machdep.c,v 1.11 2003/06/23 11:01:17 martin Exp $ */
|
||||
/* $NetBSD: compat_13_machdep.c,v 1.12 2003/08/20 21:48:35 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.11 2003/06/23 11:01:17 martin Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.12 2003/08/20 21:48:35 fvdl Exp $");
|
||||
|
||||
#include "opt_vm86.h"
|
||||
|
||||
@ -82,7 +82,7 @@ compat_13_sys_sigreturn(l, v, retval)
|
||||
tf = l->l_md.md_regs;
|
||||
#ifdef VM86
|
||||
if (context.sc_eflags & PSL_VM) {
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
|
||||
tf->tf_vm86_gs = context.sc_gs;
|
||||
tf->tf_vm86_fs = context.sc_fs;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: freebsd_machdep.c,v 1.36 2003/01/17 23:10:30 thorpej Exp $ */
|
||||
/* $NetBSD: freebsd_machdep.c,v 1.37 2003/08/20 21:48:36 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.36 2003/01/17 23:10:30 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: freebsd_machdep.c,v 1.37 2003/08/20 21:48:36 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_vm86.h"
|
||||
@ -228,7 +228,7 @@ freebsd_sys_sigreturn(l, v, retval)
|
||||
tf = l->l_md.md_regs;
|
||||
#ifdef VM86
|
||||
if (context.sc_efl & PSL_VM) {
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
|
||||
tf->tf_vm86_gs = context.sc_gs;
|
||||
tf->tf_vm86_fs = context.sc_fs;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: freebsd_syscall.c,v 1.12 2003/01/17 23:10:30 thorpej Exp $ */
|
||||
/* $NetBSD: freebsd_syscall.c,v 1.13 2003/08/20 21:48:36 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: freebsd_syscall.c,v 1.12 2003/01/17 23:10:30 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: freebsd_syscall.c,v 1.13 2003/08/20 21:48:36 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_syscall_debug.h"
|
||||
@ -68,8 +68,8 @@ __KERNEL_RCSID(0, "$NetBSD: freebsd_syscall.c,v 1.12 2003/01/17 23:10:30 thorpej
|
||||
#include <machine/freebsd_machdep.h>
|
||||
#include <compat/freebsd/freebsd_syscall.h>
|
||||
|
||||
void freebsd_syscall_plain __P((struct trapframe));
|
||||
void freebsd_syscall_fancy __P((struct trapframe));
|
||||
void freebsd_syscall_plain __P((struct trapframe *));
|
||||
void freebsd_syscall_fancy __P((struct trapframe *));
|
||||
|
||||
void
|
||||
freebsd_syscall_intern(p)
|
||||
@ -98,7 +98,7 @@ freebsd_syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
freebsd_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -112,9 +112,9 @@ freebsd_syscall_plain(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -150,7 +150,7 @@ freebsd_syscall_plain(frame)
|
||||
#endif /* SYSCALL_DEBUG */
|
||||
|
||||
rval[0] = 0;
|
||||
rval[1] = frame.tf_edx; /* need to keep edx for shared FreeBSD bins */
|
||||
rval[1] = frame->tf_edx; /* need to keep edx for shared FreeBSD bins */
|
||||
|
||||
KERNEL_PROC_LOCK(l);
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
@ -158,9 +158,9 @@ freebsd_syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -168,15 +168,15 @@ freebsd_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -188,7 +188,7 @@ freebsd_syscall_plain(frame)
|
||||
|
||||
void
|
||||
freebsd_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -202,9 +202,9 @@ freebsd_syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -240,14 +240,14 @@ freebsd_syscall_fancy(frame)
|
||||
goto bad;
|
||||
|
||||
rval[0] = 0;
|
||||
rval[1] = frame.tf_edx; /* need to keep edx for shared FreeBSD bins */
|
||||
rval[1] = frame->tf_edx; /* need to keep edx for shared FreeBSD bins */
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -255,15 +255,15 @@ freebsd_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ibcs2_syscall.c,v 1.21 2003/01/17 23:10:30 thorpej Exp $ */
|
||||
/* $NetBSD: ibcs2_syscall.c,v 1.22 2003/08/20 21:48:36 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ibcs2_syscall.c,v 1.21 2003/01/17 23:10:30 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ibcs2_syscall.c,v 1.22 2003/08/20 21:48:36 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_syscall_debug.h"
|
||||
@ -71,8 +71,8 @@ __KERNEL_RCSID(0, "$NetBSD: ibcs2_syscall.c,v 1.21 2003/01/17 23:10:30 thorpej E
|
||||
#include <compat/ibcs2/ibcs2_syscall.h>
|
||||
#include <machine/ibcs2_machdep.h>
|
||||
|
||||
void ibcs2_syscall_plain __P((struct trapframe));
|
||||
void ibcs2_syscall_fancy __P((struct trapframe));
|
||||
void ibcs2_syscall_plain __P((struct trapframe *));
|
||||
void ibcs2_syscall_fancy __P((struct trapframe *));
|
||||
extern struct sysent ibcs2_sysent[];
|
||||
|
||||
void
|
||||
@ -101,7 +101,7 @@ ibcs2_syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
ibcs2_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -113,11 +113,11 @@ ibcs2_syscall_plain(frame)
|
||||
uvmexp.syscalls++;
|
||||
l = curlwp;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
if (IBCS2_HIGH_SYSCALL(code))
|
||||
code = IBCS2_CVT_HIGH_SYSCALL(code);
|
||||
callp = ibcs2_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -153,9 +153,9 @@ ibcs2_syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -163,7 +163,7 @@ ibcs2_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
@ -171,8 +171,8 @@ ibcs2_syscall_plain(frame)
|
||||
default:
|
||||
bad:
|
||||
error = native_to_ibcs2_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -189,7 +189,7 @@ ibcs2_syscall_plain(frame)
|
||||
*/
|
||||
void
|
||||
ibcs2_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -203,11 +203,11 @@ ibcs2_syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
if (IBCS2_HIGH_SYSCALL(code))
|
||||
code = IBCS2_CVT_HIGH_SYSCALL(code);
|
||||
callp = ibcs2_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -241,9 +241,9 @@ ibcs2_syscall_fancy(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -251,7 +251,7 @@ ibcs2_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
@ -259,8 +259,8 @@ ibcs2_syscall_fancy(frame)
|
||||
default:
|
||||
bad:
|
||||
error = native_to_ibcs2_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: linux_syscall.c,v 1.24 2003/01/17 23:10:30 thorpej Exp $ */
|
||||
/* $NetBSD: linux_syscall.c,v 1.25 2003/08/20 21:48:37 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: linux_syscall.c,v 1.24 2003/01/17 23:10:30 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: linux_syscall.c,v 1.25 2003/08/20 21:48:37 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_syscall_debug.h"
|
||||
@ -72,8 +72,8 @@ __KERNEL_RCSID(0, "$NetBSD: linux_syscall.c,v 1.24 2003/01/17 23:10:30 thorpej E
|
||||
#include <compat/linux/common/linux_signal.h>
|
||||
#include <compat/linux/arch/i386/linux_machdep.h>
|
||||
|
||||
void linux_syscall_plain __P((struct trapframe));
|
||||
void linux_syscall_fancy __P((struct trapframe));
|
||||
void linux_syscall_plain __P((struct trapframe *));
|
||||
void linux_syscall_fancy __P((struct trapframe *));
|
||||
extern struct sysent linux_sysent[];
|
||||
|
||||
void
|
||||
@ -102,7 +102,7 @@ linux_syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
linux_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register const struct sysent *callp;
|
||||
struct lwp *l;
|
||||
@ -113,7 +113,7 @@ linux_syscall_plain(frame)
|
||||
uvmexp.syscalls++;
|
||||
l = curlwp;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = linux_sysent;
|
||||
|
||||
code &= (LINUX_SYS_NSYSENT - 1);
|
||||
@ -126,17 +126,17 @@ linux_syscall_plain(frame)
|
||||
*/
|
||||
switch (argsize >> 2) {
|
||||
case 6:
|
||||
args[5] = frame.tf_ebp;
|
||||
args[5] = frame->tf_ebp;
|
||||
case 5:
|
||||
args[4] = frame.tf_edi;
|
||||
args[4] = frame->tf_edi;
|
||||
case 4:
|
||||
args[3] = frame.tf_esi;
|
||||
args[3] = frame->tf_esi;
|
||||
case 3:
|
||||
args[2] = frame.tf_edx;
|
||||
args[2] = frame->tf_edx;
|
||||
case 2:
|
||||
args[1] = frame.tf_ecx;
|
||||
args[1] = frame->tf_ecx;
|
||||
case 1:
|
||||
args[0] = frame.tf_ebx;
|
||||
args[0] = frame->tf_ebx;
|
||||
break;
|
||||
default:
|
||||
panic("linux syscall %d bogus argument size %d",
|
||||
@ -156,8 +156,8 @@ linux_syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -165,15 +165,15 @@ linux_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
error = native_to_linux_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -190,7 +190,7 @@ linux_syscall_plain(frame)
|
||||
*/
|
||||
void
|
||||
linux_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register const struct sysent *callp;
|
||||
struct lwp *l;
|
||||
@ -203,7 +203,7 @@ linux_syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = linux_sysent;
|
||||
|
||||
code &= (LINUX_SYS_NSYSENT - 1);
|
||||
@ -216,17 +216,17 @@ linux_syscall_fancy(frame)
|
||||
*/
|
||||
switch (argsize >> 2) {
|
||||
case 6:
|
||||
args[5] = frame.tf_ebp;
|
||||
args[5] = frame->tf_ebp;
|
||||
case 5:
|
||||
args[4] = frame.tf_edi;
|
||||
args[4] = frame->tf_edi;
|
||||
case 4:
|
||||
args[3] = frame.tf_esi;
|
||||
args[3] = frame->tf_esi;
|
||||
case 3:
|
||||
args[2] = frame.tf_edx;
|
||||
args[2] = frame->tf_edx;
|
||||
case 2:
|
||||
args[1] = frame.tf_ecx;
|
||||
args[1] = frame->tf_ecx;
|
||||
case 1:
|
||||
args[0] = frame.tf_ebx;
|
||||
args[0] = frame->tf_ebx;
|
||||
break;
|
||||
default:
|
||||
panic("linux syscall %d bogus argument size %d",
|
||||
@ -246,8 +246,8 @@ linux_syscall_fancy(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -255,7 +255,7 @@ linux_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
@ -263,8 +263,8 @@ linux_syscall_fancy(frame)
|
||||
default:
|
||||
bad:
|
||||
error = native_to_linux_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: locore.S,v 1.14 2003/08/11 21:15:50 fvdl Exp $ */
|
||||
/* $NetBSD: locore.S,v 1.15 2003/08/20 21:48:37 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -2143,7 +2143,9 @@ syscall1:
|
||||
movl CPUVAR(CURLWP),%edx
|
||||
movl %esp,L_MD_REGS(%edx) # save pointer to frame
|
||||
movl L_PROC(%edx),%edx
|
||||
pushl %esp
|
||||
call *P_MD_SYSCALL(%edx) # get pointer to syscall() function
|
||||
addl $4,%esp
|
||||
2: /* Check for ASTs on exit to user mode. */
|
||||
cli
|
||||
CHECK_ASTPENDING(%eax)
|
||||
@ -2152,7 +2154,9 @@ syscall1:
|
||||
CLEAR_ASTPENDING(%eax)
|
||||
sti
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
jmp 2b
|
||||
#ifndef DIAGNOSTIC
|
||||
1: INTRFASTEXIT
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mach_sigcode.S,v 1.4 2003/08/07 16:27:54 agc Exp $ */
|
||||
/* $NetBSD: mach_sigcode.S,v 1.5 2003/08/20 21:48:37 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -121,6 +121,8 @@ IDTVEC(mach_trap)
|
||||
CLEAR_ASTPENDING(%eax)
|
||||
sti
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
jmp 2b
|
||||
1: INTRFASTEXIT
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mach_syscall.c,v 1.8 2003/01/22 17:48:18 christos Exp $ */
|
||||
/* $NetBSD: mach_syscall.c,v 1.9 2003/08/20 21:48:38 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: mach_syscall.c,v 1.8 2003/01/22 17:48:18 christos Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: mach_syscall.c,v 1.9 2003/08/20 21:48:38 fvdl Exp $");
|
||||
|
||||
#include "opt_syscall_debug.h"
|
||||
#include "opt_vm86.h"
|
||||
@ -66,8 +66,8 @@ __KERNEL_RCSID(0, "$NetBSD: mach_syscall.c,v 1.8 2003/01/22 17:48:18 christos Ex
|
||||
#include <compat/mach/mach_syscall.h>
|
||||
|
||||
void mach_syscall_intern __P((struct proc *));
|
||||
void mach_syscall_plain __P((struct trapframe));
|
||||
void mach_syscall_fancy __P((struct trapframe));
|
||||
void mach_syscall_plain __P((struct trapframe *));
|
||||
void mach_syscall_fancy __P((struct trapframe *));
|
||||
|
||||
extern struct sysent mach_sysent[];
|
||||
|
||||
@ -98,7 +98,7 @@ mach_syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
mach_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -110,8 +110,8 @@ mach_syscall_plain(frame)
|
||||
|
||||
uvmexp.syscalls++;
|
||||
|
||||
code = frame.tf_eax;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
code = frame->tf_eax;
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -162,9 +162,9 @@ mach_syscall_plain(frame)
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -172,15 +172,15 @@ mach_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -192,7 +192,7 @@ mach_syscall_plain(frame)
|
||||
|
||||
void
|
||||
mach_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
caddr_t params;
|
||||
const struct sysent *callp;
|
||||
@ -204,9 +204,9 @@ mach_syscall_fancy(frame)
|
||||
|
||||
uvmexp.syscalls++;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
realcode = code;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -256,9 +256,9 @@ mach_syscall_fancy(frame)
|
||||
error = (*callp->sy_call)(l, args, rval);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -266,15 +266,15 @@ mach_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.531 2003/08/17 14:23:16 kochi Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.532 2003/08/20 21:48:38 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -72,7 +72,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.531 2003/08/17 14:23:16 kochi Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.532 2003/08/20 21:48:38 fvdl Exp $");
|
||||
|
||||
#include "opt_cputype.h"
|
||||
#include "opt_ddb.h"
|
||||
@ -798,7 +798,7 @@ sys___sigreturn14(l, v, retval)
|
||||
tf = l->l_md.md_regs;
|
||||
#ifdef VM86
|
||||
if (context.sc_eflags & PSL_VM) {
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
|
||||
tf->tf_vm86_gs = context.sc_gs;
|
||||
tf->tf_vm86_fs = context.sc_fs;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: process_machdep.c,v 1.48 2003/06/29 22:28:26 fvdl Exp $ */
|
||||
/* $NetBSD: process_machdep.c,v 1.49 2003/08/20 21:48:40 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
|
||||
@ -59,7 +59,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.48 2003/06/29 22:28:26 fvdl Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.49 2003/08/20 21:48:40 fvdl Exp $");
|
||||
|
||||
#include "opt_vm86.h"
|
||||
#include "npx.h"
|
||||
@ -301,7 +301,7 @@ process_write_regs(struct lwp *l, struct reg *regs)
|
||||
|
||||
#ifdef VM86
|
||||
if (regs->r_eflags & PSL_VM) {
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
|
||||
tf->tf_vm86_gs = regs->r_gs;
|
||||
tf->tf_vm86_fs = regs->r_fs;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: spl.S,v 1.6 2003/01/17 23:10:32 thorpej Exp $ */
|
||||
/* $NetBSD: spl.S,v 1.7 2003/08/20 21:48:41 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -162,7 +162,9 @@ IDTVEC(doreti)
|
||||
sti
|
||||
movl $T_ASTFLT,TF_TRAPNO(%esp) /* XXX undo later.. */
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
cli
|
||||
jmp 5b
|
||||
3:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: svr4_machdep.c,v 1.67 2003/07/27 14:14:44 mrg Exp $ */
|
||||
/* $NetBSD: svr4_machdep.c,v 1.68 2003/08/20 21:48:41 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1994, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.67 2003/07/27 14:14:44 mrg Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.68 2003/08/20 21:48:41 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_vm86.h"
|
||||
@ -218,7 +218,7 @@ svr4_setmcontext(l, mc, flags)
|
||||
tf = l->l_md.md_regs;
|
||||
#ifdef VM86
|
||||
if (r[SVR4_X86_EFL] & PSL_VM) {
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
|
||||
tf->tf_vm86_gs = r[SVR4_X86_GS];
|
||||
tf->tf_vm86_fs = r[SVR4_X86_FS];
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: svr4_sigcode.S,v 1.5 2003/08/07 16:27:56 agc Exp $ */
|
||||
/* $NetBSD: svr4_sigcode.S,v 1.6 2003/08/20 21:48:42 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||
@ -115,6 +115,8 @@ IDTVEC(svr4_fasttrap)
|
||||
CLEAR_ASTPENDING(%eax)
|
||||
sti
|
||||
/* Pushed T_ASTFLT into tf_trapno on entry. */
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
jmp 2b
|
||||
1: INTRFASTEXIT
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: svr4_syscall.c,v 1.20 2003/01/17 23:10:32 thorpej Exp $ */
|
||||
/* $NetBSD: svr4_syscall.c,v 1.21 2003/08/20 21:48:42 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: svr4_syscall.c,v 1.20 2003/01/17 23:10:32 thorpej Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: svr4_syscall.c,v 1.21 2003/08/20 21:48:42 fvdl Exp $");
|
||||
|
||||
#if defined(_KERNEL_OPT)
|
||||
#include "opt_syscall_debug.h"
|
||||
@ -70,8 +70,8 @@ __KERNEL_RCSID(0, "$NetBSD: svr4_syscall.c,v 1.20 2003/01/17 23:10:32 thorpej Ex
|
||||
#include <compat/svr4/svr4_syscall.h>
|
||||
#include <machine/svr4_machdep.h>
|
||||
|
||||
void svr4_syscall_plain __P((struct trapframe));
|
||||
void svr4_syscall_fancy __P((struct trapframe));
|
||||
void svr4_syscall_plain __P((struct trapframe *));
|
||||
void svr4_syscall_fancy __P((struct trapframe *));
|
||||
extern struct sysent svr4_sysent[];
|
||||
|
||||
void
|
||||
@ -100,7 +100,7 @@ svr4_syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
svr4_syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -112,9 +112,9 @@ svr4_syscall_plain(frame)
|
||||
uvmexp.syscalls++;
|
||||
l = curlwp;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = svr4_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -150,9 +150,9 @@ svr4_syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -160,7 +160,7 @@ svr4_syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
@ -168,8 +168,8 @@ svr4_syscall_plain(frame)
|
||||
default:
|
||||
bad:
|
||||
error = native_to_svr4_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -186,7 +186,7 @@ svr4_syscall_plain(frame)
|
||||
*/
|
||||
void
|
||||
svr4_syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -200,9 +200,9 @@ svr4_syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = svr4_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -236,9 +236,9 @@ svr4_syscall_fancy(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -246,7 +246,7 @@ svr4_syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
@ -254,8 +254,8 @@ svr4_syscall_fancy(frame)
|
||||
default:
|
||||
bad:
|
||||
error = native_to_svr4_errno[error];
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: syscall.c,v 1.21 2003/08/04 18:43:38 drochner Exp $ */
|
||||
/* $NetBSD: syscall.c,v 1.22 2003/08/20 21:48:42 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.21 2003/08/04 18:43:38 drochner Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.22 2003/08/20 21:48:42 fvdl Exp $");
|
||||
|
||||
#include "opt_syscall_debug.h"
|
||||
#include "opt_vm86.h"
|
||||
@ -66,10 +66,10 @@ __KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.21 2003/08/04 18:43:38 drochner Exp $"
|
||||
#include <machine/userret.h>
|
||||
|
||||
void syscall_intern __P((struct proc *));
|
||||
void syscall_plain __P((struct trapframe));
|
||||
void syscall_fancy __P((struct trapframe));
|
||||
void syscall_plain __P((struct trapframe *));
|
||||
void syscall_fancy __P((struct trapframe *));
|
||||
#ifdef VM86
|
||||
void syscall_vm86 __P((struct trapframe));
|
||||
void syscall_vm86 __P((struct trapframe *));
|
||||
#endif
|
||||
|
||||
void
|
||||
@ -98,7 +98,7 @@ syscall_intern(p)
|
||||
*/
|
||||
void
|
||||
syscall_plain(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -112,9 +112,9 @@ syscall_plain(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -158,9 +158,9 @@ syscall_plain(frame)
|
||||
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -168,15 +168,15 @@ syscall_plain(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -188,7 +188,7 @@ syscall_plain(frame)
|
||||
|
||||
void
|
||||
syscall_fancy(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
register caddr_t params;
|
||||
register const struct sysent *callp;
|
||||
@ -202,9 +202,9 @@ syscall_fancy(frame)
|
||||
l = curlwp;
|
||||
p = l->l_proc;
|
||||
|
||||
code = frame.tf_eax;
|
||||
code = frame->tf_eax;
|
||||
callp = p->p_emul->e_sysent;
|
||||
params = (caddr_t)frame.tf_esp + sizeof(int);
|
||||
params = (caddr_t)frame->tf_esp + sizeof(int);
|
||||
|
||||
switch (code) {
|
||||
case SYS_syscall:
|
||||
@ -247,9 +247,9 @@ syscall_fancy(frame)
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
switch (error) {
|
||||
case 0:
|
||||
frame.tf_eax = rval[0];
|
||||
frame.tf_edx = rval[1];
|
||||
frame.tf_eflags &= ~PSL_C; /* carry bit */
|
||||
frame->tf_eax = rval[0];
|
||||
frame->tf_edx = rval[1];
|
||||
frame->tf_eflags &= ~PSL_C; /* carry bit */
|
||||
break;
|
||||
case ERESTART:
|
||||
/*
|
||||
@ -257,15 +257,15 @@ syscall_fancy(frame)
|
||||
* the kernel through the trap or call gate. We pushed the
|
||||
* size of the instruction into tf_err on entry.
|
||||
*/
|
||||
frame.tf_eip -= frame.tf_err;
|
||||
frame->tf_eip -= frame->tf_err;
|
||||
break;
|
||||
case EJUSTRETURN:
|
||||
/* nothing to do */
|
||||
break;
|
||||
default:
|
||||
bad:
|
||||
frame.tf_eax = error;
|
||||
frame.tf_eflags |= PSL_C; /* carry bit */
|
||||
frame->tf_eax = error;
|
||||
frame->tf_eflags |= PSL_C; /* carry bit */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -277,7 +277,7 @@ syscall_fancy(frame)
|
||||
#ifdef VM86
|
||||
void
|
||||
syscall_vm86(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
struct lwp *l;
|
||||
struct proc *p;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: trap.c,v 1.183 2003/08/07 16:27:56 agc Exp $ */
|
||||
/* $NetBSD: trap.c,v 1.184 2003/08/20 21:48:43 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
@ -75,7 +75,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.183 2003/08/07 16:27:56 agc Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.184 2003/08/20 21:48:43 fvdl Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_kgdb.h"
|
||||
@ -126,7 +126,7 @@ __KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.183 2003/08/07 16:27:56 agc Exp $");
|
||||
|
||||
#include "npx.h"
|
||||
|
||||
void trap __P((struct trapframe));
|
||||
void trap __P((struct trapframe *));
|
||||
void trap_tss __P((struct i386tss *, int, int));
|
||||
#if defined(I386_CPU)
|
||||
int trapwrite __P((unsigned));
|
||||
@ -196,7 +196,7 @@ trap_tss(struct i386tss *tss, int trapno, int code)
|
||||
tf.tf_eflags = tss->__tss_eflags;
|
||||
tf.tf_esp = tss->tss_esp;
|
||||
tf.tf_ss = tss->__tss_ss;
|
||||
trap(tf);
|
||||
trap(&tf);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -210,11 +210,11 @@ trap_tss(struct i386tss *tss, int trapno, int code)
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
trap(frame)
|
||||
struct trapframe frame;
|
||||
struct trapframe *frame;
|
||||
{
|
||||
struct lwp *l = curlwp;
|
||||
struct proc *p = l ? l->l_proc : 0;
|
||||
int type = frame.tf_trapno;
|
||||
int type = frame->tf_trapno;
|
||||
struct pcb *pcb;
|
||||
extern char fusubail[],
|
||||
resume_iret[], resume_pop_ds[], resume_pop_es[],
|
||||
@ -232,17 +232,17 @@ trap(frame)
|
||||
#ifdef DEBUG
|
||||
if (trapdebug) {
|
||||
printf("trap %d code %x eip %x cs %x eflags %x cr2 %x cpl %x\n",
|
||||
frame.tf_trapno, frame.tf_err, frame.tf_eip, frame.tf_cs,
|
||||
frame.tf_eflags, rcr2(), curcpu()->ci_ilevel);
|
||||
frame->tf_trapno, frame->tf_err, frame->tf_eip, frame->tf_cs,
|
||||
frame->tf_eflags, rcr2(), curcpu()->ci_ilevel);
|
||||
printf("curlwp %p%s", curlwp, curlwp ? " " : "\n");
|
||||
if (curlwp)
|
||||
printf("pid %d lid %d\n", l->l_proc->p_pid, l->l_lid);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!KVM86MODE && !KERNELMODE(frame.tf_cs, frame.tf_eflags)) {
|
||||
if (!KVM86MODE && !KERNELMODE(frame->tf_cs, frame->tf_eflags)) {
|
||||
type |= T_USER;
|
||||
l->l_md.md_regs = &frame;
|
||||
l->l_md.md_regs = frame;
|
||||
pcb->pcb_cr2 = 0;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ trap(frame)
|
||||
}
|
||||
#endif
|
||||
#ifdef KGDB
|
||||
if (kgdb_trap(type, &frame))
|
||||
if (kgdb_trap(type, frame))
|
||||
return;
|
||||
else {
|
||||
/*
|
||||
@ -280,17 +280,17 @@ trap(frame)
|
||||
}
|
||||
#endif
|
||||
#ifdef DDB
|
||||
if (kdb_trap(type, 0, &frame))
|
||||
if (kdb_trap(type, 0, frame))
|
||||
return;
|
||||
#endif
|
||||
if (frame.tf_trapno < trap_types)
|
||||
printf("fatal %s", trap_type[frame.tf_trapno]);
|
||||
if (frame->tf_trapno < trap_types)
|
||||
printf("fatal %s", trap_type[frame->tf_trapno]);
|
||||
else
|
||||
printf("unknown trap %d", frame.tf_trapno);
|
||||
printf("unknown trap %d", frame->tf_trapno);
|
||||
printf(" in %s mode\n", (type & T_USER) ? "user" : "supervisor");
|
||||
printf("trap type %d code %x eip %x cs %x eflags %x cr2 %x ilevel %x\n",
|
||||
type, frame.tf_err, frame.tf_eip, frame.tf_cs,
|
||||
frame.tf_eflags, rcr2(), curcpu()->ci_ilevel);
|
||||
type, frame->tf_err, frame->tf_eip, frame->tf_cs,
|
||||
frame->tf_eflags, rcr2(), curcpu()->ci_ilevel);
|
||||
|
||||
panic("trap");
|
||||
/*NOTREACHED*/
|
||||
@ -298,7 +298,7 @@ trap(frame)
|
||||
case T_PROTFLT:
|
||||
#ifdef KVM86
|
||||
if (KVM86MODE) {
|
||||
kvm86_gpfault(&frame);
|
||||
kvm86_gpfault(frame);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
@ -312,8 +312,8 @@ trap(frame)
|
||||
copyefault:
|
||||
error = EFAULT;
|
||||
copyfault:
|
||||
frame.tf_eip = (int)pcb->pcb_onfault;
|
||||
frame.tf_eax = error;
|
||||
frame->tf_eip = (int)pcb->pcb_onfault;
|
||||
frame->tf_eax = error;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -347,31 +347,31 @@ copyfault:
|
||||
* at this point is the same as on exit from a `slow'
|
||||
* interrupt.
|
||||
*/
|
||||
switch (*(u_char *)frame.tf_eip) {
|
||||
switch (*(u_char *)frame->tf_eip) {
|
||||
case 0xcf: /* iret */
|
||||
vframe = (void *)((int)&frame.tf_esp -
|
||||
vframe = (void *)((int)&frame->tf_esp -
|
||||
offsetof(struct trapframe, tf_eip));
|
||||
resume = (int)resume_iret;
|
||||
break;
|
||||
case 0x1f: /* popl %ds */
|
||||
vframe = (void *)((int)&frame.tf_esp -
|
||||
vframe = (void *)((int)&frame->tf_esp -
|
||||
offsetof(struct trapframe, tf_ds));
|
||||
resume = (int)resume_pop_ds;
|
||||
break;
|
||||
case 0x07: /* popl %es */
|
||||
vframe = (void *)((int)&frame.tf_esp -
|
||||
vframe = (void *)((int)&frame->tf_esp -
|
||||
offsetof(struct trapframe, tf_es));
|
||||
resume = (int)resume_pop_es;
|
||||
break;
|
||||
case 0x0f: /* 0x0f prefix */
|
||||
switch (*(u_char *)(frame.tf_eip+1)) {
|
||||
switch (*(u_char *)(frame->tf_eip+1)) {
|
||||
case 0xa1: /* popl %fs */
|
||||
vframe = (void *)((int)&frame.tf_esp -
|
||||
vframe = (void *)((int)&frame->tf_esp -
|
||||
offsetof(struct trapframe, tf_fs));
|
||||
resume = (int)resume_pop_fs;
|
||||
break;
|
||||
case 0xa9: /* popl %gs */
|
||||
vframe = (void *)((int)&frame.tf_esp -
|
||||
vframe = (void *)((int)&frame->tf_esp -
|
||||
offsetof(struct trapframe, tf_gs));
|
||||
resume = (int)resume_pop_gs;
|
||||
break;
|
||||
@ -383,12 +383,12 @@ copyfault:
|
||||
if (KERNELMODE(vframe->tf_cs, vframe->tf_eflags))
|
||||
goto we_re_toast;
|
||||
|
||||
frame.tf_eip = resume;
|
||||
frame->tf_eip = resume;
|
||||
return;
|
||||
|
||||
case T_PROTFLT|T_USER: /* protection fault */
|
||||
#ifdef VM86
|
||||
if (frame.tf_eflags & PSL_VM) {
|
||||
if (frame->tf_eflags & PSL_VM) {
|
||||
vm86_gpfault(l, type & ~T_USER);
|
||||
goto out;
|
||||
}
|
||||
@ -426,8 +426,8 @@ copyfault:
|
||||
case T_DNA|T_USER: {
|
||||
#ifdef MATH_EMULATE
|
||||
int rv;
|
||||
if ((rv = math_emulate(&frame)) == 0) {
|
||||
if (frame.tf_eflags & PSL_T)
|
||||
if ((rv = math_emulate(frame)) == 0) {
|
||||
if (frame->tf_eflags & PSL_T)
|
||||
goto trace;
|
||||
return;
|
||||
}
|
||||
@ -456,7 +456,7 @@ copyfault:
|
||||
case T_ARITHTRAP|T_USER:
|
||||
KERNEL_PROC_LOCK(l);
|
||||
(*p->p_emul->e_trapsignal)(l, SIGFPE,
|
||||
frame.tf_err & ~TC_FLAGMASK);
|
||||
frame->tf_err & ~TC_FLAGMASK);
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
goto out;
|
||||
|
||||
@ -477,7 +477,7 @@ copyfault:
|
||||
|
||||
#if 0
|
||||
/* XXX - check only applies to 386's and 486's with WP off */
|
||||
if (frame.tf_err & PGEX_P)
|
||||
if (frame->tf_err & PGEX_P)
|
||||
goto we_re_toast;
|
||||
#endif
|
||||
cr2 = rcr2();
|
||||
@ -512,7 +512,7 @@ copyfault:
|
||||
map = kernel_map;
|
||||
else
|
||||
map = &vm->vm_map;
|
||||
if (frame.tf_err & PGEX_W)
|
||||
if (frame->tf_err & PGEX_W)
|
||||
ftype = VM_PROT_WRITE;
|
||||
else
|
||||
ftype = VM_PROT_READ;
|
||||
@ -590,10 +590,10 @@ copyfault:
|
||||
|
||||
case T_TRCTRAP:
|
||||
/* Check whether they single-stepped into a lcall. */
|
||||
if (frame.tf_eip == (int)IDTVEC(osyscall))
|
||||
if (frame->tf_eip == (int)IDTVEC(osyscall))
|
||||
return;
|
||||
if (frame.tf_eip == (int)IDTVEC(osyscall) + 1) {
|
||||
frame.tf_eflags &= ~PSL_T;
|
||||
if (frame->tf_eip == (int)IDTVEC(osyscall) + 1) {
|
||||
frame->tf_eflags &= ~PSL_T;
|
||||
return;
|
||||
}
|
||||
goto we_re_toast;
|
||||
@ -607,7 +607,7 @@ copyfault:
|
||||
* Don't go single-stepping into a RAS.
|
||||
*/
|
||||
if ((p->p_nras == 0) ||
|
||||
(ras_lookup(p, (caddr_t)frame.tf_eip) == (caddr_t)-1)) {
|
||||
(ras_lookup(p, (caddr_t)frame->tf_eip) == (caddr_t)-1)) {
|
||||
KERNEL_PROC_LOCK(l);
|
||||
(*p->p_emul->e_trapsignal)(l, SIGTRAP, type & ~T_USER);
|
||||
KERNEL_PROC_UNLOCK(l);
|
||||
@ -621,11 +621,11 @@ copyfault:
|
||||
printf ("NMI ... going to debugger\n");
|
||||
#ifdef KGDB
|
||||
|
||||
if (kgdb_trap(type, &frame))
|
||||
if (kgdb_trap(type, frame))
|
||||
return;
|
||||
#endif
|
||||
#ifdef DDB
|
||||
if (kdb_trap(type, 0, &frame))
|
||||
if (kdb_trap(type, 0, frame))
|
||||
return;
|
||||
#endif
|
||||
#endif /* KGDB || DDB */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vector.S,v 1.9 2003/06/23 11:01:22 martin Exp $ */
|
||||
/* $NetBSD: vector.S,v 1.10 2003/08/20 21:48:44 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2002 (c) Wasabi Systems, Inc.
|
||||
@ -235,8 +235,8 @@ IDTVEC(intr_lapic_ltimer)
|
||||
#endif /* NLAPIC > 0 */
|
||||
|
||||
#ifdef MULTIPROCESSOR
|
||||
#define LOCK_KERNEL call _C_LABEL(x86_intlock)
|
||||
#define UNLOCK_KERNEL call _C_LABEL(x86_intunlock)
|
||||
#define LOCK_KERNEL pushl %esp ; call _C_LABEL(x86_intlock) ; addl $4,%esp
|
||||
#define UNLOCK_KERNEL pushl %esp ; call _C_LABEL(x86_intunlock) ; addl $4,%esp
|
||||
#else
|
||||
#define LOCK_KERNEL
|
||||
#define UNLOCK_KERNEL
|
||||
@ -857,7 +857,9 @@ calltrap:
|
||||
#ifdef DIAGNOSTIC
|
||||
movl CPUVAR(ILEVEL),%ebx
|
||||
#endif /* DIAGNOSTIC */
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
2: /* Check for ASTs on exit to user mode. */
|
||||
cli
|
||||
CHECK_ASTPENDING(%eax)
|
||||
@ -871,7 +873,9 @@ calltrap:
|
||||
5: CLEAR_ASTPENDING(%eax)
|
||||
sti
|
||||
movl $T_ASTFLT,TF_TRAPNO(%esp)
|
||||
pushl %esp
|
||||
call _C_LABEL(trap)
|
||||
addl $4,%esp
|
||||
jmp 2b
|
||||
#ifndef DIAGNOSTIC
|
||||
1: INTRFASTEXIT
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: proc.h,v 1.21 2003/08/07 16:27:59 agc Exp $ */
|
||||
/* $NetBSD: proc.h,v 1.22 2003/08/20 21:48:45 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991 Regents of the University of California.
|
||||
@ -55,7 +55,7 @@ struct mdlwp {
|
||||
struct mdproc {
|
||||
/* Syscall handling function */
|
||||
int md_flags;
|
||||
void (*md_syscall) __P((struct trapframe));
|
||||
void (*md_syscall) __P((struct trapframe *));
|
||||
__volatile int md_astpending; /* AST pending for this process */
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: intr.h,v 1.5 2003/06/23 14:59:21 martin Exp $ */
|
||||
/* $NetBSD: intr.h,v 1.6 2003/08/20 21:48:46 fvdl Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
|
||||
@ -264,8 +264,8 @@ int x86_send_ipi(struct cpu_info *, int);
|
||||
void x86_broadcast_ipi(int);
|
||||
void x86_multicast_ipi(int, int);
|
||||
void x86_ipi_handler(void);
|
||||
void x86_intlock(struct intrframe);
|
||||
void x86_intunlock(struct intrframe);
|
||||
void x86_intlock(struct intrframe *);
|
||||
void x86_intunlock(struct intrframe *);
|
||||
void x86_softintlock(void);
|
||||
void x86_softintunlock(void);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: intr.c,v 1.4 2003/07/14 22:32:39 lukem Exp $ */
|
||||
/* $NetBSD: intr.c,v 1.5 2003/08/20 21:48:47 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2002 (c) Wasabi Systems, Inc.
|
||||
@ -36,7 +36,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.4 2003/07/14 22:32:39 lukem Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.5 2003/08/20 21:48:47 fvdl Exp $");
|
||||
|
||||
#include "opt_multiprocessor.h"
|
||||
|
||||
@ -626,16 +626,16 @@ cpu_intr_init(struct cpu_info *ci)
|
||||
|
||||
#ifdef MULTIPROCESSOR
|
||||
void
|
||||
x86_intlock(struct intrframe iframe)
|
||||
x86_intlock(struct intrframe *iframe)
|
||||
{
|
||||
if (iframe.if_ppl < IPL_SCHED)
|
||||
if (iframe->if_ppl < IPL_SCHED)
|
||||
spinlockmgr(&kernel_lock, LK_EXCLUSIVE|LK_CANRECURSE, 0);
|
||||
}
|
||||
|
||||
void
|
||||
x86_intunlock(struct intrframe iframe)
|
||||
x86_intunlock(struct intrframe *iframe)
|
||||
{
|
||||
if (iframe.if_ppl < IPL_SCHED)
|
||||
if (iframe->if_ppl < IPL_SCHED)
|
||||
spinlockmgr(&kernel_lock, LK_RELEASE, 0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user