Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Dec 2003 23:59:09 -0800 (PST)
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 44495 for review
Message-ID:  <200312290759.hBT7x9tG007359@repoman.freebsd.org>

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

Change 44495 by jmallett@jmallett_oingo on 2003/12/28 23:58:30

	Shuffle some things, nuke some unused stuff...

Affected files ...

.. //depot/projects/mips/sys/mips/mips/db_trace.c#5 edit

Differences ...

==== //depot/projects/mips/sys/mips/mips/db_trace.c#5 (text+ko) ====

@@ -41,37 +41,6 @@
 #include <ddb/db_variables.h>
 #include <ddb/db_sym.h>
 
-int start(void);	/* lowest kernel code address */
-vm_offset_t getreg_val(db_expr_t regno);
-
-#define REG_ARG(i)	(4+i)
-#define SAVES_RA(x)	isa_spill((x),31)
-
-#define KERN_SAVE_REG_IDX(vp)	( \
-	((vp)->valuep >= (int *)(&((struct mips_saved_state *)0)->s0) &&    \
-	 (vp)->valuep <= (int *)(&((struct mips_saved_state *)0)->s7))?	    \
-		vp->valuep - (int *)(&((struct mips_saved_state *)0)->s0):  \
-	((vp)->valuep >= (int *)(&((struct mips_saved_state *)0)->sp) &&    \
-	 (vp)->valuep <= (int *)(&((struct mips_saved_state *)0)->ra))?	    \
-		((vp)->valuep-(int *)(&((struct mips_saved_state *)0)->sp)) + \
-		 ((int *)(&((struct mips_kernel_state *)0)->sp) - (int *)0):  \
-	 -1)
-
-db_sym_t localsym(db_sym_t sym, boolean_t isreg, int *lex_level);
-
-/*
- * Machine register set.
- */
-struct mips_saved_state *db_cur_exc_frame = 0;
-
-/*
- * Stack trace helper.
- */
-void db_mips_stack_trace(int, vm_offset_t, vm_offset_t, vm_offset_t, int, vm_offset_t);
-int db_mips_variable_func(const struct db_variable *, db_expr_t *, int);
-
-#define DBREGS_REG()
-
 struct db_variable db_regs[] = {
 	{ "at",	(db_expr_t *)&ddb_regs.f_regs[AST], FCN_NULL },
 	{ "v0",	(db_expr_t *)&ddb_regs.f_regs[V0],  FCN_NULL },
@@ -137,6 +106,8 @@
 	ra = ddb_regs.f_regs[RA];
 	do {
 		va = pc;
+		if (va <= (register_t)btext)
+			break;
 		do {
 			va -= sizeof(int);
 			insn = *(int *)va;
@@ -151,30 +122,50 @@
 		func = va;
 		stacksize = 0;
 		do {
+			if (va >= pc)
+				break;
 			i.word = *(int *)va;
-			if (i.IType.op == OP_SW
-			    && i.IType.rs == SP
-			    && i.IType.rt == RA)
+			switch (i.IType.op) {
+			case OP_SW:
+			case OP_SD:
+				if (i.IType.rs != sp || i.IType.rt != RA)
+					break;
 				ra = *(int *)(sp + (short)i.IType.imm);
-			if (i.IType.op == OP_ADDIU
-			    && i.IType.rs == SP
-			    && i.IType.rt == SP)
+				break;
+			case OP_ADDI:
+			case OP_ADDIU:
+			case OP_DADDI:
+			case OP_DADDIU:
+				if (i.IType.rs != SP || i.IType.rt != SP)
+					break;
 				stacksize = -(short)i.IType.imm;
+				break;
+			default:
+				break;
+			}
 			va += sizeof(int);
 		} while (va < pc);
 
 		db_find_sym_and_offset(func, &name, &offset);
-		if (name == 0)
-			name = "?";
-		db_printf("%s()+0x%lx, called by %p, stack size %d\n",
-			name, (u_long)(pc - func), (void *)ra, stacksize);
+		if (name != NULL)
+			db_printf("%s()+0x%lx", name, (u_long)(pc - func));
+		else
+			db_printf("%p", (void *)pc);
+		db_printf(" called by ");
+		db_find_sym_and_offset(ra, &name, &offset);
+		if (name != NULL)
+			db_printf("%s", name);
+		else
+			db_printf("%p", (void *)ra);
+		db_printf(" stack size %d\n", stacksize);
 
-		if (ra == pc) {
+		if (ra == pc && stacksize == 0) {
 			db_printf("-- loop? --\n");
-			return;
+			break;
 		}
+		pc = ra;
 		sp += stacksize;
-		pc = ra;
+		ra = 0;
 	} while (pc > (register_t)btext);
 	if (pc < 0x80000000)
 		db_printf("-- user process --\n");
@@ -183,15 +174,6 @@
 }
 
 void
-db_mips_stack_trace(int count, vm_offset_t stackp, vm_offset_t the_pc, vm_offset_t the_ra,
-    int flags, vm_offset_t kstackp)
-{
-
-	/* nothing... */
-}
-
-
-void
 db_print_backtrace(void)
 {
 	u_long *sp;



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