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>