Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Apr 2003 11:47:23 -0700 (PDT)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 29884 for review
Message-ID:  <200304271847.h3RIlN43089443@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=29884

Change 29884 by marcel@marcel_nfs on 2003/04/27 11:46:42

	Make DDB usable again. This is not complete yet. Handling of
	stacked registers has been left out (just like for the handling
	of the unaligned accesses). Also, we don't print the preserved
	registers because we have to unwind to get them. This all begs
	for some thought and planning.
	
	While typing commit logs, I may as well add that it would be
	nice to more clearly see which registers have NaT bits set.

Affected files ...

.. //depot/projects/ia64_epc/sys/ia64/ia64/db_interface.c#5 edit
.. //depot/projects/ia64_epc/sys/ia64/ia64/db_trace.c#3 edit

Differences ...

==== //depot/projects/ia64_epc/sys/ia64/ia64/db_interface.c#5 (text+ko) ====

@@ -69,71 +69,61 @@
 int	db_active;
 db_regs_t ddb_regs;
 
-static u_int64_t zero;
 static int db_get_rse_reg(struct db_variable *vp, db_expr_t *valuep, int op);
-static int db_get_pc_reg(struct db_variable *vp, db_expr_t *valuep, int op);
+static int db_get_ip_reg(struct db_variable *vp, db_expr_t *valuep, int op);
 
 struct db_variable db_regs[] = {
 	/* Misc control/app registers */
 #define DB_MISC_REGS	13	/* make sure this is correct */
 
-	{"pc",		(db_expr_t*) 0,				db_get_pc_reg},
-	{"ip",		(db_expr_t*) &ddb_regs.tf_special.iip,	FCN_NULL},
+	{"ip",		NULL,			db_get_ip_reg},
 	{"psr",		(db_expr_t*) &ddb_regs.tf_special.psr,	FCN_NULL},
 	{"cr.isr",	(db_expr_t*) &ddb_regs.tf_special.isr,	FCN_NULL},
 	{"cr.ifa",	(db_expr_t*) &ddb_regs.tf_special.ifa,	FCN_NULL},
 	{"pr",		(db_expr_t*) &ddb_regs.tf_special.pr,	FCN_NULL},
 	{"ar.rsc",	(db_expr_t*) &ddb_regs.tf_special.rsc,	FCN_NULL},
 	{"ar.pfs",	(db_expr_t*) &ddb_regs.tf_special.pfs,	FCN_NULL},
-	{"cr.ifs",	(db_expr_t*) &ddb_regs.tf_special.ifs,	FCN_NULL},
+	{"cr.ifs",	(db_expr_t*) &ddb_regs.tf_special.cfm,	FCN_NULL},
 	{"ar.bspstore",	(db_expr_t*) &ddb_regs.tf_special.bspstore, FCN_NULL},
+	{"ndirty",	(db_expr_t*) &ddb_regs.tf_special.ndirty, FCN_NULL},
 	{"ar.rnat",	(db_expr_t*) &ddb_regs.tf_special.rnat,	FCN_NULL},
-	{"ar.unat",	(db_expr_t*) &ddb_regs.tf_special.nat,	FCN_NULL},
+	{"ar.unat",	(db_expr_t*) &ddb_regs.tf_special.unat,	FCN_NULL},
 	{"ar.fpsr",	(db_expr_t*) &ddb_regs.tf_special.fpsr,	FCN_NULL},
 
 	/* Branch registers */
-	{"rp",		(db_expr_t*) &ddb_regs.tf_b[0],		FCN_NULL},
-	{"b1",		(db_expr_t*) &ddb_regs.tf_b[1],		FCN_NULL},
-	{"b2",		(db_expr_t*) &ddb_regs.tf_b[2],		FCN_NULL},
-	{"b3",		(db_expr_t*) &ddb_regs.tf_b[3],		FCN_NULL},
-	{"b4",		(db_expr_t*) &ddb_regs.tf_b[4],		FCN_NULL},
-	{"b5",		(db_expr_t*) &ddb_regs.tf_b[5],		FCN_NULL},
-	{"b6",		(db_expr_t*) &ddb_regs.tf_b[6],		FCN_NULL},
-	{"b7",		(db_expr_t*) &ddb_regs.tf_b[7],		FCN_NULL},
+	{"rp",		(db_expr_t*) &ddb_regs.tf_special.rp,	FCN_NULL},
+	/* b1, b2, b3, b4, b5 are preserved */
+	{"b6",		(db_expr_t*) &ddb_regs.tf_scratch.br6,	FCN_NULL},
+	{"b7",		(db_expr_t*) &ddb_regs.tf_scratch.br7,	FCN_NULL},
 
 	/* Static registers */
-	{"r0",		(db_expr_t*) &zero,			FCN_NULL},
-	{"gp",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R1],	FCN_NULL},
-	{"r2",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R2],	FCN_NULL},
-	{"r3",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R3],	FCN_NULL},
-	{"r4",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R4],	FCN_NULL},
-	{"r5",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R5],	FCN_NULL},
-	{"r6",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R6],	FCN_NULL},
-	{"r7",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R7],	FCN_NULL},
-	{"r8",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R8],	FCN_NULL},
-	{"r9",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R9],	FCN_NULL},
-	{"r10",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R10],	FCN_NULL},
-	{"r11",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R11],	FCN_NULL},
-	{"sp",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R12],	FCN_NULL},
-	{"r13",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R13],	FCN_NULL},
-	{"r14",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R14],	FCN_NULL},
-	{"r15",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R15],	FCN_NULL},
-	{"r16",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R16],	FCN_NULL},
-	{"r17",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R17],	FCN_NULL},
-	{"r18",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R18],	FCN_NULL},
-	{"r19",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R19],	FCN_NULL},
-	{"r20",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R20],	FCN_NULL},
-	{"r21",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R21],	FCN_NULL},
-	{"r22",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R22],	FCN_NULL},
-	{"r23",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R23],	FCN_NULL},
-	{"r24",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R24],	FCN_NULL},
-	{"r25",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R25],	FCN_NULL},
-	{"r26",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R26],	FCN_NULL},
-	{"r27",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R27],	FCN_NULL},
-	{"r28",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R28],	FCN_NULL},
-	{"r29",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R29],	FCN_NULL},
-	{"r30",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R30],	FCN_NULL},
-	{"r31",		(db_expr_t*) &ddb_regs.tf_r[FRAME_R31],	FCN_NULL},
+	{"gp",		(db_expr_t*) &ddb_regs.tf_special.gp,	FCN_NULL},
+	{"r2",		(db_expr_t*) &ddb_regs.tf_scratch.gr2,	FCN_NULL},
+	{"r3",		(db_expr_t*) &ddb_regs.tf_scratch.gr3,	FCN_NULL},
+	{"r8",		(db_expr_t*) &ddb_regs.tf_scratch.gr8,	FCN_NULL},
+	{"r9",		(db_expr_t*) &ddb_regs.tf_scratch.gr9,	FCN_NULL},
+	{"r10",		(db_expr_t*) &ddb_regs.tf_scratch.gr10,	FCN_NULL},
+	{"r11",		(db_expr_t*) &ddb_regs.tf_scratch.gr11,	FCN_NULL},
+	{"sp",		(db_expr_t*) &ddb_regs.tf_special.sp,	FCN_NULL},
+	{"tp",		(db_expr_t*) &ddb_regs.tf_special.tp,	FCN_NULL},
+	{"r14",		(db_expr_t*) &ddb_regs.tf_scratch.gr14,	FCN_NULL},
+	{"r15",		(db_expr_t*) &ddb_regs.tf_scratch.gr15,	FCN_NULL},
+	{"r16",		(db_expr_t*) &ddb_regs.tf_scratch.gr16,	FCN_NULL},
+	{"r17",		(db_expr_t*) &ddb_regs.tf_scratch.gr17,	FCN_NULL},
+	{"r18",		(db_expr_t*) &ddb_regs.tf_scratch.gr18,	FCN_NULL},
+	{"r19",		(db_expr_t*) &ddb_regs.tf_scratch.gr19,	FCN_NULL},
+	{"r20",		(db_expr_t*) &ddb_regs.tf_scratch.gr20,	FCN_NULL},
+	{"r21",		(db_expr_t*) &ddb_regs.tf_scratch.gr21,	FCN_NULL},
+	{"r22",		(db_expr_t*) &ddb_regs.tf_scratch.gr22,	FCN_NULL},
+	{"r23",		(db_expr_t*) &ddb_regs.tf_scratch.gr23,	FCN_NULL},
+	{"r24",		(db_expr_t*) &ddb_regs.tf_scratch.gr24,	FCN_NULL},
+	{"r25",		(db_expr_t*) &ddb_regs.tf_scratch.gr25,	FCN_NULL},
+	{"r26",		(db_expr_t*) &ddb_regs.tf_scratch.gr26,	FCN_NULL},
+	{"r27",		(db_expr_t*) &ddb_regs.tf_scratch.gr27,	FCN_NULL},
+	{"r28",		(db_expr_t*) &ddb_regs.tf_scratch.gr28,	FCN_NULL},
+	{"r29",		(db_expr_t*) &ddb_regs.tf_scratch.gr29,	FCN_NULL},
+	{"r30",		(db_expr_t*) &ddb_regs.tf_scratch.gr30,	FCN_NULL},
+	{"r31",		(db_expr_t*) &ddb_regs.tf_scratch.gr31,	FCN_NULL},
 
 	/* Stacked registers */
 	{"r32",		(db_expr_t*) 32,	db_get_rse_reg},
