Index: sys/arch/arm/arm/db_trace.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/arm/db_trace.c,v retrieving revision 1.26 diff -u -p -u -r1.26 db_trace.c --- sys/arch/arm/arm/db_trace.c 12 Nov 2012 18:00:34 -0000 1.26 +++ sys/arch/arm/arm/db_trace.c 31 Dec 2012 08:32:31 -0000 @@ -92,6 +92,7 @@ db_stack_trace_print(db_expr_t addr, boo bool kernel_only = true; bool trace_thread = false; bool lwpaddr = false; + db_addr_t scp, pc; int scp_offset; while ((c = *cp++) != 0) { @@ -151,13 +152,29 @@ db_stack_trace_print(db_expr_t addr, boo lastframe = NULL; scp_offset = -(get_pc_str_offset() >> 2); + /* + * In theory, the SCP isn't guaranteed to be in the function + * that generated the stack frame. We hope for the best. + */ +#ifdef __PROG26 + scp = frame[FR_SCP] & R15_PC; +#else + scp = frame[FR_SCP]; +#endif + pc = scp; + while (count-- && frame != NULL) { - db_addr_t scp; + // db_addr_t scp; uint32_t savecode; int r; uint32_t *rp; const char *sep; +#ifdef __PROG26 + scp = frame[FR_SCP] & R15_PC; +#else + scp = frame[FR_SCP]; +#endif lastframe = frame; #ifndef _KERNEL uint32_t frameb[4]; @@ -166,24 +183,14 @@ db_stack_trace_print(db_expr_t addr, boo frame = frameb + 3; #endif - /* - * In theory, the SCP isn't guaranteed to be in the function - * that generated the stack frame. We hope for the best. - */ -#ifdef __PROG26 - scp = frame[FR_SCP] & R15_PC; -#else - scp = frame[FR_SCP]; -#endif - - db_printsym(scp, DB_STGY_PROC, pr); + db_printsym(pc, DB_STGY_PROC, pr); (*pr)("\n\t"); #ifdef __PROG26 - (*pr)("scp=0x%08x rlv=0x%08x (", scp, frame[FR_RLV] & R15_PC); + (*pr)("pc =0x%08x rlv=0x%08x (", pc, frame[FR_RLV] & R15_PC); db_printsym(frame[FR_RLV] & R15_PC, DB_STGY_PROC, pr); (*pr)(")\n"); #else - (*pr)("scp=0x%08x rlv=0x%08x (", scp, frame[FR_RLV]); + (*pr)("pc =0x%08x rlv=0x%08x (", pc, frame[FR_RLV]); db_printsym(frame[FR_RLV], DB_STGY_PROC, pr); (*pr)(")\n"); #endif @@ -220,7 +227,12 @@ db_stack_trace_print(db_expr_t addr, boo */ if (frame[FR_RFP] == 0) break; /* Top of stack */ - +#ifdef __PROG26 + pc = frame[FR_RLV] & R15_PC; +#else + pc = frame[FR_RLV]; +#endif + frame = (uint32_t *)(frame[FR_RFP]); if (INKERNEL((int)frame)) {