Fix execve(2) and *setregs() interfaces so emulations can set registers in a
more correct way. (See tech-kern.)
This commit is contained in:
parent
5388cd2717
commit
16a8787248
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.84 1997/09/02 18:54:28 thorpej Exp $ */
|
/* $NetBSD: machdep.c,v 1.85 1997/09/11 23:01:44 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||||
|
|
||||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.84 1997/09/02 18:54:28 thorpej Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.85 1997/09/11 23:01:44 mycroft Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
@ -1467,11 +1467,10 @@ cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
|
||||||
* Set registers on exec.
|
* Set registers on exec.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tfp = p->p_md.md_tf;
|
struct trapframe *tfp = p->p_md.md_tf;
|
||||||
extern struct proc *fpcurproc;
|
extern struct proc *fpcurproc;
|
||||||
|
@ -1509,8 +1508,6 @@ setregs(p, pack, stack, retval)
|
||||||
p->p_md.md_flags &= ~MDP_FPUSED;
|
p->p_md.md_flags &= ~MDP_FPUSED;
|
||||||
if (fpcurproc == p)
|
if (fpcurproc == p)
|
||||||
fpcurproc = NULL;
|
fpcurproc = NULL;
|
||||||
|
|
||||||
retval[0] = retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1695,18 +1692,17 @@ delay(n)
|
||||||
|
|
||||||
#if defined(COMPAT_OSF1) || 1 /* XXX */
|
#if defined(COMPAT_OSF1) || 1 /* XXX */
|
||||||
void cpu_exec_ecoff_setregs __P((struct proc *, struct exec_package *,
|
void cpu_exec_ecoff_setregs __P((struct proc *, struct exec_package *,
|
||||||
u_long, register_t *));
|
u_long));
|
||||||
|
|
||||||
void
|
void
|
||||||
cpu_exec_ecoff_setregs(p, epp, stack, retval)
|
cpu_exec_ecoff_setregs(p, epp, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *epp;
|
struct exec_package *epp;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct ecoff_exechdr *execp = (struct ecoff_exechdr *)epp->ep_hdr;
|
struct ecoff_exechdr *execp = (struct ecoff_exechdr *)epp->ep_hdr;
|
||||||
|
|
||||||
setregs(p, epp, stack, retval);
|
setregs(p, epp, stack);
|
||||||
p->p_md.md_tf->tf_regs[FRAME_GP] = execp->a.gp_value;
|
p->p_md.md_tf->tf_regs[FRAME_GP] = execp->a.gp_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.95 1997/08/27 18:31:17 is Exp $ */
|
/* $NetBSD: machdep.c,v 1.96 1997/09/11 23:01:48 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -468,11 +468,10 @@ again:
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.24 1997/07/31 02:59:06 mark Exp $ */
|
/* $NetBSD: machdep.c,v 1.25 1997/09/11 23:01:52 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994-1996 Mark Brinicombe.
|
* Copyright (c) 1994-1996 Mark Brinicombe.
|
||||||
|
@ -2570,11 +2570,10 @@ setleds(led)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
register struct trapframe *tf;
|
register struct trapframe *tf;
|
||||||
|
|
||||||
|
@ -2598,8 +2597,6 @@ setregs(p, pack, stack, retval)
|
||||||
tf->tf_spsr = PSR_USR32_MODE;
|
tf->tf_spsr = PSR_USR32_MODE;
|
||||||
|
|
||||||
p->p_addr->u_pcb.pcb_flags = 0;
|
p->p_addr->u_pcb.pcb_flags = 0;
|
||||||
|
|
||||||
retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.50 1997/07/15 06:49:56 leo Exp $ */
|
/* $NetBSD: machdep.c,v 1.51 1997/09/11 23:01:55 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -380,11 +380,10 @@ again:
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: hpux_machdep.c,v 1.13 1997/04/27 21:38:57 thorpej Exp $ */
|
/* $NetBSD: hpux_machdep.c,v 1.14 1997/09/11 23:01:57 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 1996, 1997 Jason R. Thorpe. All rights reserved.
|
* Copyright (c) 1995, 1996, 1997 Jason R. Thorpe. All rights reserved.
|
||||||
|
@ -685,11 +685,10 @@ hpux_sys_sigreturn(p, v, retval)
|
||||||
* XXX Should clear registers except sp, pc.
|
* XXX Should clear registers except sp, pc.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
hpux_setregs(p, pack, stack, retval)
|
hpux_setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
@ -704,9 +703,9 @@ hpux_setregs(p, pack, stack, retval)
|
||||||
|
|
||||||
p->p_md.md_flags &= ~MDP_HPUXMMAP;
|
p->p_md.md_flags &= ~MDP_HPUXMMAP;
|
||||||
frame->f_regs[A0] = 0; /* not 68010 (bit 31), no FPA (30) */
|
frame->f_regs[A0] = 0; /* not 68010 (bit 31), no FPA (30) */
|
||||||
retval[0] = 0; /* no float card */
|
frame->f_regs[D0] = 0; /* no float card */
|
||||||
if (fputype)
|
if (fputype)
|
||||||
retval[1] = 1; /* yes 68881 */
|
frame->f_regs[D1] = 1; /* yes 68881 */
|
||||||
else
|
else
|
||||||
retval[1] = 0; /* no 68881 */
|
frame->f_regs[D1] = 0; /* no 68881 */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.94 1997/06/12 15:46:29 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.95 1997/09/11 23:02:00 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -439,11 +439,10 @@ allocsys(v)
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.250 1997/09/05 01:44:42 thorpej Exp $ */
|
/* $NetBSD: machdep.c,v 1.251 1997/09/11 23:02:02 mycroft Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
|
||||||
|
@ -1282,11 +1282,10 @@ dumpsys()
|
||||||
* Clear registers on exec
|
* Clear registers on exec
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
register struct pcb *pcb = &p->p_addr->u_pcb;
|
register struct pcb *pcb = &p->p_addr->u_pcb;
|
||||||
register struct trapframe *tf;
|
register struct trapframe *tf;
|
||||||
|
@ -1317,8 +1316,6 @@ setregs(p, pack, stack, retval)
|
||||||
tf->tf_eflags = PSL_USERSET;
|
tf->tf_eflags = PSL_USERSET;
|
||||||
tf->tf_esp = stack;
|
tf->tf_esp = stack;
|
||||||
tf->tf_ss = LSEL(LUDATA_SEL, SEL_UPL);
|
tf->tf_ss = LSEL(LUDATA_SEL, SEL_UPL);
|
||||||
|
|
||||||
retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.160 1997/09/10 03:43:48 scottr Exp $ */
|
/* $NetBSD: machdep.c,v 1.161 1997/09/11 23:02:05 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
|
* Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
|
||||||
|
@ -525,25 +525,22 @@ void via_shutdown __P((void));
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, sp, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long sp;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
frame = (struct frame *) p->p_md.md_regs;
|
|
||||||
frame->f_pc = pack->ep_entry & ~1;
|
frame->f_pc = pack->ep_entry & ~1;
|
||||||
frame->f_regs[SP] = sp;
|
frame->f_regs[SP] = stack;
|
||||||
frame->f_regs[A2] = (int) PS_STRINGS;
|
frame->f_regs[A2] = (int) PS_STRINGS;
|
||||||
|
|
||||||
/* restore a null state frame */
|
/* restore a null state frame */
|
||||||
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
||||||
|
|
||||||
if (fputype) {
|
if (fputype)
|
||||||
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int waittime = -1;
|
int waittime = -1;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: cpu_exec.c,v 1.13 1997/07/19 09:54:33 jonathan Exp $ */
|
/* $NetBSD: cpu_exec.c,v 1.14 1997/09/11 23:02:09 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
|
@ -135,15 +135,14 @@ cpu_exec_aout_makecmds(p, epp)
|
||||||
extern struct emul emul_ultrix;
|
extern struct emul emul_ultrix;
|
||||||
|
|
||||||
void
|
void
|
||||||
cpu_exec_ecoff_setregs(p, epp, stack, retval)
|
cpu_exec_ecoff_setregs(p, epp, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *epp;
|
struct exec_package *epp;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct ecoff_exechdr *execp = (struct ecoff_exechdr *)epp->ep_hdr;
|
struct ecoff_exechdr *execp = (struct ecoff_exechdr *)epp->ep_hdr;
|
||||||
|
|
||||||
setregs(p, epp, stack, retval);
|
setregs(p, epp, stack);
|
||||||
p->p_md.md_regs[GP] = execp->a.gp_value;
|
p->p_md.md_regs[GP] = execp->a.gp_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: mips_machdep.c,v 1.19 1997/08/09 19:06:45 jonathan Exp $ */
|
/* $NetBSD: mips_machdep.c,v 1.20 1997/09/11 23:02:10 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 1996 The Board of Trustees of The Leland Stanford
|
* Copyright 1996 The Board of Trustees of The Leland Stanford
|
||||||
|
@ -405,11 +405,10 @@ cpu_identify()
|
||||||
* code by the MIPS elf abi).
|
* code by the MIPS elf abi).
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
extern struct proc *fpcurproc;
|
extern struct proc *fpcurproc;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.21 1997/06/12 15:46:37 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.22 1997/09/11 23:02:12 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -510,11 +510,10 @@ allocsys(v)
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.10 1997/06/12 15:46:44 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.11 1997/09/11 23:02:17 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
|
@ -523,11 +523,10 @@ consinit()
|
||||||
* Set set up registers on exec.
|
* Set set up registers on exec.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tf = trapframe(p);
|
struct trapframe *tf = trapframe(p);
|
||||||
struct ps_strings arginfo;
|
struct ps_strings arginfo;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.66 1997/06/12 15:46:39 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.67 1997/09/11 23:02:14 mycroft Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1996 Matthias Pfaller.
|
* Copyright (c) 1996 Matthias Pfaller.
|
||||||
|
@ -865,11 +865,10 @@ err:
|
||||||
* Clear registers on exec
|
* Clear registers on exec
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct reg *r = p->p_md.md_regs;
|
struct reg *r = p->p_md.md_regs;
|
||||||
struct pcb *pcbp = &p->p_addr->u_pcb;
|
struct pcb *pcbp = &p->p_addr->u_pcb;
|
||||||
|
@ -886,8 +885,6 @@ setregs(p, pack, stack, retval)
|
||||||
|
|
||||||
pcbp->pcb_fsr = FPC_UEN;
|
pcbp->pcb_fsr = FPC_UEN;
|
||||||
bzero(pcbp->pcb_freg, sizeof(pcbp->pcb_freg));
|
bzero(pcbp->pcb_freg, sizeof(pcbp->pcb_freg));
|
||||||
|
|
||||||
retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.10 1997/06/12 15:46:44 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.11 1997/09/11 23:02:17 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
|
||||||
|
@ -523,11 +523,10 @@ consinit()
|
||||||
* Set set up registers on exec.
|
* Set set up registers on exec.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tf = trapframe(p);
|
struct trapframe *tf = trapframe(p);
|
||||||
struct ps_strings arginfo;
|
struct ps_strings arginfo;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.83 1997/07/29 10:04:44 fair Exp $ */
|
/* $NetBSD: machdep.c,v 1.84 1997/09/11 23:02:19 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1992, 1993
|
* Copyright (c) 1992, 1993
|
||||||
|
@ -374,11 +374,10 @@ allocsys(v)
|
||||||
*/
|
*/
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
register struct trapframe *tf = p->p_md.md_tf;
|
register struct trapframe *tf = p->p_md.md_tf;
|
||||||
register struct fpstate *fs;
|
register struct fpstate *fs;
|
||||||
|
@ -413,7 +412,6 @@ setregs(p, pack, stack, retval)
|
||||||
tf->tf_global[2] = tf->tf_global[7] = tf->tf_npc;
|
tf->tf_global[2] = tf->tf_global[7] = tf->tf_npc;
|
||||||
stack -= sizeof(struct rwindow);
|
stack -= sizeof(struct rwindow);
|
||||||
tf->tf_out[6] = stack;
|
tf->tf_out[6] = stack;
|
||||||
retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.96 1997/08/12 16:52:12 gwr Exp $ */
|
/* $NetBSD: machdep.c,v 1.97 1997/09/11 23:02:22 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995 Gordon W. Ross
|
* Copyright (c) 1994, 1995 Gordon W. Ross
|
||||||
|
@ -384,11 +384,10 @@ cpu_startup()
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
@ -398,9 +397,9 @@ setregs(p, pack, stack, retval)
|
||||||
|
|
||||||
/* restore a null state frame */
|
/* restore a null state frame */
|
||||||
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
||||||
if (fputype) {
|
if (fputype)
|
||||||
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
||||||
}
|
|
||||||
p->p_md.md_flags = 0;
|
p->p_md.md_flags = 0;
|
||||||
/* XXX - HPUX sigcode hack would go here... */
|
/* XXX - HPUX sigcode hack would go here... */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.18 1997/06/12 15:46:50 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.19 1997/09/11 23:02:24 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -387,11 +387,10 @@ cpu_startup()
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
@ -401,9 +400,9 @@ setregs(p, pack, stack, retval)
|
||||||
|
|
||||||
/* restore a null state frame */
|
/* restore a null state frame */
|
||||||
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
||||||
if (fputype) {
|
if (fputype)
|
||||||
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
||||||
}
|
|
||||||
p->p_md.md_flags = 0;
|
p->p_md.md_flags = 0;
|
||||||
/* XXX - HPUX sigcode hack would go here... */
|
/* XXX - HPUX sigcode hack would go here... */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.18 1997/06/12 15:46:50 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.19 1997/09/11 23:02:24 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -387,11 +387,10 @@ cpu_startup()
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
@ -401,9 +400,9 @@ setregs(p, pack, stack, retval)
|
||||||
|
|
||||||
/* restore a null state frame */
|
/* restore a null state frame */
|
||||||
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
p->p_addr->u_pcb.pcb_fpregs.fpf_null = 0;
|
||||||
if (fputype) {
|
if (fputype)
|
||||||
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
m68881_restore(&p->p_addr->u_pcb.pcb_fpregs);
|
||||||
}
|
|
||||||
p->p_md.md_flags = 0;
|
p->p_md.md_flags = 0;
|
||||||
/* XXX - HPUX sigcode hack would go here... */
|
/* XXX - HPUX sigcode hack would go here... */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: trap.c,v 1.28 1997/07/28 21:48:33 ragge Exp $ */
|
/* $NetBSD: trap.c,v 1.29 1997/09/11 23:02:26 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -374,18 +374,16 @@ if(p){
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t retval[2];
|
|
||||||
{
|
{
|
||||||
struct trapframe *exptr;
|
struct trapframe *exptr;
|
||||||
|
|
||||||
exptr = p->p_addr->u_pcb.framep;
|
exptr = p->p_addr->u_pcb.framep;
|
||||||
exptr->pc = pack->ep_entry + 2;
|
exptr->pc = pack->ep_entry + 2;
|
||||||
exptr->sp = stack;
|
exptr->sp = stack;
|
||||||
retval[0] = retval[1] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.13 1997/06/12 15:46:54 mrg Exp $ */
|
/* $NetBSD: machdep.c,v 1.14 1997/09/11 23:02:29 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 University of Utah.
|
* Copyright (c) 1988 University of Utah.
|
||||||
|
@ -390,11 +390,10 @@ again:
|
||||||
* but would break init; should be fixed soon.
|
* but would break init; should be fixed soon.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
setregs(p, pack, stack, retval)
|
setregs(p, pack, stack)
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
struct exec_package *pack;
|
struct exec_package *pack;
|
||||||
u_long stack;
|
u_long stack;
|
||||||
register_t *retval;
|
|
||||||
{
|
{
|
||||||
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
struct frame *frame = (struct frame *)p->p_md.md_regs;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: osf1_misc.c,v 1.11 1996/10/13 00:46:53 christos Exp $ */
|
/* $NetBSD: osf1_misc.c,v 1.12 1997/09/11 23:02:30 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||||
|
@ -56,7 +56,7 @@ extern int scdebug;
|
||||||
extern struct sysent osf1_sysent[];
|
extern struct sysent osf1_sysent[];
|
||||||
extern char *osf1_syscallnames[];
|
extern char *osf1_syscallnames[];
|
||||||
extern void cpu_exec_ecoff_setregs __P((struct proc *, struct exec_package *,
|
extern void cpu_exec_ecoff_setregs __P((struct proc *, struct exec_package *,
|
||||||
u_long, register_t *));
|
u_long));
|
||||||
|
|
||||||
extern char sigcode[], esigcode[];
|
extern char sigcode[], esigcode[];
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: init_main.c,v 1.101 1997/06/14 04:18:34 thorpej Exp $ */
|
/* $NetBSD: init_main.c,v 1.102 1997/09/11 23:02:33 mycroft Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Christopher G. Demetriou. All rights reserved.
|
* Copyright (c) 1995 Christopher G. Demetriou. All rights reserved.
|
||||||
|
@ -533,7 +533,8 @@ start_init(p)
|
||||||
* Now try to exec the program. If can't for any reason
|
* Now try to exec the program. If can't for any reason
|
||||||
* other than it doesn't exist, complain.
|
* other than it doesn't exist, complain.
|
||||||
*/
|
*/
|
||||||
if ((error = sys_execve(p, &args, retval)) == 0)
|
error = sys_execve(p, &args, retval);
|
||||||
|
if (error == 0 || error == EJUSTRETURN)
|
||||||
return;
|
return;
|
||||||
if (error != ENOENT)
|
if (error != ENOENT)
|
||||||
printf("exec %s: error %d\n", path, error);
|
printf("exec %s: error %d\n", path, error);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: kern_exec.c,v 1.84 1997/05/08 16:20:07 mycroft Exp $ */
|
/* $NetBSD: kern_exec.c,v 1.85 1997/09/11 23:02:32 mycroft Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (C) 1993, 1994, 1996 Christopher G. Demetriou
|
* Copyright (C) 1993, 1994, 1996 Christopher G. Demetriou
|
||||||
|
@ -472,7 +472,7 @@ sys_execve(p, v, retval)
|
||||||
vrele(pack.ep_vp);
|
vrele(pack.ep_vp);
|
||||||
|
|
||||||
/* setup new registers and do misc. setup. */
|
/* setup new registers and do misc. setup. */
|
||||||
(*pack.ep_emul->e_setregs)(p, &pack, (u_long) stack, retval);
|
(*pack.ep_emul->e_setregs)(p, &pack, (u_long) stack);
|
||||||
|
|
||||||
if (p->p_flag & P_TRACED)
|
if (p->p_flag & P_TRACED)
|
||||||
psignal(p, SIGTRAP);
|
psignal(p, SIGTRAP);
|
||||||
|
@ -484,7 +484,8 @@ sys_execve(p, v, retval)
|
||||||
if (KTRPOINT(p, KTR_EMUL))
|
if (KTRPOINT(p, KTR_EMUL))
|
||||||
ktremul(p->p_tracep, p->p_emul->e_name);
|
ktremul(p->p_tracep, p->p_emul->e_name);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
|
||||||
|
return (EJUSTRETURN);
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
/* free the vmspace-creation commands, and release their references */
|
/* free the vmspace-creation commands, and release their references */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: exec.h,v 1.64 1997/05/17 16:13:24 mycroft Exp $ */
|
/* $NetBSD: exec.h,v 1.65 1997/09/11 23:02:35 mycroft Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1994 Christopher G. Demetriou
|
* Copyright (c) 1994 Christopher G. Demetriou
|
||||||
|
@ -170,7 +170,7 @@ int vmcmd_map_zero __P((struct proc *, struct exec_vmcmd *));
|
||||||
void *copyargs __P((struct exec_package *, struct ps_strings *,
|
void *copyargs __P((struct exec_package *, struct ps_strings *,
|
||||||
void *, void *));
|
void *, void *));
|
||||||
void setregs __P((struct proc *, struct exec_package *,
|
void setregs __P((struct proc *, struct exec_package *,
|
||||||
u_long, register_t *));
|
u_long));
|
||||||
int check_exec __P((struct proc *, struct exec_package *));
|
int check_exec __P((struct proc *, struct exec_package *));
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: proc.h,v 1.50 1997/07/06 12:32:39 fvdl Exp $ */
|
/* $NetBSD: proc.h,v 1.51 1997/09/11 23:02:36 mycroft Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1986, 1989, 1991, 1993
|
* Copyright (c) 1986, 1989, 1991, 1993
|
||||||
|
@ -89,7 +89,7 @@ struct emul {
|
||||||
void *, void *));
|
void *, void *));
|
||||||
/* Set registers before execution */
|
/* Set registers before execution */
|
||||||
void (*e_setregs) __P((struct proc *, struct exec_package *,
|
void (*e_setregs) __P((struct proc *, struct exec_package *,
|
||||||
u_long, register_t *));
|
u_long));
|
||||||
char *e_sigcode; /* Start of sigcode */
|
char *e_sigcode; /* Start of sigcode */
|
||||||
char *e_esigcode; /* End of sigcode */
|
char *e_esigcode; /* End of sigcode */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue