Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/powerpc/powerpc Dump fp regs into core file.
details: https://anonhg.NetBSD.org/src/rev/9b85ef2ea134
branches: trunk
changeset: 487213:9b85ef2ea134
user: tsubai <tsubai%NetBSD.org@localhost>
date: Sun Jun 04 12:12:13 2000 +0000
description:
Dump fp regs into core file.
diffstat:
sys/arch/powerpc/powerpc/vm_machdep.c | 35 +++++++++++++++++++++--------------
1 files changed, 21 insertions(+), 14 deletions(-)
diffs (132 lines):
diff -r 6f153b0c0f9a -r 9b85ef2ea134 sys/arch/powerpc/powerpc/vm_machdep.c
--- a/sys/arch/powerpc/powerpc/vm_machdep.c Sun Jun 04 12:06:44 2000 +0000
+++ b/sys/arch/powerpc/powerpc/vm_machdep.c Sun Jun 04 12:12:13 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.17 2000/05/28 05:49:03 thorpej Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.18 2000/06/04 12:12:13 tsubai Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -49,7 +49,7 @@
/*
* Finish a fork operation, with process p2 nearly set up.
* Copy and update the pcb and trap frame, making the child ready to run.
- *
+ *
* Rig the child's kernel stack so that it will start out in
* fork_trampoline() and call child_return() with p2 as an
* argument. This causes the newly-created child process to go
@@ -90,7 +90,7 @@
if (p1 == fpuproc)
save_fpu(p1);
*pcb = p1->p_addr->u_pcb;
-
+
pcb->pcb_pm = p2->p_vmspace->vm_map.pmap;
(void) pmap_extract(pmap_kernel(), (vaddr_t)pcb->pcb_pm,
(paddr_t *)&pcb->pcb_pmreal);
@@ -109,13 +109,13 @@
tf->fixreg[1] = (register_t)stack + stacksize;
stktop2 = (caddr_t)((u_long)stktop2 & ~15); /* Align stack pointer */
-
+
/*
* There happens to be a callframe, too.
*/
cf = (struct callframe *)stktop2;
cf->lr = (int)fork_trampoline;
-
+
/*
* Below the trap frame, there is another call frame:
*/
@@ -123,7 +123,7 @@
cf = (struct callframe *)stktop2;
cf->r31 = (register_t)func;
cf->r30 = (register_t)arg;
-
+
/*
* Below that, we allocate the switch frame:
*/
@@ -141,7 +141,7 @@
struct proc *p;
{
struct pcb *pcb = &p->p_addr->u_pcb;
-
+
(void) pmap_extract(pmap_kernel(), (vaddr_t)pcb->pcb_pm,
(paddr_t *)&pcb->pcb_pmreal);
}
@@ -156,7 +156,7 @@
{
paddr_t pa;
vaddr_t va;
-
+
for (va = (vaddr_t)from; size > 0; size -= NBPG) {
(void) pmap_extract(pmap_kernel(), va, &pa);
pmap_remove(pmap_kernel(), va, va + NBPG);
@@ -182,7 +182,7 @@
{
if (p == fpuproc) /* release the fpu */
fpuproc = 0;
-
+
switchexit(p);
}
@@ -199,8 +199,9 @@
struct coreseg cseg;
struct md_coredump md_core;
struct trapframe *tf;
+ struct pcb *pcb = &p->p_addr->u_pcb;
int error;
-
+
CORE_SETMAGIC(*chdr, COREMAGIC, MID_POWERPC, 0);
chdr->c_hdrsize = ALIGN(sizeof *chdr);
chdr->c_seghdrsize = ALIGN(sizeof cseg);
@@ -208,7 +209,13 @@
tf = trapframe(p);
bcopy(tf, &md_core.frame, sizeof md_core.frame);
-
+ if (pcb->pcb_flags & PCB_FPU) {
+ if (p == fpuproc)
+ save_fpu(p);
+ md_core.fpstate = pcb->pcb_fpu;
+ } else
+ bzero(&md_core.fpstate, sizeof(md_core.fpstate));
+
CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
cseg.c_addr = 0;
cseg.c_size = chdr->c_cpusize;
@@ -229,7 +236,7 @@
/*
* Map a user I/O request into kernel virtual address space.
* Note: the pages are already locked by uvm_vslock(), so we
- * do not need to pass an access_type to pmap_enter().
+ * do not need to pass an access_type to pmap_enter().
*/
void
vmapbuf(bp, len)
@@ -239,7 +246,7 @@
vaddr_t faddr, taddr;
vsize_t off;
paddr_t pa;
-
+
#ifdef DIAGNOSTIC
if (!(bp->b_flags & B_PHYS))
panic("vmapbuf");
@@ -269,7 +276,7 @@
{
vaddr_t addr;
vsize_t off;
-
+
#ifdef DIAGNOSTIC
if (!(bp->b_flags & B_PHYS))
panic("vunmapbuf");
Home |
Main Index |
Thread Index |
Old Index