Module Name: src
Committed By: christos
Date: Fri Feb 17 16:26:51 UTC 2012
Modified Files:
src/sys/arch/arm/arm: db_trace.c
Log Message:
fix off-by-one in frame handling, and add a missing db_read
To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/arm/db_trace.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/arm/db_trace.c
diff -u src/sys/arch/arm/arm/db_trace.c:1.23 src/sys/arch/arm/arm/db_trace.c:1.24
--- src/sys/arch/arm/arm/db_trace.c:1.23 Wed Feb 15 21:32:40 2012
+++ src/sys/arch/arm/arm/db_trace.c Fri Feb 17 11:26:51 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.23 2012/02/16 02:32:40 christos Exp $ */
+/* $NetBSD: db_trace.c,v 1.24 2012/02/17 16:26:51 christos Exp $ */
/*
* Copyright (c) 2000, 2001 Ben Harris
@@ -31,7 +31,7 @@
#include <sys/param.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.23 2012/02/16 02:32:40 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.24 2012/02/17 16:26:51 christos Exp $");
#include <sys/proc.h>
#include <arm/armreg.h>
@@ -161,9 +161,9 @@ db_stack_trace_print(db_expr_t addr, boo
lastframe = frame;
#ifndef _KERNEL
uint32_t frameb[4];
- db_read_bytes((db_addr_t)(frame - 4), sizeof(frameb),
+ db_read_bytes((db_addr_t)(frame - 3), sizeof(frameb),
(char *)frameb);
- frame = frameb + 4;
+ frame = frameb + 3;
#endif
/*
@@ -189,7 +189,12 @@ db_stack_trace_print(db_expr_t addr, boo
#endif
(*pr)("\trsp=0x%08x rfp=0x%08x", frame[FR_RSP], frame[FR_RFP]);
+#ifndef _KERNEL
+ db_read_bytes((db_addr_t)((u_int32_t *)scp + scp_offset),
+ sizeof(savecode), (void *)&savecode);
+#else
savecode = ((u_int32_t *)scp)[scp_offset];
+#endif
if ((savecode & 0x0e100000) == 0x08000000) {
/* Looks like an STM */
rp = frame - 4;