Improve error handling in OS_Exit
Jeffrey Lee authored
The poor documentation of OS_Exit in the PRMs means there could be many
pieces of software which are using it in a dangerous way. E.g. the
famous issue of "OS_Exit generates a garbage error if the return code is
out of range" that's documented in the OS StrongHelp manuals - where
people (quite rightly) assumed that the OS would generate the "return
code out of range" error, when in reality the OS has only ever used the
error pointer that was supplied by the caller.

Try and improve on things slightly by having OS_Exit sanity check the
supplied error pointer before it tries to use it. This doesn't alter the
cases where OS_Exit decides to silently ignore the supplied error
pointer / return code (if R0 isn't word aligned, or historically, if R0
wasn't word aligned and wasn't in the low 64MB of address space), it
just alters the logic for what error pointer gets sent to
OS_GenerateError when it does decide to raise an error.

If the error pointer looks bad (it's below &4000 o...
2054b8fe