  Existing standards for airborne-embedded software systems impose a number of
requirements applicable to the software development cycle of hard real-time
operating systems found in modern aircraft. The measures taken are meant to
reduce the risks of undesired consequences, but have strongly varying costs.
Dynamic instrumentation and static analysis are common practices used to
automatically find software defects, from strictly non-conforming code
constructions to memory corruptions or invalid control flow. LLVM analyser and
sanitizer infrastructure, while regularly applied to general-purpose software,
originally was not thought to be introduced to heavily restricted environments.
In this paper we discuss the specifics of airborne systems with regards to
dynamic instrumentation and provide practical considerations to be taken into
account for the effective use of general-purpose instrumentation tools. We
bring a complete LLVM stack support to JetOS, a prospective onboard real-time
operating system currently being developed at ISP RAS in collaboration with
GosNIIAS. As an example, we port AddressSanitizer, MemorySanitizer, and
UndefinedBehaviorSanitizer and provide the details against the caveats on all
relevant sides: a sanitizer, a compiler, and an operating system. In addition
we suggest uninvolved optimisations and enhancements to the runtimes to
maximise the effects of the tools.
