Pyromaniac

Pyromaniac PRM: Hardware errors (supplement for Pyromaniac)

Pyromaniac PRM: Hardware errors (supplement for Pyromaniac)

RISC OS PyromaniacHardware errors (supplement for Pyromaniac)

Technical details

Hardware errors are returned when a component of the system can no longer operate and must return a serious failure. The error range was defined in PRM 1-43 (Generating and handling errors), and expanded upon in RISC OS Select documentation. RISC OS Pyromaniac introduces another type of erro code.

The error numbers allocated all have their top 8 bits set to &80 and are reserved in groups of 256. The following groups are reserved:

Hex error numberMeaning
80000000Machine exceptions
80000100Coprocessor exceptions
80000200Floating point exceptions
80000300Econet exceptions
80000400Reserved (due to misallocation)
80000500Reserved for interpreted exceptions (aborting regions in RISC OS Select)
80000600VFP exceptions
80000700RISC OS Pyromaniac exceptions

Some of the machine exceptions are documented below, together with the RISC OS Pyromaniac exception.

Error messages

Error_PyromaniacSyntheticError &7FFFFF
Unallocated error number for Pyromaniac code

This error is generated by RISC OS Pyromaniac when no dedicated error number has been allocated and an exception is returned to the user. It is not strictly a hardware error, but may indicate a more serious problem with the system than a usual error. It may also indicate a lazy implementation which has not been given a proper error number.

Error_UndefinedInstructionError &80000000
Undefined instruction executed

This error is raised when an instruction which is not recognised by the CPU, or which is invalid at the current privilege level, is executed. During the processing of the error, the enviroment register dump will be updated with the registers at the time of the exception.

RISCOS LtdSelect 3
On RISC OS Select if the exception occurs within a privileged mode, the privileged stacks will be copied to the abort stack copy dynamic area.

Error_InstructionAbortError &80000001
Abort on instruction fetch

This error is raised when an attempt is made to execute code in a region of memory which is not available at the current privilege level. During the processing of the error, the enviroment register dump will be updated with the registers at the time of the exception.

RISCOS LtdSelect 3
On RISC OS Select if the exception occurs within a privileged mode, the privileged stacks will be copied to the abort stack copy dynamic area.

Error_DataAbortError &80000002
Abort on data transfer

This error is raised when an attempt is made to read from or write to a region of memory which is not available at the current privilege level. During the processing of the error, the enviroment register dump will be updated with the registers at the time of the exception.

RISCOS LtdSelect 3
On RISC OS Select if the exception occurs within a privileged mode, the privileged stacks will be copied to the abort stack copy dynamic area.

Error_AddressExceptionError &80000003
Address exception

This error was raised for a request for an area of memory which is not accessible by the system. On older systems higher regions of memory were not addressable by the CPU. It is no longer raised as the entire memory range is accessible in 32bit systems.

3.5
Not supported

Error_UnknownIRQError &80000004
Unknown IRQ

This error was raised went an unknown interrupt was triggered. It is no longer generated by the OS.

3.5
Not supported

Error_BranchThrough0Error &80000005
Branch through zero

This error is generated by the OS when an attempt is made to execute code at address 0. During the processing of the error, the enviroment register dump will be updated with the registers at the time of the exception.

RISCOS LtdSelect 3
On RISC OS Select if the exception occurs within a privileged mode, the privileged stacks will be copied to the abort stack copy dynamic area.

Error_BTSCorruptionError &80000006
Privileged mode stack corruption

This error is geneated by the OS when it detects that one of the privileged mode stacks (SVC or IRQ) has become corrupted in a way that prevents the system from reporting its backtrace information.

RISCOS LtdSelect 3
Supported

Error_SVCStackOverflowError &80000007
Privileged mode stack overflow

This error is generated by the OS when an access is made to the memory at the base of the privileged mode stack. This indicates that the stack has become full. Earlier versions of RISC OS would report such overflows as a data abort.

RISCOS LtdSelect 3
Supported

Error_SVCStackCorruptError &80000008
Privileged mode stack corrupt

This error is generated by the OS when it detects that one of the privileged mode stacks (SVC or IRQ) has become corrupted. Examples of corruption might include the stack pointer being out of range, the stack pointer being misaligned, or guard values being overwritten.

Error_PyromaniacErrorError &80000700
Pyromaniac Python exception

This error is generated by the OS when an exception occurs in the Python code providing the implemention of the processor emulation or OS interfaces. The Python backtrace and exception information may be reported on the host console, with the exception text reported as the RISC OS error message.

RISC OS Pyromaniac7.09
Supported

Error_PyromaniacSWIRecursionLimitError &80000701
SWI call nesting limit reached

This error is generated by the OS when the configured limit of nested SWI calls is reached. Under RISC OS Pyromaniac, a limit is configurable for the number of SWI calls that may be made within one another. This limit is intended to protect against very complex system calls, or infinite recursion long before it would be caught by the Error_SVCStackOverflow error.

RISC OS Pyromaniac7.13
Supported