Abstract:
Interrupt-driven programs that run directly on the microcontrollers are ubiquitous in safety-critical areas. In these programs, data races, a class of critical errors, may occur. Using static race detection tools is an important way to find such bugs. Unfortunately, the state-of-art static race detection tools which only focus on multithread codes may be not helpful. In this paper, a new static race detection tool is designed for such programs. The tool is named Draco and implemented on top of Open64 compiler. It provides a simple and easy-to-use language that is used to annotate the programs with the interrupt-related features, so it can detect programs independent of running platforms. Moreover, it embodies a flow-sensitive and context-sensitive race detection algorithm that takes into account the atomicity, the flexibility and the partial randomicity of interrupt-driven programs. Because of adopting the program analysis techniques, Draco succeeds to detect the data races of interrupt-driven programs. It is efficient and precise. Experimental results show that the detecting time of Draco increases asymptotically linearly with the growth of code size, and it only takes 3.6s to detect 17850 lines of code. Moreover, the race detection accuracy rate on the average is 2.13 times as much as that of lockset based race detection algorithm.