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;

Reply via email to