Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Dec 2016 19:36:06 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r310030 - head/sys/mips/mips
Message-ID:  <201612131936.uBDJa6QQ091337@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Tue Dec 13 19:36:05 2016
New Revision: 310030
URL: https://svnweb.freebsd.org/changeset/base/310030

Log:
  Use register_t instead of uintptr_t for register values in backtraces.
  
  This fixes backtraces from DDB in n32 kernels as uintptr_t is only a
  uint32_t.  In particular, the upper 32-bits of each register value were
  treated as the register's value breaking both the output of register
  values, but also the values of 'ra' and 'sp' required to walk up to the
  previous frame.
  
  Sponsored by:	DARPA / AFRL

Modified:
  head/sys/mips/mips/db_trace.c

Modified: head/sys/mips/mips/db_trace.c
==============================================================================
--- head/sys/mips/mips/db_trace.c	Tue Dec 13 19:27:31 2016	(r310029)
+++ head/sys/mips/mips/db_trace.c	Tue Dec 13 19:36:05 2016	(r310030)
@@ -139,8 +139,8 @@ stacktrace_subr(register_t pc, register_
 	 * of these registers is valid, e.g. obtained from the stack
 	 */
 	int valid_args[4];
-	uintptr_t args[4];
-	uintptr_t va, subr;
+	register_t args[4];
+	register_t va, subr;
 	unsigned instr, mask;
 	unsigned int frames = 0;
 	int more, stksize, j;
@@ -379,7 +379,7 @@ done:
 		if (j > 0)
 			(*printfn)(",");
 		if (valid_args[j])
-			(*printfn)("%x", args[j]);
+			(*printfn)("%jx", (uintmax_t)(u_register_t)args[j]);
 		else
 			(*printfn)("?");
 	}



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