> colin wrote:.
> > 2. When an exception happens and we find that it's not touching the righ
> > address, we will discard it. However, exception will happen again because
> > the former instruction will be re-executed when the exception is finished.
> >
>
> You'll need to single-step over the instruction which generated the
> unwanted watchpoint exception, with the watchpoint disabled. Then after
> handling the single step reenable the watchpoint and resume normal
> execution.
There's actually a simpler and more efficient approach in Linux. The code
already exists in the MIPS Linux kernel to "skip" the instruction responsible
for the current exception, because the situation also arises for emulated
instructions. In do_watch(), in the cases where you want to ignore the
watchpoint, you should be able to just invoke compute_return_epc(regs)
and return. There should be no need to handle single-step exceptions
or disable/reenable the watchpoint.
Regards,
Kevin K.
|