@@ -238,28 +228,37 @@
 static int
 db_get_rse_reg(struct db_variable *vp, db_expr_t *valuep, int op)
 {
-	int sof = ddb_regs.tf_cr_ifs & 0x7f;
+	int sof = ddb_regs.tf_special.cfm & 0x7f;
 	int regno = (db_expr_t) vp->valuep;
-	u_int64_t *bsp = (u_int64_t *) (ddb_regs.tf_ar_bspstore + ddb_regs.tf_ndirty);
+#if 0
+	u_int64_t *bsp;
 	u_int64_t *reg;
+#endif
 
 	if (regno - 32 >= sof) {
 		if (op == DB_VAR_GET)
 			*valuep = 0xdeadbeefdeadbeef;
 	} else {
+#if 0
+		bsp = (u_int64_t *)(ddb_regs.tf_special.bspstore +
+		    ddb_regs.tf_special.ndirty);
 		bsp = ia64_rse_previous_frame(bsp, sof);
 		reg = ia64_rse_register_address(bsp, regno);
 		if (op == DB_VAR_GET)
 			*valuep = *reg;
 		else
 			*reg = *valuep;
+#else
+		if (op == DB_VAR_GET)
+			*valuep = 0xdeadbeefdeadbeef;
+#endif
 	}
 
 	return 0;
 }
 
 static int
