Fixup DDB entry and register access.

This commit is contained in:
fvdl 2003-03-06 20:58:09 +00:00
parent a9ae465f5e
commit 51c335ad9a
2 changed files with 53 additions and 30 deletions

View File

@ -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.

View File

@ -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 */