diff options
author | marcel <marcel@FreeBSD.org> | 2005-06-27 23:51:38 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2005-06-27 23:51:38 +0000 |
commit | b3e8712f74c37e27ed01c96a59f0f2d5929de749 (patch) | |
tree | a481a8bb2d80a92735e0f5f1d085789a325d2d20 /sys/sys | |
parent | d34460ded950b94a296cb35469967768067ff7de (diff) | |
download | FreeBSD-src-b3e8712f74c37e27ed01c96a59f0f2d5929de749.zip FreeBSD-src-b3e8712f74c37e27ed01c96a59f0f2d5929de749.tar.gz |
Handle B-unit break instructions. The break.b is unique in that the
immediate is not saved by the architecture. Any of the break.{mifx}
instructions have their immediate saved in cr.iim on interruption.
Consequently, when we handle the break interrupt, we end up with a
break value of 0 when it was a break.b. The immediate is important
because it distinguishes between different uses of the break and
which are defined by the runtime specification.
The bottomline is that when the GNU debugger replaces a B-unit
instruction with a break instruction in the inferior, we would not
send the process a SIGTRAP when we encounter it, because the value
is not one we recognize as a debugger breakpoint.
This change adds logic to decode the bundle in which the break
instruction lives whenever the break value is 0. The assumption
being that it's a break.b and we fetch the immediate directly out
of the instruction. If the break instruction was not a break.b,
but any of break.{mifx} with an immediate of 0, we would be doing
unnecessary work. But since a break 0 is invalid, this is not a
problem and it will still result in a SIGILL being sent to the
process.
Approved by: re (scottl)
Diffstat (limited to 'sys/sys')
0 files changed, 0 insertions, 0 deletions