Background errors

During the generation of error reports in the default handlers provided by the Kernel, a check will be made for errors which are not caused by the foreground task. This applies to :

  • Data abort
  • Prefetch abort
  • Branch through zero
  • Undefined instruction
  • Stack corruption handlers

The checks use the BTS embedded within the stack at the time of the exception to determine whether the cause was due to a foreground operation, or has been triggered by a component running in the background. The only ways that a background operation can be triggered is through an interrupt request (IRQ or FIQ) or a transient callback. Of the interrupts, only IRQ operations can be trapped.

If, at the time of the exception occuring, a BTS chunk exists within the chain for either an 'Interrupt' or 'Transient callback' event, then the exception is deemed to have occurred in the background. Interrupts can occur at any time that IRQs are enabled. Transient callbacks can occur at any time that system is returning from an IRQ or system call to USR mode. Because the system may be threaded, for example within a network filing system which must trigger callbacks, these may not be the top most elements of the BTS chain.

When such an event occurs, the string 'Background error:' will be prepended to the error message (retaining the error number). This should indicate to the user that it is not the foreground component which is at fault. Future versions of the operating system may treat such faults differently.

This documentation is copyright 3QD Developments Ltd 2013 and may not be reproduced or published in any form without the copyright holders permission. RISC OS is subject to continuous development and improvement as such all information is reproduced by 3QD Developments Ltd in good faith and is believed to be correct at the time of publication E&OE. 3QD Developments Ltd cannot accept any liability for any loss or damage arising from the use of any information provided as part of the RISC OS Documentation.

HTML document version 1.03 3rd November 2015