svn commit: r329695 - head/sys/powerpc/powerpc
Justin Hibbits
jhibbits at FreeBSD.org
Wed Feb 21 03:34:34 UTC 2018
Author: jhibbits
Date: Wed Feb 21 03:34:33 2018
New Revision: 329695
URL: https://svnweb.freebsd.org/changeset/base/329695
Log:
Split printtrap() into generic and CPU-specific components
Summary:
This compartmentalizes the CPU-specific trap components into its own
function, rather than littering the general printtrap() with various checks.
This will let us replace a series of #ifdef's with a runtime conditional check
in the future.
Reviewed By: nwhitehorn
Differential Revision: https://reviews.freebsd.org/D14416
Modified:
head/sys/powerpc/powerpc/trap.c
Modified: head/sys/powerpc/powerpc/trap.c
==============================================================================
--- head/sys/powerpc/powerpc/trap.c Wed Feb 21 03:08:47 2018 (r329694)
+++ head/sys/powerpc/powerpc/trap.c Wed Feb 21 03:34:33 2018 (r329695)
@@ -445,52 +445,65 @@ trap_fatal(struct trapframe *frame)
}
static void
-printtrap(u_int vector, struct trapframe *frame, int isfatal, int user)
+cpu_printtrap(u_int vector, struct trapframe *frame, int isfatal, int user)
{
+#ifdef AIM
uint16_t ver;
-#ifdef BOOKE
- vm_paddr_t pa;
-#endif
- printf("\n");
- printf("%s %s trap:\n", isfatal ? "fatal" : "handled",
- user ? "user" : "kernel");
- printf("\n");
- printf(" exception = 0x%x (%s)\n", vector, trapname(vector));
switch (vector) {
case EXC_DSE:
case EXC_DSI:
case EXC_DTMISS:
- printf(" virtual address = 0x%" PRIxPTR "\n", frame->dar);
-#ifdef AIM
printf(" dsisr = 0x%lx\n",
(u_long)frame->cpu.aim.dsisr);
-#endif
break;
- case EXC_ISE:
- case EXC_ISI:
- case EXC_ITMISS:
- printf(" virtual address = 0x%" PRIxPTR "\n", frame->srr0);
- break;
case EXC_MCHK:
ver = mfpvr() >> 16;
-#if defined(AIM)
if (MPC745X_P(ver))
printf(" msssr0 = 0x%b\n",
(int)mfspr(SPR_MSSSR0), MSSSR_BITMASK);
+ break;
+ }
#elif defined(BOOKE)
+ vm_paddr_t pa;
+
+ switch (vector) {
+ case EXC_MCHK:
pa = mfspr(SPR_MCARU);
pa = (pa << 32) | (u_register_t)mfspr(SPR_MCAR);
printf(" mcsr = 0x%b\n",
(int)mfspr(SPR_MCSR), MCSR_BITMASK);
printf(" mcar = 0x%jx\n", (uintmax_t)pa);
-#endif
- break;
}
-#ifdef BOOKE
printf(" esr = 0x%b\n",
(int)frame->cpu.booke.esr, ESR_BITMASK);
#endif
+}
+
+static void
+printtrap(u_int vector, struct trapframe *frame, int isfatal, int user)
+{
+
+ printf("\n");
+ printf("%s %s trap:\n", isfatal ? "fatal" : "handled",
+ user ? "user" : "kernel");
+ printf("\n");
+ printf(" exception = 0x%x (%s)\n", vector, trapname(vector));
+ switch (vector) {
+ case EXC_DSE:
+ case EXC_DSI:
+ case EXC_DTMISS:
+ printf(" virtual address = 0x%" PRIxPTR "\n", frame->dar);
+ break;
+ case EXC_ISE:
+ case EXC_ISI:
+ case EXC_ITMISS:
+ printf(" virtual address = 0x%" PRIxPTR "\n", frame->srr0);
+ break;
+ case EXC_MCHK:
+ break;
+ }
+ cpu_printtrap(vector, frame, isfatal, user);
printf(" srr0 = 0x%" PRIxPTR " (0x%" PRIxPTR ")\n",
frame->srr0, frame->srr0 - (register_t)(__startkernel - KERNBASE));
printf(" srr1 = 0x%lx\n", (u_long)frame->srr1);
More information about the svn-src-all
mailing list