diff options
author | 2014-06-05 21:57:12 +0000 | |
---|---|---|
committer | 2014-06-05 21:57:12 +0000 | |
commit | c3c992fb9cf55cc53efd63595789ef54291529e2 (patch) | |
tree | ca43389216f6a5686ef8468cb57f0945c1b1ae81 | |
parent | Do not recurse when a 'Hello Request' message is received while getting (diff) | |
download | wireguard-openbsd-c3c992fb9cf55cc53efd63595789ef54291529e2.tar.xz wireguard-openbsd-c3c992fb9cf55cc53efd63595789ef54291529e2.zip |
Remove conditional pipeline rewind on 88100, introduced in 1.19 - this seems
to create subtle problems, and removing it does not prevent existing signal
delivery tests from having the correct behaviour. And this is likely redundant
with DAE processing in sigreturn.
We should probably rewind if XIP_V is not set, but does this ever happen
in real life? To be investigated on a rainy day.
This seems to fix spurious signals encountered building libstdc++ and perl.
-rw-r--r-- | sys/arch/m88k/m88k/sig_machdep.c | 36 |
1 files changed, 1 insertions, 35 deletions
diff --git a/sys/arch/m88k/m88k/sig_machdep.c b/sys/arch/m88k/m88k/sig_machdep.c index c5e7abdc653..1bbe245cd56 100644 --- a/sys/arch/m88k/m88k/sig_machdep.c +++ b/sys/arch/m88k/m88k/sig_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sig_machdep.c,v 1.21 2014/06/02 21:18:56 miod Exp $ */ +/* $OpenBSD: sig_machdep.c,v 1.22 2014/06/05 21:57:12 miod Exp $ */ /* * Copyright (c) 2014 Miodrag Vallat. * @@ -164,40 +164,6 @@ sendsig(sig_t catcher, int sig, int mask, unsigned long code, int type, bcopy((const void *)&tf->tf_regs, (void *)&sf.sf_sc.sc_regs, sizeof(sf.sf_sc.sc_regs)); -#ifdef M88100 - if (CPU_IS88100) { - /* - * Rewind the pipeline one instruction, in order to - * reexecute the faulting instruction upon sigreturn, - * if we are sure the instruction execution has not - * completed. - * - * The manual hints the valid bit in XIP should be - * enough, but the description of each exception (and - * the actual observed behaviour) disagree. - * - * Note that the values below are vector offset (in - * quadword units), matching those used in eh.S, rather - * than the logical T_xxx values. - */ - switch (tf->tf_vector) { - case 2: /* instruction access exception */ - case 3: /* data access exception */ - case 4: /* misaligned access exception */ - case 5: /* unimplemented opcode exception */ - case 6: /* privilege violation exception */ - case 7: /* bounds check violation exception */ - case 8: /* illegal integer divide exception */ - case 9: /* integer overflow exception */ - case 114: /* FPU precise exception */ - case 504: /* single-step breakpoint */ - case 511: /* breakpoint */ - m88100_rewind_insn((struct reg *)&sf.sf_sc.sc_regs); - break; - } - } -#endif - if (copyout((caddr_t)&sf, (caddr_t)fp, fsize)) { /* * Process has trashed its stack; give it an illegal |