Abort-Trapping dynamic areas
It is possible, with Kernel 8.19 and later, to mark dynamic areas as being 'abortable'. This means that aborts within their extent (up to their maximum size) will be reported through the Dynamic Area handler. The dynamic area handler may choose to handle the access or to return a failure. A returned failure will result in the access failing in a Data Abort, as normal.
The dynamic area handler will be called with the following parameters :
On entry
R0 = DAHandler_Abort (5)
R1 = flags:
bits 0-3 = operation type :
0 = Load from memory
1 = Store to memory
bit 4 = set if this is a privileged operation, clear if this
is an unprivileged operation
R2 = pointer to data block for transfer
R3 = pointer to start of accessed area within dynamic area
R4 = size of access
R5 = current end of allocated space within dynamic area (for sparse
dynamic areas this has no meaning)
On exit
R4 = amount of data processed
VS if failed, R0 pointing to an error block
This handler reason is called when an abort occurs within a Dynamic Area region which is marked as aborting. The accessed region of the dynamic area is passed in R3, together with the amount of data which is being accessed. The size of the data access will be either 1, 2, 4 or a multiple of 4 for byte, half-word (not presently implemented), word, or multi-word accesses. In the case of word and multi-word accesses, clients need not concern themselves with alignment issues - the address supplied will always be aligned.
For load operations, clients should fill in the block supplied in R2 with the data at the location supplied in R3.
For store operations, clients should fill in the location supplied in R3 with the data at the block supplied in R2.
Unrecognised operations or flags should be returned with errors.
If the error block contains an error number for a hardware error (i.e. bit 31), it will be returned through the error generation mechanism rather than through the abort handler. In other words, it is similar to the instruction which faulted having been an error returning SWI. The exception registers and abort stack copies will still take place in this case. However, if the error is not claimed by ErrorV or the environment handler an explicit OS_Exit will be issued.
To create an Abortable dynamic area bit 16 on the Dynamic Area flags should be set.
A typical use of the Abortable dynamic areas would be to implement a virtual memory system (for the data within the dynamic area). Such a system would map in the page(s) containing the data requested and fill in the data blocks before returning.
Alternatively, such areas can be used to emulate hardware interfaces either where such interfaces are not present in physical hardware, or during development where hardware is not yet available.
Under current versions of the operating system prefetch aborts will not be handled by the Abort-trapping system. Code run from such dynamic areas will not be treated any differently than non-Abort trapping areas. Execution of code from such areas will cause pre-fetch aborts which cannot be fixed up by the dynamic area handler.
|