Пример #1
0
static int
db_frame_seg(struct db_variable *vp, db_expr_t *valuep, int op)
{
	struct trapframe_vm86 *tfp;
	int off;
	uint16_t *reg;

	if (kdb_frame == NULL)
		return (0);

	off = (intptr_t)vp->valuep;
	if (kdb_frame->tf_eflags & PSL_VM) {
		tfp = (void *)kdb_frame;
		switch ((intptr_t)vp->valuep) {
		case (intptr_t)DB_OFFSET(tf_cs):
			reg = (uint16_t *)&tfp->tf_cs;
			break;
		case (intptr_t)DB_OFFSET(tf_ds):
			reg = (uint16_t *)&tfp->tf_vm86_ds;
			break;
		case (intptr_t)DB_OFFSET(tf_es):
			reg = (uint16_t *)&tfp->tf_vm86_es;
			break;
		case (intptr_t)DB_OFFSET(tf_fs):
			reg = (uint16_t *)&tfp->tf_vm86_fs;
			break;
		}
	} else
		reg = (uint16_t *)((uintptr_t)kdb_frame + off);
	if (op == DB_VAR_GET)
		*valuep = *reg;
	else
		*reg = *valuep;
	return (1);
}
Пример #2
0
#include <ddb/db_output.h>
#include <ddb/db_variables.h>
#include <ddb/db_sym.h>
#include <sys/cons.h>

static int nil = 0;

int db_access_und_sp (struct db_variable *, db_expr_t *, int);
int db_access_abt_sp (struct db_variable *, db_expr_t *, int);
int db_access_irq_sp (struct db_variable *, db_expr_t *, int);

static db_varfcn_t db_frame;

#define DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "spsr", DB_OFFSET(tf_spsr),	db_frame },
	{ "r0", DB_OFFSET(tf_r0),	db_frame },
	{ "r1", DB_OFFSET(tf_r1),	db_frame },
	{ "r2", DB_OFFSET(tf_r2),	db_frame },
	{ "r3", DB_OFFSET(tf_r3),	db_frame },
	{ "r4", DB_OFFSET(tf_r4),	db_frame },
	{ "r5", DB_OFFSET(tf_r5),	db_frame },
	{ "r6", DB_OFFSET(tf_r6),	db_frame },
	{ "r7", DB_OFFSET(tf_r7),	db_frame },
	{ "r8", DB_OFFSET(tf_r8),	db_frame },
	{ "r9", DB_OFFSET(tf_r9),	db_frame },
	{ "r10", DB_OFFSET(tf_r10),	db_frame },
	{ "r11", DB_OFFSET(tf_r11),	db_frame },
	{ "r12", DB_OFFSET(tf_r12),	db_frame },
	{ "usr_sp", DB_OFFSET(tf_usr_sp), db_frame },
	{ "usr_lr", DB_OFFSET(tf_usr_lr), db_frame },
Пример #3
0
static db_varfcn_t db_dr4;
static db_varfcn_t db_dr5;
static db_varfcn_t db_dr6;
static db_varfcn_t db_dr7;
static db_varfcn_t db_frame;
static db_varfcn_t db_rsp;
static db_varfcn_t db_ss;

CTASSERT(sizeof(struct dbreg) == sizeof(((struct pcpu *)NULL)->pc_dbreg));

/*
 * Machine register set.
 */
#define	DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "cs",		DB_OFFSET(tf_cs),	db_frame },
	{ "ds",		DB_OFFSET(tf_ds),	db_frame },
	{ "es",		DB_OFFSET(tf_es),	db_frame },
	{ "fs",		DB_OFFSET(tf_fs),	db_frame },
	{ "gs",		DB_OFFSET(tf_gs),	db_frame },
	{ "ss",		NULL,			db_ss },
	{ "rax",	DB_OFFSET(tf_rax),	db_frame },
	{ "rcx",        DB_OFFSET(tf_rcx),	db_frame },
	{ "rdx",	DB_OFFSET(tf_rdx),	db_frame },
	{ "rbx",	DB_OFFSET(tf_rbx),	db_frame },
	{ "rsp",	NULL,			db_rsp },
	{ "rbp",	DB_OFFSET(tf_rbp),	db_frame },
	{ "rsi",	DB_OFFSET(tf_rsi),	db_frame },
	{ "rdi",	DB_OFFSET(tf_rdi),	db_frame },
	{ "r8",		DB_OFFSET(tf_r8),	db_frame },
	{ "r9",		DB_OFFSET(tf_r9),	db_frame },
