update for new alpha_cpu.h definitions, -Wall cleanups, and make
things compile with the new work-in-progress pmap code.
This commit is contained in:
parent
192e4b94c0
commit
3e323f7a08
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: genassym.c,v 1.5 1996/07/09 00:53:51 cgd Exp $ */
|
/* $NetBSD: genassym.c,v 1.6 1996/07/11 03:53:23 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1982, 1990, 1993
|
* Copyright (c) 1982, 1990, 1993
|
||||||
|
@ -111,11 +111,11 @@ main(argc, argv)
|
||||||
def("FRAME_T12", FRAME_T12);
|
def("FRAME_T12", FRAME_T12);
|
||||||
def("FRAME_AT", FRAME_AT);
|
def("FRAME_AT", FRAME_AT);
|
||||||
def("FRAME_SP", FRAME_SP);
|
def("FRAME_SP", FRAME_SP);
|
||||||
off("TF_PS", struct trapframe, tf_ps);
|
off("TF_AF_PS", struct trapframe, tf_af.af_ps);
|
||||||
off("TF_PC", struct trapframe, tf_ps);
|
off("TF_AF_PC", struct trapframe, tf_af.af_pc);
|
||||||
off("TF_A0", struct trapframe, tf_a0);
|
off("TF_AF_A0", struct trapframe, tf_af.af_a0);
|
||||||
off("TF_A1", struct trapframe, tf_a1);
|
off("TF_AF_A1", struct trapframe, tf_af.af_a1);
|
||||||
off("TF_A2", struct trapframe, tf_a2);
|
off("TF_AF_A2", struct trapframe, tf_af.af_a2);
|
||||||
|
|
||||||
/* bits of the PS register */
|
/* bits of the PS register */
|
||||||
def("ALPHA_PSL_USERMODE", ALPHA_PSL_USERMODE);
|
def("ALPHA_PSL_USERMODE", ALPHA_PSL_USERMODE);
|
||||||
|
@ -140,14 +140,16 @@ main(argc, argv)
|
||||||
off("PH_LINK", struct prochd, ph_link);
|
off("PH_LINK", struct prochd, ph_link);
|
||||||
off("PH_RLINK", struct prochd, ph_rlink);
|
off("PH_RLINK", struct prochd, ph_rlink);
|
||||||
|
|
||||||
|
#ifdef OLD_PMAP
|
||||||
/* offsets needed by cpu_switch(), et al., to switch mappings. */
|
/* offsets needed by cpu_switch(), et al., to switch mappings. */
|
||||||
off("VM_PMAP_STPTE", struct vmspace, vm_pmap.pm_stpte);
|
off("VM_PMAP_STPTE", struct vmspace, vm_pmap.pm_stpte);
|
||||||
def("USTP_OFFSET", kvtol1pte(VM_MIN_ADDRESS) * sizeof(pt_entry_t));
|
def("USTP_OFFSET", kvtol1pte(VM_MIN_ADDRESS) * sizeof(pt_entry_t));
|
||||||
|
#endif /* OLD_PMAP */
|
||||||
|
|
||||||
/* Important offsets into the user struct & associated constants */
|
/* Important offsets into the user struct & associated constants */
|
||||||
def("UPAGES", UPAGES);
|
def("UPAGES", UPAGES);
|
||||||
off("U_PCB", struct user, u_pcb);
|
off("U_PCB", struct user, u_pcb);
|
||||||
off("U_PCB_KSP", struct user, u_pcb.pcb_ksp);
|
off("U_PCB_HW_KSP", struct user, u_pcb.pcb_hw.apcb_ksp);
|
||||||
off("U_PCB_CONTEXT", struct user, u_pcb.pcb_context[0]);
|
off("U_PCB_CONTEXT", struct user, u_pcb.pcb_context[0]);
|
||||||
off("U_PCB_ONFAULT", struct user, u_pcb.pcb_onfault);
|
off("U_PCB_ONFAULT", struct user, u_pcb.pcb_onfault);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: interrupt.c,v 1.6 1996/07/09 00:53:53 cgd Exp $ */
|
/* $NetBSD: interrupt.c,v 1.7 1996/07/11 03:53:25 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||||
|
@ -130,7 +130,7 @@ machine_check(framep, logoutp, vec)
|
||||||
|
|
||||||
if (!mc_expected)
|
if (!mc_expected)
|
||||||
panic("machine check: vec 0x%lx, pc = 0x%lx, ra = 0x%lx",
|
panic("machine check: vec 0x%lx, pc = 0x%lx, ra = 0x%lx",
|
||||||
vec, framep->tf_pc, framep->tf_regs[FRAME_RA]);
|
vec, framep->tf_af.af_pc, framep->tf_regs[FRAME_RA]);
|
||||||
|
|
||||||
mc_expected = 0;
|
mc_expected = 0;
|
||||||
mc_received = 1;
|
mc_received = 1;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: locore.s,v 1.16 1996/07/09 04:18:13 cgd Exp $ */
|
/* $NetBSD: locore.s,v 1.17 1996/07/11 03:53:26 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||||
|
@ -186,7 +186,7 @@ LEAF(rei, 1) /* XXX should be NESTED */
|
||||||
br pv, 1f
|
br pv, 1f
|
||||||
1: SETGP(pv)
|
1: SETGP(pv)
|
||||||
|
|
||||||
ldq s1, TF_PS(sp) /* get the saved PS */
|
ldq s1, TF_AF_PS(sp) /* get the saved PS */
|
||||||
and s1, ALPHA_PSL_IPL_MASK, t0 /* look at the saved IPL */
|
and s1, ALPHA_PSL_IPL_MASK, t0 /* look at the saved IPL */
|
||||||
bne t0, Lrestoreregs /* != 0: can't do AST or SIR */
|
bne t0, Lrestoreregs /* != 0: can't do AST or SIR */
|
||||||
|
|
||||||
|
@ -366,7 +366,7 @@ LEAF(XentIF, 1) /* XXX should be NESTED */
|
||||||
|
|
||||||
or s0, T_IFLT, a0 /* type = T_IFLT|type*/
|
or s0, T_IFLT, a0 /* type = T_IFLT|type*/
|
||||||
mov s0, a1 /* code = type */
|
mov s0, a1 /* code = type */
|
||||||
ldq a2, TF_PC(sp) /* v = frame's pc */
|
ldq a2, TF_AF_PC(sp) /* v = frame's pc */
|
||||||
mov sp, a3 /* frame */
|
mov sp, a3 /* frame */
|
||||||
CALL(trap)
|
CALL(trap)
|
||||||
|
|
||||||
|
@ -505,9 +505,9 @@ LEAF(XentSys, 0) /* XXX should be NESTED */
|
||||||
stq s4,(FRAME_S4*8)(sp)
|
stq s4,(FRAME_S4*8)(sp)
|
||||||
stq s5,(FRAME_S5*8)(sp)
|
stq s5,(FRAME_S5*8)(sp)
|
||||||
stq s6,(FRAME_S6*8)(sp)
|
stq s6,(FRAME_S6*8)(sp)
|
||||||
stq a0,TF_A0(sp)
|
stq a0,TF_AF_A0(sp)
|
||||||
stq a1,TF_A1(sp)
|
stq a1,TF_AF_A1(sp)
|
||||||
stq a2,TF_A2(sp)
|
stq a2,TF_AF_A2(sp)
|
||||||
stq a3,(FRAME_A3*8)(sp)
|
stq a3,(FRAME_A3*8)(sp)
|
||||||
stq a4,(FRAME_A4*8)(sp)
|
stq a4,(FRAME_A4*8)(sp)
|
||||||
stq a5,(FRAME_A5*8)(sp)
|
stq a5,(FRAME_A5*8)(sp)
|
||||||
|
@ -720,7 +720,7 @@ LEAF(restorefpstate, 1)
|
||||||
LEAF(savectx, 1)
|
LEAF(savectx, 1)
|
||||||
br pv, 1f
|
br pv, 1f
|
||||||
1: SETGP(pv)
|
1: SETGP(pv)
|
||||||
stq sp, U_PCB_KSP(a0) /* store sp */
|
stq sp, U_PCB_HW_KSP(a0) /* store sp */
|
||||||
stq s0, U_PCB_CONTEXT+(0 * 8)(a0) /* store s0 - s6 */
|
stq s0, U_PCB_CONTEXT+(0 * 8)(a0) /* store s0 - s6 */
|
||||||
stq s1, U_PCB_CONTEXT+(1 * 8)(a0)
|
stq s1, U_PCB_CONTEXT+(1 * 8)(a0)
|
||||||
stq s2, U_PCB_CONTEXT+(2 * 8)(a0)
|
stq s2, U_PCB_CONTEXT+(2 * 8)(a0)
|
||||||
|
@ -841,6 +841,7 @@ sw1:
|
||||||
ldq t5, P_MD_PCBPADDR(t4) /* t5 = p->p_md.md_pcbpaddr */
|
ldq t5, P_MD_PCBPADDR(t4) /* t5 = p->p_md.md_pcbpaddr */
|
||||||
stq t5, curpcb /* and store it in curpcb */
|
stq t5, curpcb /* and store it in curpcb */
|
||||||
|
|
||||||
|
#ifdef OLD_PMAP
|
||||||
/*
|
/*
|
||||||
* Do the context swap, and invalidate old TLB entries (XXX).
|
* Do the context swap, and invalidate old TLB entries (XXX).
|
||||||
* XXX should do the ASN thing, and therefore not have to invalidate.
|
* XXX should do the ASN thing, and therefore not have to invalidate.
|
||||||
|
@ -849,10 +850,13 @@ sw1:
|
||||||
ldq t2, VM_PMAP_STPTE(t2) /* = p_vmspace.vm_pmap.pm_ste */
|
ldq t2, VM_PMAP_STPTE(t2) /* = p_vmspace.vm_pmap.pm_ste */
|
||||||
ldq t3, Lev1map /* and store pte into Lev1map */
|
ldq t3, Lev1map /* and store pte into Lev1map */
|
||||||
stq t2, USTP_OFFSET(t3)
|
stq t2, USTP_OFFSET(t3)
|
||||||
|
#endif /* OLD_PMAP */
|
||||||
mov t5, a0 /* swap the context */
|
mov t5, a0 /* swap the context */
|
||||||
call_pal PAL_OSF1_swpctx
|
call_pal PAL_OSF1_swpctx
|
||||||
|
#ifdef OLD_PMAP
|
||||||
CONST(-1, a0) /* & invalidate old TLB ents */
|
CONST(-1, a0) /* & invalidate old TLB ents */
|
||||||
call_pal PAL_OSF1_tbi
|
call_pal PAL_OSF1_tbi
|
||||||
|
#endif /* OLD_PMAP */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now running on the new u struct.
|
* Now running on the new u struct.
|
||||||
|
@ -914,14 +918,18 @@ LEAF(switch_exit, 1)
|
||||||
* Do the context swap, and invalidate old TLB entries (XXX).
|
* Do the context swap, and invalidate old TLB entries (XXX).
|
||||||
* XXX should do the ASN thing, and therefore not have to invalidate.
|
* XXX should do the ASN thing, and therefore not have to invalidate.
|
||||||
*/
|
*/
|
||||||
|
#ifdef OLD_PMAP
|
||||||
ldq t2, P_VMSPACE(t4) /* t2 = p->p_vmspace */
|
ldq t2, P_VMSPACE(t4) /* t2 = p->p_vmspace */
|
||||||
ldq t2, VM_PMAP_STPTE(t2) /* = p_vmspace.vm_pmap.pm_ste */
|
ldq t2, VM_PMAP_STPTE(t2) /* = p_vmspace.vm_pmap.pm_ste */
|
||||||
ldq t3, Lev1map /* and store pte into Lev1map */
|
ldq t3, Lev1map /* and store pte into Lev1map */
|
||||||
stq t2, USTP_OFFSET(t3)
|
stq t2, USTP_OFFSET(t3)
|
||||||
|
#endif /* OLD_PMAP */
|
||||||
mov t5, a0 /* swap the context */
|
mov t5, a0 /* swap the context */
|
||||||
call_pal PAL_OSF1_swpctx
|
call_pal PAL_OSF1_swpctx
|
||||||
|
#ifdef OLD_PMAP
|
||||||
CONST(-1, a0) /* & invalidate old TLB ents */
|
CONST(-1, a0) /* & invalidate old TLB ents */
|
||||||
call_pal PAL_OSF1_tbi
|
call_pal PAL_OSF1_tbi
|
||||||
|
#endif /* OLD_PMAP */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now running as proc0, except for the value of 'curproc' and
|
* Now running as proc0, except for the value of 'curproc' and
|
||||||
|
@ -1623,3 +1631,23 @@ EXPORT(eintrcnt)
|
||||||
.text
|
.text
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Object:
|
||||||
|
* swpctxt EXPORTED function
|
||||||
|
*
|
||||||
|
* Change HW process context
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* pcb PHYSICAL struct pcb_hw *
|
||||||
|
* old_ksp VIRTUAL long *
|
||||||
|
*
|
||||||
|
* If old_ksp is non-zero it saves the current KSP in it.
|
||||||
|
* Execute the PAL call.
|
||||||
|
*/
|
||||||
|
LEAF(swpctxt,2)
|
||||||
|
beq a1,1f
|
||||||
|
stq sp,0(a1)
|
||||||
|
1: call_pal PAL_OSF1_swpctx
|
||||||
|
RET
|
||||||
|
END(swpctxt)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.32 1996/07/09 00:54:00 cgd Exp $ */
|
/* $NetBSD: machdep.c,v 1.33 1996/07/11 03:53:29 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||||
|
@ -92,7 +92,11 @@
|
||||||
#include <alpha/alpha/dec_21000.h>
|
#include <alpha/alpha/dec_21000.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <net/if.h>
|
||||||
#include <net/netisr.h>
|
#include <net/netisr.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/ip_var.h>
|
||||||
|
#include <netinet/if_arp.h>
|
||||||
#include "ether.h"
|
#include "ether.h"
|
||||||
|
|
||||||
#include "le_ioasic.h" /* for le_iomem creation */
|
#include "le_ioasic.h" /* for le_iomem creation */
|
||||||
|
@ -184,6 +188,8 @@ char boot_flags[64];
|
||||||
/* for cpu_sysctl() */
|
/* for cpu_sysctl() */
|
||||||
char root_device[17];
|
char root_device[17];
|
||||||
|
|
||||||
|
void identifycpu();
|
||||||
|
|
||||||
int
|
int
|
||||||
alpha_init(pfn, ptb)
|
alpha_init(pfn, ptb)
|
||||||
u_long pfn; /* first free PFN number */
|
u_long pfn; /* first free PFN number */
|
||||||
|
@ -253,13 +259,13 @@ alpha_init(pfn, ptb)
|
||||||
#define cnt mddtp->mddt_cluster_cnt
|
#define cnt mddtp->mddt_cluster_cnt
|
||||||
#define usage(n) mddtp->mddt_clusters[(n)].mddt_usage
|
#define usage(n) mddtp->mddt_clusters[(n)].mddt_usage
|
||||||
if (cnt != 2 && cnt != 3) {
|
if (cnt != 2 && cnt != 3) {
|
||||||
printf("WARNING: weird number (%d) of mem clusters\n", cnt);
|
printf("WARNING: weird number (%ld) of mem clusters\n", cnt);
|
||||||
mddtweird = 1;
|
mddtweird = 1;
|
||||||
} else if (usage(0) != MDDT_PALCODE ||
|
} else if (usage(0) != MDDT_PALCODE ||
|
||||||
usage(1) != MDDT_SYSTEM ||
|
usage(1) != MDDT_SYSTEM ||
|
||||||
(cnt == 3 && usage(2) != MDDT_PALCODE)) {
|
(cnt == 3 && usage(2) != MDDT_PALCODE)) {
|
||||||
mddtweird = 1;
|
mddtweird = 1;
|
||||||
printf("WARNING: %d mem clusters, but weird config\n", cnt);
|
printf("WARNING: %ld mem clusters, but weird config\n", cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < cnt; i++) {
|
for (i = 0; i < cnt; i++) {
|
||||||
|
@ -545,9 +551,9 @@ alpha_init(pfn, ptb)
|
||||||
* Set the kernel sp, reserving space for an (empty) trapframe,
|
* Set the kernel sp, reserving space for an (empty) trapframe,
|
||||||
* and make proc0's trapframe pointer point to it for sanity.
|
* and make proc0's trapframe pointer point to it for sanity.
|
||||||
*/
|
*/
|
||||||
proc0paddr->u_pcb.pcb_ksp =
|
proc0paddr->u_pcb.pcb_hw.apcb_ksp =
|
||||||
(u_int64_t)proc0paddr + USPACE - sizeof(struct trapframe);
|
(u_int64_t)proc0paddr + USPACE - sizeof(struct trapframe);
|
||||||
proc0.p_md.md_tf = (struct trapframe *)proc0paddr->u_pcb.pcb_ksp;
|
proc0.p_md.md_tf = (struct trapframe *)proc0paddr->u_pcb.pcb_hw.apcb_ksp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look at arguments passed to us and compute boothowto.
|
* Look at arguments passed to us and compute boothowto.
|
||||||
|
@ -615,11 +621,10 @@ void
|
||||||
cpu_startup()
|
cpu_startup()
|
||||||
{
|
{
|
||||||
register unsigned i;
|
register unsigned i;
|
||||||
register caddr_t v;
|
|
||||||
int base, residual;
|
int base, residual;
|
||||||
vm_offset_t minaddr, maxaddr;
|
vm_offset_t minaddr, maxaddr;
|
||||||
vm_size_t size;
|
vm_size_t size;
|
||||||
#ifdef DEBUG
|
#if defined(DEBUG) && defined(OLD_PMAP)
|
||||||
extern int pmapdebug;
|
extern int pmapdebug;
|
||||||
int opmapdebug = pmapdebug;
|
int opmapdebug = pmapdebug;
|
||||||
|
|
||||||
|
@ -699,7 +704,7 @@ cpu_startup()
|
||||||
callout[i-1].c_next = &callout[i];
|
callout[i-1].c_next = &callout[i];
|
||||||
callout[i-1].c_next = NULL;
|
callout[i-1].c_next = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#if defined(DEBUG) && defined(OLD_PMAP)
|
||||||
pmapdebug = opmapdebug;
|
pmapdebug = opmapdebug;
|
||||||
#endif
|
#endif
|
||||||
printf("avail mem = %ld\n", (long)ptoa(cnt.v_free_count));
|
printf("avail mem = %ld\n", (long)ptoa(cnt.v_free_count));
|
||||||
|
@ -717,15 +722,16 @@ cpu_startup()
|
||||||
configure();
|
configure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
identifycpu()
|
identifycpu()
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print out CPU identification information.
|
* print out CPU identification information.
|
||||||
*/
|
*/
|
||||||
printf("%s, %dMHz\n", cpu_model,
|
printf("%s, %ldMHz\n", cpu_model,
|
||||||
hwrpb->rpb_cc_freq / 1000000); /* XXX true for 21164? */
|
hwrpb->rpb_cc_freq / 1000000); /* XXX true for 21164? */
|
||||||
printf("%d byte page size, %d processor%s.\n",
|
printf("%ld byte page size, %d processor%s.\n",
|
||||||
hwrpb->rpb_page_size, ncpus, ncpus == 1 ? "" : "s");
|
hwrpb->rpb_page_size, ncpus, ncpus == 1 ? "" : "s");
|
||||||
#if 0
|
#if 0
|
||||||
/* this isn't defined for any systems that we run on? */
|
/* this isn't defined for any systems that we run on? */
|
||||||
|
@ -852,7 +858,7 @@ dumpsys()
|
||||||
if (dumpsize == 0)
|
if (dumpsize == 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
printf("\ndumping to dev %x, offset %d\n", dumpdev, dumplo);
|
printf("\ndumping to dev %x, offset %ld\n", dumpdev, dumplo);
|
||||||
|
|
||||||
printf("dump ");
|
printf("dump ");
|
||||||
switch ((*bdevsw[major(dumpdev)].d_dump)(dumpdev)) {
|
switch ((*bdevsw[major(dumpdev)].d_dump)(dumpdev)) {
|
||||||
|
@ -907,9 +913,9 @@ frametoreg(framep, regp)
|
||||||
regp->r_regs[R_S4] = framep->tf_regs[FRAME_S4];
|
regp->r_regs[R_S4] = framep->tf_regs[FRAME_S4];
|
||||||
regp->r_regs[R_S5] = framep->tf_regs[FRAME_S5];
|
regp->r_regs[R_S5] = framep->tf_regs[FRAME_S5];
|
||||||
regp->r_regs[R_S6] = framep->tf_regs[FRAME_S6];
|
regp->r_regs[R_S6] = framep->tf_regs[FRAME_S6];
|
||||||
regp->r_regs[R_A0] = framep->tf_a0;
|
regp->r_regs[R_A0] = framep->tf_af.af_a0;
|
||||||
regp->r_regs[R_A1] = framep->tf_a1;
|
regp->r_regs[R_A1] = framep->tf_af.af_a1;
|
||||||
regp->r_regs[R_A2] = framep->tf_a2;
|
regp->r_regs[R_A2] = framep->tf_af.af_a2;
|
||||||
regp->r_regs[R_A3] = framep->tf_regs[FRAME_A3];
|
regp->r_regs[R_A3] = framep->tf_regs[FRAME_A3];
|
||||||
regp->r_regs[R_A4] = framep->tf_regs[FRAME_A4];
|
regp->r_regs[R_A4] = framep->tf_regs[FRAME_A4];
|
||||||
regp->r_regs[R_A5] = framep->tf_regs[FRAME_A5];
|
regp->r_regs[R_A5] = framep->tf_regs[FRAME_A5];
|
||||||
|
@ -920,7 +926,7 @@ frametoreg(framep, regp)
|
||||||
regp->r_regs[R_RA] = framep->tf_regs[FRAME_RA];
|
regp->r_regs[R_RA] = framep->tf_regs[FRAME_RA];
|
||||||
regp->r_regs[R_T12] = framep->tf_regs[FRAME_T12];
|
regp->r_regs[R_T12] = framep->tf_regs[FRAME_T12];
|
||||||
regp->r_regs[R_AT] = framep->tf_regs[FRAME_AT];
|
regp->r_regs[R_AT] = framep->tf_regs[FRAME_AT];
|
||||||
regp->r_regs[R_GP] = framep->tf_gp;
|
regp->r_regs[R_GP] = framep->tf_af.af_gp;
|
||||||
regp->r_regs[R_SP] = framep->tf_regs[FRAME_SP];
|
regp->r_regs[R_SP] = framep->tf_regs[FRAME_SP];
|
||||||
regp->r_regs[R_ZERO] = 0;
|
regp->r_regs[R_ZERO] = 0;
|
||||||
}
|
}
|
||||||
|
@ -947,9 +953,9 @@ regtoframe(regp, framep)
|
||||||
framep->tf_regs[FRAME_S4] = regp->r_regs[R_S4];
|
framep->tf_regs[FRAME_S4] = regp->r_regs[R_S4];
|
||||||
framep->tf_regs[FRAME_S5] = regp->r_regs[R_S5];
|
framep->tf_regs[FRAME_S5] = regp->r_regs[R_S5];
|
||||||
framep->tf_regs[FRAME_S6] = regp->r_regs[R_S6];
|
framep->tf_regs[FRAME_S6] = regp->r_regs[R_S6];
|
||||||
framep->tf_a0 = regp->r_regs[R_A0];
|
framep->tf_af.af_a0 = regp->r_regs[R_A0];
|
||||||
framep->tf_a1 = regp->r_regs[R_A1];
|
framep->tf_af.af_a1 = regp->r_regs[R_A1];
|
||||||
framep->tf_a2 = regp->r_regs[R_A2];
|
framep->tf_af.af_a2 = regp->r_regs[R_A2];
|
||||||
framep->tf_regs[FRAME_A3] = regp->r_regs[R_A3];
|
framep->tf_regs[FRAME_A3] = regp->r_regs[R_A3];
|
||||||
framep->tf_regs[FRAME_A4] = regp->r_regs[R_A4];
|
framep->tf_regs[FRAME_A4] = regp->r_regs[R_A4];
|
||||||
framep->tf_regs[FRAME_A5] = regp->r_regs[R_A5];
|
framep->tf_regs[FRAME_A5] = regp->r_regs[R_A5];
|
||||||
|
@ -960,7 +966,7 @@ regtoframe(regp, framep)
|
||||||
framep->tf_regs[FRAME_RA] = regp->r_regs[R_RA];
|
framep->tf_regs[FRAME_RA] = regp->r_regs[R_RA];
|
||||||
framep->tf_regs[FRAME_T12] = regp->r_regs[R_T12];
|
framep->tf_regs[FRAME_T12] = regp->r_regs[R_T12];
|
||||||
framep->tf_regs[FRAME_AT] = regp->r_regs[R_AT];
|
framep->tf_regs[FRAME_AT] = regp->r_regs[R_AT];
|
||||||
framep->tf_gp = regp->r_regs[R_GP];
|
framep->tf_af.af_gp = regp->r_regs[R_GP];
|
||||||
framep->tf_regs[FRAME_SP] = regp->r_regs[R_SP];
|
framep->tf_regs[FRAME_SP] = regp->r_regs[R_SP];
|
||||||
/* ??? = regp->r_regs[R_ZERO]; */
|
/* ??? = regp->r_regs[R_ZERO]; */
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1040,7 @@ sendsig(catcher, sig, mask, code)
|
||||||
(void)grow(p, (u_long)scp);
|
(void)grow(p, (u_long)scp);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
|
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
|
||||||
printf("sendsig(%d): sig %d ssp %lx usp %lx\n", p->p_pid,
|
printf("sendsig(%d): sig %d ssp %p usp %p\n", p->p_pid,
|
||||||
sig, &oonstack, scp);
|
sig, &oonstack, scp);
|
||||||
#endif
|
#endif
|
||||||
if (useracc((caddr_t)scp, fsize, B_WRITE) == 0) {
|
if (useracc((caddr_t)scp, fsize, B_WRITE) == 0) {
|
||||||
|
@ -1061,8 +1067,8 @@ sendsig(catcher, sig, mask, code)
|
||||||
*/
|
*/
|
||||||
ksc.sc_onstack = oonstack;
|
ksc.sc_onstack = oonstack;
|
||||||
ksc.sc_mask = mask;
|
ksc.sc_mask = mask;
|
||||||
ksc.sc_pc = frame->tf_pc;
|
ksc.sc_pc = frame->tf_af.af_pc;
|
||||||
ksc.sc_ps = frame->tf_ps;
|
ksc.sc_ps = frame->tf_af.af_ps;
|
||||||
|
|
||||||
/* copy the registers. */
|
/* copy the registers. */
|
||||||
frametoreg(frame, (struct reg *)ksc.sc_regs);
|
frametoreg(frame, (struct reg *)ksc.sc_regs);
|
||||||
|
@ -1095,24 +1101,24 @@ sendsig(catcher, sig, mask, code)
|
||||||
(void) copyout((caddr_t)&ksc, (caddr_t)scp, fsize);
|
(void) copyout((caddr_t)&ksc, (caddr_t)scp, fsize);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (sigdebug & SDB_FOLLOW)
|
if (sigdebug & SDB_FOLLOW)
|
||||||
printf("sendsig(%d): sig %d scp %lx code %lx\n", p->p_pid, sig,
|
printf("sendsig(%d): sig %d scp %p code %lx\n", p->p_pid, sig,
|
||||||
scp, code);
|
scp, code);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set up the registers to return to sigcode.
|
* Set up the registers to return to sigcode.
|
||||||
*/
|
*/
|
||||||
frame->tf_pc = (u_int64_t)PS_STRINGS - (esigcode - sigcode);
|
frame->tf_af.af_pc = (u_int64_t)PS_STRINGS - (esigcode - sigcode);
|
||||||
frame->tf_regs[FRAME_SP] = (u_int64_t)scp;
|
frame->tf_regs[FRAME_SP] = (u_int64_t)scp;
|
||||||
frame->tf_a0 = sig;
|
frame->tf_af.af_a0 = sig;
|
||||||
frame->tf_a1 = code;
|
frame->tf_af.af_a1 = code;
|
||||||
frame->tf_a2 = (u_int64_t)scp;
|
frame->tf_af.af_a2 = (u_int64_t)scp;
|
||||||
frame->tf_regs[FRAME_T12] = (u_int64_t)catcher; /* t12 is pv */
|
frame->tf_regs[FRAME_T12] = (u_int64_t)catcher; /* t12 is pv */
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (sigdebug & SDB_FOLLOW)
|
if (sigdebug & SDB_FOLLOW)
|
||||||
printf("sendsig(%d): pc %lx, catcher %lx\n", p->p_pid,
|
printf("sendsig(%d): pc %lx, catcher %lx\n", p->p_pid,
|
||||||
frame->tf_pc, frame->tf_regs[FRAME_A3]);
|
frame->tf_af.af_pc, frame->tf_regs[FRAME_A3]);
|
||||||
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
|
if ((sigdebug & SDB_KSTACK) && p->p_pid == sigpid)
|
||||||
printf("sendsig(%d): sig %d returns\n",
|
printf("sendsig(%d): sig %d returns\n",
|
||||||
p->p_pid, sig);
|
p->p_pid, sig);
|
||||||
|
@ -1145,7 +1151,7 @@ sys_sigreturn(p, v, retval)
|
||||||
scp = SCARG(uap, sigcntxp);
|
scp = SCARG(uap, sigcntxp);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (sigdebug & SDB_FOLLOW)
|
if (sigdebug & SDB_FOLLOW)
|
||||||
printf("sigreturn: pid %d, scp %lx\n", p->p_pid, scp);
|
printf("sigreturn: pid %d, scp %p\n", p->p_pid, scp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ALIGN(scp) != (u_int64_t)scp)
|
if (ALIGN(scp) != (u_int64_t)scp)
|
||||||
|
@ -1170,8 +1176,8 @@ sys_sigreturn(p, v, retval)
|
||||||
p->p_sigacts->ps_sigstk.ss_flags &= ~SS_ONSTACK;
|
p->p_sigacts->ps_sigstk.ss_flags &= ~SS_ONSTACK;
|
||||||
p->p_sigmask = ksc.sc_mask &~ sigcantmask;
|
p->p_sigmask = ksc.sc_mask &~ sigcantmask;
|
||||||
|
|
||||||
p->p_md.md_tf->tf_pc = ksc.sc_pc;
|
p->p_md.md_tf->tf_af.af_pc = ksc.sc_pc;
|
||||||
p->p_md.md_tf->tf_ps =
|
p->p_md.md_tf->tf_af.af_ps =
|
||||||
(ksc.sc_ps | ALPHA_PSL_USERSET) & ~ALPHA_PSL_USERCLR;
|
(ksc.sc_ps | ALPHA_PSL_USERSET) & ~ALPHA_PSL_USERCLR;
|
||||||
|
|
||||||
regtoframe((struct reg *)ksc.sc_regs, p->p_md.md_tf);
|
regtoframe((struct reg *)ksc.sc_regs, p->p_md.md_tf);
|
||||||
|
@ -1193,6 +1199,7 @@ sys_sigreturn(p, v, retval)
|
||||||
/*
|
/*
|
||||||
* machine dependent system variables.
|
* machine dependent system variables.
|
||||||
*/
|
*/
|
||||||
|
int
|
||||||
cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
|
cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
|
||||||
int *name;
|
int *name;
|
||||||
u_int namelen;
|
u_int namelen;
|
||||||
|
@ -1243,25 +1250,25 @@ setregs(p, pack, stack, retval)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
for (i = 0; i < FRAME_NSAVEREGS; i++)
|
for (i = 0; i < FRAME_NSAVEREGS; i++)
|
||||||
tfp->tf_regs[i] = 0xbabefacedeadbeef;
|
tfp->tf_regs[i] = 0xbabefacedeadbeef;
|
||||||
tfp->tf_gp = 0xbabefacedeadbeef;
|
tfp->tf_af.af_gp = 0xbabefacedeadbeef;
|
||||||
tfp->tf_a0 = 0xbabefacedeadbeef;
|
tfp->tf_af.af_a0 = 0xbabefacedeadbeef;
|
||||||
tfp->tf_a1 = 0xbabefacedeadbeef;
|
tfp->tf_af.af_a1 = 0xbabefacedeadbeef;
|
||||||
tfp->tf_a2 = 0xbabefacedeadbeef;
|
tfp->tf_af.af_a2 = 0xbabefacedeadbeef;
|
||||||
#else
|
#else
|
||||||
bzero(tfp->tf_regs, FRAME_NSAVEREGS * sizeof tfp->tf_regs[0]);
|
bzero(tfp->tf_regs, FRAME_NSAVEREGS * sizeof tfp->tf_regs[0]);
|
||||||
tfp->tf_gp = 0;
|
tfp->tf_af.af_gp = 0;
|
||||||
tfp->tf_a0 = 0;
|
tfp->tf_af.af_a0 = 0;
|
||||||
tfp->tf_a1 = 0;
|
tfp->tf_af.af_a1 = 0;
|
||||||
tfp->tf_a2 = 0;
|
tfp->tf_af.af_a2 = 0;
|
||||||
#endif
|
#endif
|
||||||
bzero(&p->p_addr->u_pcb.pcb_fp, sizeof p->p_addr->u_pcb.pcb_fp);
|
bzero(&p->p_addr->u_pcb.pcb_fp, sizeof p->p_addr->u_pcb.pcb_fp);
|
||||||
#define FP_RN 2 /* XXX */
|
#define FP_RN 2 /* XXX */
|
||||||
p->p_addr->u_pcb.pcb_fp.fpr_cr = (long)FP_RN << 58;
|
p->p_addr->u_pcb.pcb_fp.fpr_cr = (long)FP_RN << 58;
|
||||||
tfp->tf_regs[FRAME_SP] = stack; /* restored to usp in trap return */
|
tfp->tf_regs[FRAME_SP] = stack; /* restored to usp in trap return */
|
||||||
tfp->tf_ps = ALPHA_PSL_USERSET;
|
tfp->tf_af.af_ps = ALPHA_PSL_USERSET;
|
||||||
tfp->tf_pc = pack->ep_entry & ~3;
|
tfp->tf_af.af_pc = pack->ep_entry & ~3;
|
||||||
|
|
||||||
p->p_md.md_flags & ~MDP_FPUSED;
|
p->p_md.md_flags &= ~MDP_FPUSED;
|
||||||
if (fpcurproc == p)
|
if (fpcurproc == p)
|
||||||
fpcurproc = NULL;
|
fpcurproc = NULL;
|
||||||
|
|
||||||
|
@ -1448,7 +1455,7 @@ cpu_exec_ecoff_setregs(p, epp, stack, 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, retval);
|
||||||
p->p_md.md_tf->tf_gp = execp->a.gp_value;
|
p->p_md.md_tf->tf_af.af_gp = execp->a.gp_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1486,24 +1493,3 @@ cpu_exec_ecoff_hook(p, epp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
vm_offset_t
|
|
||||||
vtophys(vaddr)
|
|
||||||
vm_offset_t vaddr;
|
|
||||||
{
|
|
||||||
vm_offset_t paddr;
|
|
||||||
|
|
||||||
if (vaddr < ALPHA_K0SEG_BASE) {
|
|
||||||
printf("vtophys: invalid vaddr 0x%lx", vaddr);
|
|
||||||
paddr = vaddr;
|
|
||||||
} else if (vaddr <= ALPHA_K0SEG_END)
|
|
||||||
paddr = ALPHA_K0SEG_TO_PHYS(vaddr);
|
|
||||||
else
|
|
||||||
paddr = vatopa(vaddr);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
printf("vtophys(0x%lx) -> %lx\n", vaddr, paddr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return (paddr);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: process_machdep.c,v 1.4 1996/07/09 00:54:10 cgd Exp $ */
|
/* $NetBSD: process_machdep.c,v 1.5 1996/07/11 03:53:31 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Christopher G. Demetriou
|
* Copyright (c) 1994 Christopher G. Demetriou
|
||||||
|
@ -72,7 +72,7 @@ process_read_regs(p, regs)
|
||||||
{
|
{
|
||||||
|
|
||||||
frametoreg(process_frame(p), regs);
|
frametoreg(process_frame(p), regs);
|
||||||
regs->r_regs[R_ZERO] = process_frame(p)->tf_pc;
|
regs->r_regs[R_ZERO] = process_frame(p)->tf_af.af_pc;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ process_write_regs(p, regs)
|
||||||
struct reg *regs;
|
struct reg *regs;
|
||||||
{
|
{
|
||||||
|
|
||||||
process_frame(p)->tf_pc = regs->r_regs[R_ZERO];
|
process_frame(p)->tf_af.af_pc = regs->r_regs[R_ZERO];
|
||||||
regtoframe(regs, process_frame(p));
|
regtoframe(regs, process_frame(p));
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ process_set_pc(p, addr)
|
||||||
{
|
{
|
||||||
struct trapframe *frame = process_frame(p);
|
struct trapframe *frame = process_frame(p);
|
||||||
|
|
||||||
frame->tf_pc = (u_int64_t)addr;
|
frame->tf_af.af_pc = (u_int64_t)addr;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: trap.c,v 1.6 1996/07/09 00:54:15 cgd Exp $ */
|
/* $NetBSD: trap.c,v 1.7 1996/07/11 03:53:33 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
|
||||||
|
@ -113,7 +113,7 @@ trap(type, code, v, framep)
|
||||||
cnt.v_trap++;
|
cnt.v_trap++;
|
||||||
p = curproc;
|
p = curproc;
|
||||||
ucode = 0;
|
ucode = 0;
|
||||||
if ((framep->tf_ps & ALPHA_PSL_USERMODE) != 0) {
|
if ((framep->tf_af.af_ps & ALPHA_PSL_USERMODE) != 0) {
|
||||||
type |= T_USER;
|
type |= T_USER;
|
||||||
sticks = p->p_sticks;
|
sticks = p->p_sticks;
|
||||||
p->p_md.md_tf = framep;
|
p->p_md.md_tf = framep;
|
||||||
|
@ -130,7 +130,7 @@ trap(type, code, v, framep)
|
||||||
dopanic:
|
dopanic:
|
||||||
printf("trap type %ld, code = 0x%lx, v = 0x%lx\n", type,
|
printf("trap type %ld, code = 0x%lx, v = 0x%lx\n", type,
|
||||||
code, v);
|
code, v);
|
||||||
printf("pc = 0x%lx\n", framep->tf_pc);
|
printf("pc = 0x%lx\n", framep->tf_af.af_pc);
|
||||||
printf("curproc = 0x%lx\n", curproc);
|
printf("curproc = 0x%lx\n", curproc);
|
||||||
if (curproc != NULL)
|
if (curproc != NULL)
|
||||||
printf("curproc->p_pid = 0x%d\n", curproc->p_pid);
|
printf("curproc->p_pid = 0x%d\n", curproc->p_pid);
|
||||||
|
@ -164,7 +164,7 @@ dopanic:
|
||||||
if (p == NULL || p->p_addr->u_pcb.pcb_onfault == NULL)
|
if (p == NULL || p->p_addr->u_pcb.pcb_onfault == NULL)
|
||||||
goto dopanic;
|
goto dopanic;
|
||||||
else {
|
else {
|
||||||
framep->tf_pc = (u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
framep->tf_af.af_pc = (u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
||||||
p->p_addr->u_pcb.pcb_onfault = NULL;
|
p->p_addr->u_pcb.pcb_onfault = NULL;
|
||||||
}
|
}
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -198,7 +198,7 @@ sigfpe: i = SIGFPE;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
case T_GENTRAP|T_USER:
|
case T_GENTRAP|T_USER:
|
||||||
if (framep->tf_a0 == -2) /* weird! */
|
if (framep->tf_af.af_a0 == -2) /* weird! */
|
||||||
goto sigfpe;
|
goto sigfpe;
|
||||||
case T_BPT|T_USER:
|
case T_BPT|T_USER:
|
||||||
case T_BUGCHK|T_USER:
|
case T_BUGCHK|T_USER:
|
||||||
|
@ -227,7 +227,7 @@ sigfpe: i = SIGFPE;
|
||||||
/* if it was caused by fuswintr or suswintr, just punt. */
|
/* if it was caused by fuswintr or suswintr, just punt. */
|
||||||
if ((type & T_USER) == 0 && p != NULL &&
|
if ((type & T_USER) == 0 && p != NULL &&
|
||||||
p->p_addr->u_pcb.pcb_onfault == (caddr_t)fswintrberr) {
|
p->p_addr->u_pcb.pcb_onfault == (caddr_t)fswintrberr) {
|
||||||
framep->tf_pc = (u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
framep->tf_af.af_pc = (u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
||||||
p->p_addr->u_pcb.pcb_onfault = NULL;
|
p->p_addr->u_pcb.pcb_onfault = NULL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ sigfpe: i = SIGFPE;
|
||||||
#ifdef VMFAULT_TRACE
|
#ifdef VMFAULT_TRACE
|
||||||
printf("vm_fault(0x%lx (pmap 0x%lx), 0x%lx (0x%lx), 0x%lx, %d) -> 0x%lx at pc 0x%lx\n",
|
printf("vm_fault(0x%lx (pmap 0x%lx), 0x%lx (0x%lx), 0x%lx, %d) -> 0x%lx at pc 0x%lx\n",
|
||||||
map, map == kernel_map ? pmap_kernel() : &vm->vm_pmap,
|
map, map == kernel_map ? pmap_kernel() : &vm->vm_pmap,
|
||||||
va, v, ftype, FALSE, rv, framep->tf_pc);
|
va, v, ftype, FALSE, rv, framep->tf_af.af_pc);
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* If this was a stack access we keep track of the maximum
|
* If this was a stack access we keep track of the maximum
|
||||||
|
@ -284,10 +284,10 @@ sigfpe: i = SIGFPE;
|
||||||
}
|
}
|
||||||
if (rv == KERN_SUCCESS)
|
if (rv == KERN_SUCCESS)
|
||||||
goto out;
|
goto out;
|
||||||
if ((framep->tf_ps & ALPHA_PSL_USERMODE) == 0) {
|
if ((framep->tf_af.af_ps & ALPHA_PSL_USERMODE) == 0) {
|
||||||
if (p != NULL &&
|
if (p != NULL &&
|
||||||
p->p_addr->u_pcb.pcb_onfault != NULL) {
|
p->p_addr->u_pcb.pcb_onfault != NULL) {
|
||||||
framep->tf_pc =
|
framep->tf_af.af_pc =
|
||||||
(u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
(u_int64_t)p->p_addr->u_pcb.pcb_onfault;
|
||||||
p->p_addr->u_pcb.pcb_onfault = NULL;
|
p->p_addr->u_pcb.pcb_onfault = NULL;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -316,7 +316,7 @@ sigfpe: i = SIGFPE;
|
||||||
out:
|
out:
|
||||||
if ((type & T_USER) == 0)
|
if ((type & T_USER) == 0)
|
||||||
return;
|
return;
|
||||||
userret(p, framep->tf_pc, sticks);
|
userret(p, framep->tf_af.af_pc, sticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -350,13 +350,13 @@ syscall(code, framep)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if notdef /* can't happen, ever. */
|
#if notdef /* can't happen, ever. */
|
||||||
if ((framep->tf_ps & ALPHA_PSL_USERMODE) == 0) {
|
if ((framep->tf_af.af_ps & ALPHA_PSL_USERMODE) == 0) {
|
||||||
panic("syscall");
|
panic("syscall");
|
||||||
#endif
|
#endif
|
||||||
cnt.v_syscall++;
|
cnt.v_syscall++;
|
||||||
p = curproc;
|
p = curproc;
|
||||||
p->p_md.md_tf = framep;
|
p->p_md.md_tf = framep;
|
||||||
opc = framep->tf_pc - 4;
|
opc = framep->tf_af.af_pc - 4;
|
||||||
sticks = p->p_sticks;
|
sticks = p->p_sticks;
|
||||||
|
|
||||||
callp = p->p_emul->e_sysent;
|
callp = p->p_emul->e_sysent;
|
||||||
|
@ -368,7 +368,7 @@ syscall(code, framep)
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case OSF1_SYS_syscall:
|
case OSF1_SYS_syscall:
|
||||||
/* OSF/1 syscall() */
|
/* OSF/1 syscall() */
|
||||||
code = framep->tf_a0;
|
code = framep->tf_af.af_a0;
|
||||||
hidden = 1;
|
hidden = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -383,7 +383,7 @@ syscall(code, framep)
|
||||||
* syscall() and __syscall() are handled the same on
|
* syscall() and __syscall() are handled the same on
|
||||||
* the alpha, as everything is 64-bit aligned, anyway.
|
* the alpha, as everything is 64-bit aligned, anyway.
|
||||||
*/
|
*/
|
||||||
code = framep->tf_a0;
|
code = framep->tf_af.af_a0;
|
||||||
hidden = 1;
|
hidden = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -410,11 +410,11 @@ syscall(code, framep)
|
||||||
case 4:
|
case 4:
|
||||||
args[3] = framep->tf_regs[FRAME_A3];
|
args[3] = framep->tf_regs[FRAME_A3];
|
||||||
case 3:
|
case 3:
|
||||||
args[2] = framep->tf_a2;
|
args[2] = framep->tf_af.af_a2;
|
||||||
case 2:
|
case 2:
|
||||||
args[1] = framep->tf_a1;
|
args[1] = framep->tf_af.af_a1;
|
||||||
case 1:
|
case 1:
|
||||||
args[0] = framep->tf_a0;
|
args[0] = framep->tf_af.af_a0;
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -438,7 +438,7 @@ syscall(code, framep)
|
||||||
framep->tf_regs[FRAME_A3] = 0;
|
framep->tf_regs[FRAME_A3] = 0;
|
||||||
break;
|
break;
|
||||||
case ERESTART:
|
case ERESTART:
|
||||||
framep->tf_pc = opc;
|
framep->tf_af.af_pc = opc;
|
||||||
break;
|
break;
|
||||||
case EJUSTRETURN:
|
case EJUSTRETURN:
|
||||||
break;
|
break;
|
||||||
|
@ -457,7 +457,7 @@ syscall(code, framep)
|
||||||
scdebug_ret(p, code, error, rval);
|
scdebug_ret(p, code, error, rval);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
userret(p, framep->tf_pc, sticks);
|
userret(p, framep->tf_af.af_pc, sticks);
|
||||||
#ifdef KTRACE
|
#ifdef KTRACE
|
||||||
if (KTRPOINT(p, KTR_SYSRET))
|
if (KTRPOINT(p, KTR_SYSRET))
|
||||||
ktrsysret(p->p_tracep, code, error, rval[0]);
|
ktrsysret(p->p_tracep, code, error, rval[0]);
|
||||||
|
@ -476,7 +476,7 @@ child_return(p)
|
||||||
* Return values in the frame set by cpu_fork().
|
* Return values in the frame set by cpu_fork().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
userret(p, p->p_md.md_tf->tf_pc, 0);
|
userret(p, p->p_md.md_tf->tf_af.af_pc, 0);
|
||||||
#ifdef KTRACE
|
#ifdef KTRACE
|
||||||
if (KTRPOINT(p, KTR_SYSRET))
|
if (KTRPOINT(p, KTR_SYSRET))
|
||||||
ktrsysret(p->p_tracep, SYS_fork, 0, 0);
|
ktrsysret(p->p_tracep, SYS_fork, 0, 0);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vm_machdep.c,v 1.10 1996/07/09 00:54:17 cgd Exp $ */
|
/* $NetBSD: vm_machdep.c,v 1.11 1996/07/11 03:53:34 cgd Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||||
|
@ -147,9 +147,13 @@ cpu_fork(p1, p2)
|
||||||
* Cache the physical address of the pcb, so we can
|
* Cache the physical address of the pcb, so we can
|
||||||
* swap to it easily.
|
* swap to it easily.
|
||||||
*/
|
*/
|
||||||
|
#ifdef OLD_PMAP
|
||||||
ptep = kvtopte(up);
|
ptep = kvtopte(up);
|
||||||
p2->p_md.md_pcbpaddr =
|
p2->p_md.md_pcbpaddr =
|
||||||
&((struct user *)(PG_PFNUM(*ptep) << PGSHIFT))->u_pcb;
|
&((struct user *)(PG_PFNUM(*ptep) << PGSHIFT))->u_pcb;
|
||||||
|
#else
|
||||||
|
p2->p_md.md_pcbpaddr = (void *)vtophys((vm_offset_t)&up->u_pcb);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simulate a write to the process's U-area pages,
|
* Simulate a write to the process's U-area pages,
|
||||||
|
@ -177,7 +181,9 @@ cpu_fork(p1, p2)
|
||||||
* part of the stack. The stack and pcb need to agree;
|
* part of the stack. The stack and pcb need to agree;
|
||||||
*/
|
*/
|
||||||
p2->p_addr->u_pcb = p1->p_addr->u_pcb;
|
p2->p_addr->u_pcb = p1->p_addr->u_pcb;
|
||||||
|
#ifdef OLD_PMAP
|
||||||
PMAP_ACTIVATE(&p2->p_vmspace->vm_pmap, 0);
|
PMAP_ACTIVATE(&p2->p_vmspace->vm_pmap, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Arrange for a non-local goto when the new process
|
* Arrange for a non-local goto when the new process
|
||||||
|
@ -186,7 +192,7 @@ cpu_fork(p1, p2)
|
||||||
#ifdef DIAGNOSTIC
|
#ifdef DIAGNOSTIC
|
||||||
if (p1 != curproc)
|
if (p1 != curproc)
|
||||||
panic("cpu_fork: curproc");
|
panic("cpu_fork: curproc");
|
||||||
if (up->u_pcb.pcb_fen != 0)
|
if ((up->u_pcb.pcb_hw.apcb_flags & ALPHA_PCB_FLAGS_FEN) != 0)
|
||||||
printf("DANGER WILL ROBINSON: FEN SET IN cpu_fork!\n");
|
printf("DANGER WILL ROBINSON: FEN SET IN cpu_fork!\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -221,7 +227,7 @@ cpu_fork(p1, p2)
|
||||||
*
|
*
|
||||||
* This is an inlined version of cpu_set_kpc.
|
* This is an inlined version of cpu_set_kpc.
|
||||||
*/
|
*/
|
||||||
up->u_pcb.pcb_ksp = (u_int64_t)p2tf;
|
up->u_pcb.pcb_hw.apcb_ksp = (u_int64_t)p2tf;
|
||||||
up->u_pcb.pcb_context[0] =
|
up->u_pcb.pcb_context[0] =
|
||||||
(u_int64_t)child_return; /* s0: pc */
|
(u_int64_t)child_return; /* s0: pc */
|
||||||
up->u_pcb.pcb_context[1] =
|
up->u_pcb.pcb_context[1] =
|
||||||
|
@ -276,9 +282,13 @@ cpu_swapin(p)
|
||||||
* Cache the physical address of the pcb, so we can swap to
|
* Cache the physical address of the pcb, so we can swap to
|
||||||
* it easily.
|
* it easily.
|
||||||
*/
|
*/
|
||||||
|
#ifdef OLD_PMAP
|
||||||
ptep = kvtopte(up);
|
ptep = kvtopte(up);
|
||||||
p->p_md.md_pcbpaddr =
|
p->p_md.md_pcbpaddr =
|
||||||
&((struct user *)(PG_PFNUM(*ptep) << PGSHIFT))->u_pcb;
|
&((struct user *)(PG_PFNUM(*ptep) << PGSHIFT))->u_pcb;
|
||||||
|
#else
|
||||||
|
p->p_md.md_pcbpaddr = (void *)vtophys((vm_offset_t)&up->u_pcb);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simulate a write to the process's U-area pages,
|
* Simulate a write to the process's U-area pages,
|
||||||
|
@ -328,8 +338,13 @@ pagemove(from, to, size)
|
||||||
|
|
||||||
if (size % CLBYTES)
|
if (size % CLBYTES)
|
||||||
panic("pagemove");
|
panic("pagemove");
|
||||||
|
#ifdef OLD_PMAP
|
||||||
fpte = kvtopte(from);
|
fpte = kvtopte(from);
|
||||||
tpte = kvtopte(to);
|
tpte = kvtopte(to);
|
||||||
|
#else
|
||||||
|
fpte = pmap_pte(kernel_pmap, (vm_offset_t)from);
|
||||||
|
tpte = pmap_pte(kernel_pmap, (vm_offset_t)to);
|
||||||
|
#endif
|
||||||
todo = size; /* if testing > 0, need sign... */
|
todo = size; /* if testing > 0, need sign... */
|
||||||
while (todo > 0) {
|
while (todo > 0) {
|
||||||
TBIS((vm_offset_t)from);
|
TBIS((vm_offset_t)from);
|
||||||
|
|
Loading…
Reference in New Issue