Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Apr 2016 03:01:57 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r298560 - head/sys/powerpc/powerpc
Message-ID:  <201604250301.u3P31vfA067901@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Mon Apr 25 03:01:57 2016
New Revision: 298560
URL: https://svnweb.freebsd.org/changeset/base/298560

Log:
  OR in the unsigned form of the MCAR lower register.
  
  When ORing in a register_t to a wider integer (vm_paddr_t), it gets sign
  extended, so high addresses overwrite the upper word with all 0xf.  Cast to the
  unsigned form (u_register_t), to avoid this problem, and get correct addresses
  printed.

Modified:
  head/sys/powerpc/powerpc/trap.c

Modified: head/sys/powerpc/powerpc/trap.c
==============================================================================
--- head/sys/powerpc/powerpc/trap.c	Mon Apr 25 00:55:51 2016	(r298559)
+++ head/sys/powerpc/powerpc/trap.c	Mon Apr 25 03:01:57 2016	(r298560)
@@ -434,7 +434,7 @@ printtrap(u_int vector, struct trapframe
 			    (u_long)mfspr(SPR_MSSSR0));
 #elif defined(BOOKE)
 		pa = mfspr(SPR_MCARU);
-		pa = (pa << 32) | mfspr(SPR_MCAR);
+		pa = (pa << 32) | (u_register_t)mfspr(SPR_MCAR);
 		printf("   mcsr            = 0x%lx\n", (u_long)mfspr(SPR_MCSR));
 		printf("   mcar            = 0x%jx\n", (uintmax_t)pa);
 #endif



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