Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Apr 2010 06:42:19 +0000 (UTC)
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r206391 - user/jmallett/octeon/sys/mips/mips
Message-ID:  <201004080642.o386gJSR040697@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jmallett
Date: Thu Apr  8 06:42:19 2010
New Revision: 206391
URL: http://svn.freebsd.org/changeset/base/206391

Log:
  o) Print pointers in vm_fault tracing more nicely.
  o) Add a SYSCALL_TRACING mode which shows more human-readable syscall traces.
     XXX It'd be nice to just modify the ktrace hooks to have truss-like output
         to the kernel console if some option is set.
  o) When logging a bad page fault, log the PDE and PTE of the bad address as
     well as the pc at exception time.

Modified:
  user/jmallett/octeon/sys/mips/mips/trap.c

Modified: user/jmallett/octeon/sys/mips/mips/trap.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/trap.c	Thu Apr  8 00:55:08 2010	(r206390)
+++ user/jmallett/octeon/sys/mips/mips/trap.c	Thu Apr  8 06:42:19 2010	(r206391)
@@ -525,9 +525,9 @@ dofault:
 			--p->p_lock;
 			PROC_UNLOCK(p);
 #ifdef VMFAULT_TRACE
-			printf("vm_fault(%p (pmap %p), %x (%x), %x, %d) -> %x at pc %x\n",
-			    map, &vm->vm_pmap, va, trapframe->badvaddr, ftype, VM_FAULT_NORMAL,
-			    rv, trapframe->pc);
+			printf("vm_fault(%p (pmap %p), %p (%p), %x, %d) -> %x at pc %p\n",
+			    map, &vm->vm_pmap, (void *)va, (void *)(intptr_t)trapframe->badvaddr,
+			    ftype, VM_FAULT_NORMAL, rv, (void *)(intptr_t)trapframe->pc);
 #endif
 
 			if (rv == KERN_SUCCESS) {
@@ -729,6 +729,13 @@ dofault:
 				printf("args[%d] = %#jx\n", i, (intmax_t)args[i]);
 			}
 #endif
+#ifdef SYSCALL_TRACING
+			printf("%s(", syscallnames[code]);
+			for (i = 0; i < nargs; i++) {
+				printf("%s%#jx", i == 0 ? "" : ", ", (intmax_t)args[i]);
+			}
+			printf(")\n");
+#endif
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_SYSCALL))
 				ktrsyscall(code, nargs, args);
@@ -1414,7 +1421,10 @@ log_bad_page_fault(char *msg, struct tra
 		log(LOG_ERR, "pc address %#jx is inaccessible, pde = %p, pte = %#x\n",
 		    (intmax_t)pc, (void *)(intptr_t)*pdep, ptep ? *ptep : 0);
 	}
-	/*	panic("Bad trap");*/
+
+	get_mapping_info((vm_offset_t)frame->badvaddr, &pdep, &ptep);
+	log(LOG_ERR, "Page table info for bad address %#jx: pde = %p, pte = %#x\n",
+	    (intmax_t)frame->badvaddr, (void *)(intptr_t)*pdep, ptep ? *ptep : 0);
 }
 
 



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