Пример #4
0
	long *reg;

	if (kdb_frame == NULL)
		return (0);

	reg = (long *)((uintptr_t)kdb_frame + (db_expr_t)vp->valuep);
	if (op == DB_VAR_GET)
		*valuep = *reg;
	else
		*reg = *valuep;
	return (1);
}

#define DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "ra",		DB_OFFSET(tf_ra),	db_frame },
	{ "sp",		DB_OFFSET(tf_sp),	db_frame },
	{ "gp",		DB_OFFSET(tf_gp),	db_frame },
	{ "tp",		DB_OFFSET(tf_tp),	db_frame },
	{ "t0",		DB_OFFSET(tf_t[0]),	db_frame },
	{ "t1",		DB_OFFSET(tf_t[1]),	db_frame },
	{ "t2",		DB_OFFSET(tf_t[2]),	db_frame },
	{ "t3",		DB_OFFSET(tf_t[3]),	db_frame },
	{ "t4",		DB_OFFSET(tf_t[4]),	db_frame },
	{ "t5",		DB_OFFSET(tf_t[5]),	db_frame },
	{ "t6",		DB_OFFSET(tf_t[6]),	db_frame },
	{ "s0",		DB_OFFSET(tf_s[0]),	db_frame },
	{ "s1",		DB_OFFSET(tf_s[1]),	db_frame },
	{ "s2",		DB_OFFSET(tf_s[2]),	db_frame },
	{ "s3",		DB_OFFSET(tf_s[3]),	db_frame },
	{ "s4",		DB_OFFSET(tf_s[4]),	db_frame },
Пример #5
0
#include <ddb/db_access.h>
#include <ddb/db_sym.h>
#include <ddb/db_variables.h>

static db_varfcn_t db_frame;

#define DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)

#ifdef __powerpc64__
#define	CALLOFFSET	8	/* Include TOC reload slot */
#else
#define	CALLOFFSET	4
#endif

struct db_variable db_regs[] = {
	{ "r0",	 DB_OFFSET(fixreg[0]),	db_frame },
	{ "r1",	 DB_OFFSET(fixreg[1]),	db_frame },
	{ "r2",	 DB_OFFSET(fixreg[2]),	db_frame },
	{ "r3",	 DB_OFFSET(fixreg[3]),	db_frame },
	{ "r4",	 DB_OFFSET(fixreg[4]),	db_frame },
	{ "r5",	 DB_OFFSET(fixreg[5]),	db_frame },
	{ "r6",	 DB_OFFSET(fixreg[6]),	db_frame },
	{ "r7",	 DB_OFFSET(fixreg[7]),	db_frame },
	{ "r8",	 DB_OFFSET(fixreg[8]),	db_frame },
	{ "r9",	 DB_OFFSET(fixreg[9]),	db_frame },
	{ "r10", DB_OFFSET(fixreg[10]),	db_frame },
	{ "r11", DB_OFFSET(fixreg[11]),	db_frame },
	{ "r12", DB_OFFSET(fixreg[12]),	db_frame },
	{ "r13", DB_OFFSET(fixreg[13]),	db_frame },
	{ "r14", DB_OFFSET(fixreg[14]),	db_frame },
	{ "r15", DB_OFFSET(fixreg[15]),	db_frame },
Пример #6
0
static __inline int
get_esp(struct trapframe *tf)
{
	return ((ISPL(tf->tf_cs)) ? tf->tf_esp :
	    (db_expr_t)tf + (uintptr_t)DB_OFFSET(tf_esp));
}
Пример #7
0
#include <ddb/db_access.h>
#include <ddb/db_sym.h>
#include <ddb/db_variables.h>

static db_varfcn_t db_esp;
static db_varfcn_t db_frame;
static db_varfcn_t db_frame_seg;
static db_varfcn_t db_gs;
static db_varfcn_t db_ss;

/*
 * Machine register set.
 */
#define	DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "cs",		DB_OFFSET(tf_cs),	db_frame_seg },
	{ "ds",		DB_OFFSET(tf_ds),	db_frame_seg },
	{ "es",		DB_OFFSET(tf_es),	db_frame_seg },
	{ "fs",		DB_OFFSET(tf_fs),	db_frame_seg },
	{ "gs",		NULL,			db_gs },
	{ "ss",		NULL,			db_ss },
	{ "eax",	DB_OFFSET(tf_eax),	db_frame },
	{ "ecx",	DB_OFFSET(tf_ecx),	db_frame },
	{ "edx",	DB_OFFSET(tf_edx),	db_frame },
	{ "ebx",	DB_OFFSET(tf_ebx),	db_frame },
	{ "esp",	NULL,			db_esp },
	{ "ebp",	DB_OFFSET(tf_ebp),	db_frame },
	{ "esi",	DB_OFFSET(tf_esi),	db_frame },
	{ "edi",	DB_OFFSET(tf_edi),	db_frame },
	{ "eip",	DB_OFFSET(tf_eip),	db_frame },
	{ "efl",	DB_OFFSET(tf_eflags),	db_frame },
Пример #8
0
	long *reg;