-db_get_pc_reg(struct db_variable *vp, db_expr_t *valuep, int op)
+db_get_ip_reg(struct db_variable *vp, db_expr_t *valuep, int op)
 {
 	/* Read only */
 	if (op == DB_VAR_GET)
@@ -350,8 +349,8 @@
 	/*
 	 * XXX pretend that registers outside the current frame don't exist.
 	 */
-	db_eregs = db_regs + DB_MISC_REGS + 8 + 32
-		+ (ddb_regs.tf_cr_ifs & 0x7f);
+	db_eregs = db_regs + DB_MISC_REGS + 3 + 27 +
+	    (ddb_regs.tf_special.cfm & 0x7f);
 
 	__asm __volatile("flushrs"); /* so we can look at them */
 
@@ -462,10 +461,13 @@
 		return (0);
 
 	if (regno < 32) {
-		return (regs->tf_r[regno - 1]);
+		return (0xdeadbeefdeadbeef);
+		/* return (regs->tf_r[regno - 1]); */
 	} else {
-		int sof = ddb_regs.tf_cr_ifs & 0x7f;
-		u_int64_t *bsp = (u_int64_t *) (ddb_regs.tf_ar_bspstore + ddb_regs.tf_ndirty);
+#if 0
+		int sof = ddb_regs.tf_special.cfm & 0x7f;
+		u_int64_t *bsp = (u_int64_t *)(ddb_regs.tf_special.bspstore +
+		    ddb_regs.tf_special.ndirty);
 		u_int64_t *reg;
 
 		if (regno - 32 >= sof) {
@@ -475,6 +477,9 @@
 			reg = ia64_rse_register_address(bsp, regno);
 			return *reg;
 		}
+#else
+		return 0xdeadbeefdeadbeef;
+#endif
 	}
 }
 
@@ -536,10 +541,10 @@
 	/*
 	 * Skip past the break instruction.
 	 */
-	ddb_regs.tf_cr_ipsr += IA64_PSR_RI_1;
-	if ((ddb_regs.tf_cr_ipsr & IA64_PSR_RI) > IA64_PSR_RI_2) {
-		ddb_regs.tf_cr_ipsr &= ~IA64_PSR_RI;
-		ddb_regs.tf_cr_iip += 16;
+	ddb_regs.tf_special.psr += IA64_PSR_RI_1;
+	if ((ddb_regs.tf_special.psr & IA64_PSR_RI) > IA64_PSR_RI_2) {
+		ddb_regs.tf_special.psr &= ~IA64_PSR_RI;
+		ddb_regs.tf_special.iip += 16;
 	}
 }
 

==== //depot/projects/ia64_epc/sys/ia64/ia64/db_trace.c#3 (text+ko) ====

@@ -49,6 +49,7 @@
 void
 db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count, char *modif)
 {
+#if 0
 	struct ia64_unwind_state *us;
 
 	if (count == -1)
@@ -112,6 +113,7 @@
 	}
 
 	ia64_free_unwind_state(us);
+#endif
 }
 
 void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304271847.h3RIlN43089443>