R0 -> error, R1-R9 as returned from SWI, R10-R12, SWI addr on stack, R14=SPSR

On entry to error handler, for SWI errors:

User mode - IRQs on

R0 -> error handler's buffer (containing PC error occured at (address of instr after SWI),
                              and a copy of the error)
R1-R9 as returned from the SWI
R10-R12 recovered from stack (may be wrong if SWI wasn't top level - bad person)
User R13,R14 as it was when SWI called


Default abort handler:
Register block filled in with registers for current mode at time of abort.
Stacks flattened
R10-R12, PC from dump placed in SVC stack
OS_Generate error called.
End result: R0-> error
            R1-R9 corrupt
            R10-R12 = registers at instant of abort (from mode in which abort happened)
            R13,R14 = USR registers at instant of abort
            Register block contains registers for current mode at time of abort.


C abort handler should note USR mode registers (only) then pass it on.
C error handler should note that it is an abort, and not touch the register dump.

Error numbers:
&800000XX - machine exceptions: 00=Undef, 01=PAbort, 02=DAbort, 03=AddrEx, 04=Unknown IRQ?
                                05=BThru0
&800002XX - FP exceptions:      00=IVO, 01=OFL, 02=DVZ, 03=UFL, 04=INX, 05=Faulty


FP exceptions:

User mode registers go into integer register dump.
FP registers go into FP register dump
OS_GenerateError from inside FPEm - error handler called with all except R1 intact.