summaryrefslogtreecommitdiff
path: root/sys/arch/sparc64/sparc64/trap.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/sparc64/sparc64/trap.c')
-rw-r--r--sys/arch/sparc64/sparc64/trap.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sys/arch/sparc64/sparc64/trap.c b/sys/arch/sparc64/sparc64/trap.c
index b16e3c4b5dc..e83de626ae7 100644
--- a/sys/arch/sparc64/sparc64/trap.c
+++ b/sys/arch/sparc64/sparc64/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.39 2006/01/30 21:26:19 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.40 2006/02/05 19:53:34 kettenis Exp $ */
/* $NetBSD: trap.c,v 1.73 2001/08/09 01:03:01 eeh Exp $ */
/*
@@ -477,7 +477,8 @@ trap(tf, type, pc, tstate)
tf->tf_tstate |= (PSTATE_PEF<<TSTATE_PSTATE_SHIFT);
return;
}
- goto dopanic;
+ if (type != T_SPILL_N_NORM && type != T_FILL_N_NORM)
+ goto dopanic;
}
if ((p = curproc) == NULL)
p = &proc0;
@@ -627,6 +628,19 @@ badtrap:
break;
}
+ case T_SPILL_N_NORM:
+ case T_FILL_N_NORM:
+ /*
+ * We got an alignment trap in the spill/fill handler.
+ *
+ * XXX We really should generate a bus error here, but
+ * we could be on the interrupt stack, and dumping
+ * core from the interrupt stack is not a good idea.
+ * It causes random crashes.
+ */
+ sigexit(p, SIGKILL);
+ break;
+
case T_ALIGN:
case T_LDDF_ALIGN:
case T_STDF_ALIGN: