Subject: Re: Revision K strongarms ...
To: None <chris@fluff.org>
From: Kim G. S. OEyhus <kim@iq.pvv.ntnu.no>
List: port-arm32
Date: 04/30/1998 15:00:30
Lets see if I understand this bug:
There is a LDM^ instruction which is fetching data.
Suddenly it reaches unavailable memory, and a page fault is
generated. Interrupt routines are called. After a while
the page gets loaded from harddisk, and the interrupted
program is restarted on the next instruction, instead of
completing the LDM^ remaing memory loads.

Have I gotten this straight?

Then the real problem is that the instruction can't be
restarted, because information about the number of loaded
registers are lost?

If there is any way if regaining that information, the
missing part of the LDM^ instruction can be emulated in
software as a part of the StrongARM virtual memory system.
Right?

Is there any chance this can be done?

If there is not, then perhaps some heuristics is in order.
I am thinking of a statistical guessing method, based on
what is in the registers and memory. As long as what is loaded
from memory is different from what was in the registers,
it should be possible to guess where the fault happened, by
seeing which of the registers equal the memory to be loaded.

If the LDM^ is mostly used as part of return calls, then
higher probability of guessing right can be done by guessing
which value on the stack are the return address.

Kim0