[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CVS: cvs.openbsd.org: src
- To: source-changes_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org
- Subject: CVS: cvs.openbsd.org: src
- From: Miod Vallat <miod_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org>
- Date: Thu, 16 May 2002 01:37:45 -0600 (MDT)
Module name: src
Changes by: miod_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org 2002/05/16 01:37:44
sys/arch/vax/vax: db_disasm.c db_disasm.h machdep.c trap.c
Fix a long standing problem on vax: on "arithmetic fault" exceptions,
we schedule a SIGFPE signal delivery to the faulting process.
However, arithmetic faults come in two flavors: "traps" that are "regular"
exceptions, and "faults" that are restartable exceptions.
In the "fault" case, the frame pc points to the faulting instruction, instead
of the next instruction, in case we could save the world by tweaking memory
and make the instruction not fault again when restarted.
In practice, this led to processes blocked in a SIGFPE loop madness.
To avoid this, add a skip_opcode() routine to compute the address of the
next opcode, effectively skipping the offending instruction ; this routine
is a very stripped-down db_disasm().
While there, enhance the ddb disassembler to correctly recognize and
disassemble two-byte opcodes.
ok hugh@, deraadt@
Visit your host, monkey.org