dumpsys: build a fake switchframe for postmortem debugging.
reviewed by Frank van der Linden.
This commit is contained in:
parent
2d653f2875
commit
8e69ce0726
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: locore.S,v 1.24 2007/05/21 08:10:38 fvdl Exp $ */
|
||||
/* $NetBSD: locore.S,v 1.25 2007/05/25 15:09:50 yamt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright-o-rama!
|
||||
|
@ -709,6 +709,26 @@ ENTRY(longjmp)
|
|||
movl $1,%eax
|
||||
ret
|
||||
|
||||
ENTRY(dumpsys)
|
||||
# mimic cpu_switchto() for postmortem debugging.
|
||||
|
||||
# build a fake switch frame.
|
||||
pushq %rbx
|
||||
pushq %r12
|
||||
pushq %r13
|
||||
pushq %r14
|
||||
pushq %r15
|
||||
|
||||
# save a context.
|
||||
movq $dumppcb, %rax
|
||||
movq %rsp, PCB_RSP(%rax)
|
||||
movq %rbp, PCB_RBP(%rax)
|
||||
|
||||
call _C_LABEL(dodumpsys)
|
||||
|
||||
addq $(5*8), %rsp # sizeof(switchframe) - sizeof(%rip)
|
||||
ret
|
||||
|
||||
/*
|
||||
* struct lwp *cpu_switchto(struct lwp *, struct lwp *)
|
||||
*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: machdep.c,v 1.58 2007/05/21 08:10:38 fvdl Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.59 2007/05/25 15:09:50 yamt Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007
|
||||
|
@ -73,7 +73,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.58 2007/05/21 08:10:38 fvdl Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.59 2007/05/25 15:09:50 yamt Exp $");
|
||||
|
||||
#include "opt_user_ldt.h"
|
||||
#include "opt_ddb.h"
|
||||
|
@ -230,6 +230,7 @@ int cpu_dump(void);
|
|||
int cpu_dumpsize(void);
|
||||
u_long cpu_dump_mempagecnt(void);
|
||||
void dumpsys(void);
|
||||
void dodumpsys(void);
|
||||
void init_x86_64(paddr_t);
|
||||
|
||||
/*
|
||||
|
@ -724,7 +725,7 @@ reserve_dumppages(vaddr_t p)
|
|||
}
|
||||
|
||||
void
|
||||
dumpsys(void)
|
||||
dodumpsys(void)
|
||||
{
|
||||
const struct bdevsw *bdev;
|
||||
u_long totalbytesleft, bytes, i, n, memseg;
|
||||
|
@ -734,9 +735,6 @@ dumpsys(void)
|
|||
int (*dump)(dev_t, daddr_t, void *, size_t);
|
||||
int error;
|
||||
|
||||
/* Save registers. */
|
||||
savectx(&dumppcb);
|
||||
|
||||
if (dumpdev == NODEV)
|
||||
return;
|
||||
bdev = bdevsw_lookup(dumpdev);
|
||||
|
|
Loading…
Reference in New Issue