Fixup DDB entry and register access.
This commit is contained in:
parent
a9ae465f5e
commit
51c335ad9a
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: db_trace.c,v 1.4 2003/03/05 23:56:08 fvdl Exp $ */
|
||||
/* $NetBSD: db_trace.c,v 1.5 2003/03/06 20:58:09 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Mach Operating System
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.4 2003/03/05 23:56:08 fvdl Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.5 2003/03/06 20:58:09 fvdl Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -46,36 +46,58 @@ __KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.4 2003/03/05 23:56:08 fvdl Exp $");
|
|||
|
||||
#define dbreg(xx) (long *)offsetof(db_regs_t, tf_ ## xx)
|
||||
|
||||
static int db_x86_64_regop(const struct db_variable *, db_expr_t *, int);
|
||||
|
||||
/*
|
||||
* Machine register set.
|
||||
*/
|
||||
const struct db_variable db_regs[] = {
|
||||
{ "ds", dbreg(ds), FCN_NULL },
|
||||
{ "es", dbreg(es), FCN_NULL },
|
||||
{ "fs", dbreg(fs), FCN_NULL },
|
||||
{ "gs", dbreg(gs), FCN_NULL },
|
||||
{ "rdi", dbreg(rdi), FCN_NULL },
|
||||
{ "rsi", dbreg(rsi), FCN_NULL },
|
||||
{ "rbp", dbreg(rbp), FCN_NULL },
|
||||
{ "rbx", dbreg(rbx), FCN_NULL },
|
||||
{ "rdx", dbreg(rdx), FCN_NULL },
|
||||
{ "rcx", dbreg(rcx), FCN_NULL },
|
||||
{ "rax", dbreg(rax), FCN_NULL },
|
||||
{ "r8", dbreg(r8), FCN_NULL },
|
||||
{ "r9", dbreg(r9), FCN_NULL },
|
||||
{ "r10", dbreg(r10), FCN_NULL },
|
||||
{ "r11", dbreg(r11), FCN_NULL },
|
||||
{ "r12", dbreg(r12), FCN_NULL },
|
||||
{ "r13", dbreg(r13), FCN_NULL },
|
||||
{ "r14", dbreg(r14), FCN_NULL },
|
||||
{ "r15", dbreg(r15), FCN_NULL },
|
||||
{ "rip", dbreg(rip), FCN_NULL },
|
||||
{ "cs", dbreg(cs), FCN_NULL },
|
||||
{ "rflags", dbreg(rflags), FCN_NULL },
|
||||
{ "rsp", dbreg(rsp), FCN_NULL },
|
||||
{ "ss", dbreg(ss), FCN_NULL },
|
||||
{ "ds", dbreg(ds), db_x86_64_regop },
|
||||
{ "es", dbreg(es), db_x86_64_regop },
|
||||
{ "fs", dbreg(fs), db_x86_64_regop },
|
||||
{ "gs", dbreg(gs), db_x86_64_regop },
|
||||
{ "rdi", dbreg(rdi), db_x86_64_regop },
|
||||
{ "rsi", dbreg(rsi), db_x86_64_regop },
|
||||
{ "rbp", dbreg(rbp), db_x86_64_regop },
|
||||
{ "rbx", dbreg(rbx), db_x86_64_regop },
|
||||
{ "rdx", dbreg(rdx), db_x86_64_regop },
|
||||
{ "rcx", dbreg(rcx), db_x86_64_regop },
|
||||
{ "rax", dbreg(rax), db_x86_64_regop },
|
||||
{ "r8", dbreg(r8), db_x86_64_regop },
|
||||
{ "r9", dbreg(r9), db_x86_64_regop },
|
||||
{ "r10", dbreg(r10), db_x86_64_regop },
|
||||
{ "r11", dbreg(r11), db_x86_64_regop },
|
||||
{ "r12", dbreg(r12), db_x86_64_regop },
|
||||
{ "r13", dbreg(r13), db_x86_64_regop },
|
||||
{ "r14", dbreg(r14), db_x86_64_regop },
|
||||
{ "r15", dbreg(r15), db_x86_64_regop },
|
||||
{ "rip", dbreg(rip), db_x86_64_regop },
|
||||
{ "cs", dbreg(cs), db_x86_64_regop },
|
||||
{ "rflags", dbreg(rflags), db_x86_64_regop },
|
||||
{ "rsp", dbreg(rsp), db_x86_64_regop },
|
||||
{ "ss", dbreg(ss), db_x86_64_regop },
|
||||
};
|
||||
const struct db_variable * const db_eregs = db_regs + sizeof(db_regs)/sizeof(db_regs[0]);
|
||||
const struct db_variable * const db_eregs =
|
||||
db_regs + sizeof(db_regs)/sizeof(db_regs[0]);
|
||||
|
||||
static int
|
||||
db_x86_64_regop(const struct db_variable *vp, db_expr_t *val, int opcode)
|
||||
{
|
||||
db_expr_t *regaddr =
|
||||
(db_expr_t *)(((uint8_t *)DDB_REGS) + ((size_t)vp->valuep));
|
||||
|
||||
switch (opcode) {
|
||||
case DB_VAR_GET:
|
||||
*val = *regaddr;
|
||||
break;
|
||||
case DB_VAR_SET:
|
||||
*regaddr = *val;
|
||||
break;
|
||||
default:
|
||||
panic("db_x86_64_regop: unknown op %d", opcode);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stack trace.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: vector.S,v 1.19 2003/03/05 23:56:13 fvdl Exp $ */
|
||||
/* $NetBSD: vector.S,v 1.20 2003/03/06 20:58:09 fvdl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 Wasabi Systems, Inc.
|
||||
|
@ -322,6 +322,8 @@ IDTVEC(intr_lapic_ipi)
|
|||
#if defined(DDB)
|
||||
IDTVEC(intrddb)
|
||||
1:
|
||||
pushq $0
|
||||
pushq $T_BPTFLT
|
||||
INTRENTRY
|
||||
movl $0xff,%eax
|
||||
movq %rax,%cr8
|
||||
|
@ -330,8 +332,7 @@ IDTVEC(intrddb)
|
|||
call _C_LABEL(ddb_ipi)
|
||||
xorl %eax,%eax
|
||||
movq %rax,%cr8
|
||||
iretq
|
||||
jmp 1b
|
||||
INTRFASTEXIT
|
||||
#endif /* DDB */
|
||||
#endif /* MULTIPROCESSOR */
|
||||
|
||||
|
|
Loading…
Reference in New Issue