	if (kdb_frame == NULL)
		return (0);

	reg = (long *)((uintptr_t)kdb_frame + (db_expr_t)vp->valuep);
	if (op == DB_VAR_GET)
		*valuep = *reg;
	else
		*reg = *valuep;
	return (1);
}

#define DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "spsr", DB_OFFSET(tf_spsr),	db_frame },
	{ "x0", DB_OFFSET(tf_x[0]),	db_frame },
	{ "x1", DB_OFFSET(tf_x[1]),	db_frame },
	{ "x2", DB_OFFSET(tf_x[2]),	db_frame },
	{ "x3", DB_OFFSET(tf_x[3]),	db_frame },
	{ "x4", DB_OFFSET(tf_x[4]),	db_frame },
	{ "x5", DB_OFFSET(tf_x[5]),	db_frame },
	{ "x6", DB_OFFSET(tf_x[6]),	db_frame },
	{ "x7", DB_OFFSET(tf_x[7]),	db_frame },
	{ "x8", DB_OFFSET(tf_x[8]),	db_frame },
	{ "x9", DB_OFFSET(tf_x[9]),	db_frame },
	{ "x10", DB_OFFSET(tf_x[10]),	db_frame },
	{ "x11", DB_OFFSET(tf_x[11]),	db_frame },
	{ "x12", DB_OFFSET(tf_x[12]),	db_frame },
	{ "x13", DB_OFFSET(tf_x[13]),	db_frame },
	{ "x14", DB_OFFSET(tf_x[14]),	db_frame },
Пример #9
0
#include <machine/vmparam.h>
#include <machine/md_var.h>
#include <machine/setjmp.h>

#include <ddb/ddb.h>
#include <ddb/db_sym.h>
#include <ddb/db_access.h>
#include <ddb/db_output.h>
#include <ddb/db_variables.h>
#include <sys/kdb.h>

static db_varfcn_t db_frame;

#define	DB_OFFSET(x)	(db_expr_t *)offsetof(struct trapframe, x)
struct db_variable db_regs[] = {
	{ "at",  DB_OFFSET(ast),	db_frame },
	{ "v0",  DB_OFFSET(v0),		db_frame },
	{ "v1",  DB_OFFSET(v1),		db_frame },
	{ "a0",  DB_OFFSET(a0),		db_frame },
	{ "a1",  DB_OFFSET(a1),		db_frame },
	{ "a2",  DB_OFFSET(a2),		db_frame },
	{ "a3",  DB_OFFSET(a3),		db_frame },
#if defined(__mips_n32) || defined(__mips_n64)
	{ "a4",  DB_OFFSET(a4),		db_frame },
	{ "a5",  DB_OFFSET(a5),		db_frame },
	{ "a6",  DB_OFFSET(a6),		db_frame },
	{ "a7",  DB_OFFSET(a7),		db_frame },
	{ "t0",  DB_OFFSET(t0),		db_frame },
	{ "t1",  DB_OFFSET(t1),		db_frame },
	{ "t2",  DB_OFFSET(t2),		db_frame },
	{ "t3",  DB_OFFSET(t3),		db_frame },