skip to main content
research-article

Static Analysis of Runtime Errors in Interrupt-Driven Programs via Sequentialization

Authors Info & Claims
Published:01 September 2016Publication History
Skip Abstract Section

Abstract

Embedded software often involves intensive numerical computations and suffers from a number of runtime errors. The technique of numerical static analysis is of practical importance for checking the correctness of embedded software. However, most of the existing approaches of numerical static analysis consider sequential programs, while interrupts are a commonly used facility that introduces concurrency in embedded systems. Therefore, a numerical static analysis approach is highly desired for embedded software with interrupts. In this article, we propose a static analysis approach specifically for interrupt-driven programs based on sequentialization techniques. We present a method to sequentialize interrupt-driven programs into nondeterministic sequential programs according to the semantics of interrupts. The key benefit of using sequentialization is the ability to leverage the power of state-of-the-art analysis and verification techniques for sequential programs to analyze interrupt-driven programs, for example, the power of numerical abstract interpretation to analyze numerical properties of the sequentialized programs. Furthermore, to improve the analysis precision and scalability, we design specific abstract domains to analyze sequentialized interrupt-driven programs by considering their specific features. Finally, we present encouraging experimental results obtained by our prototype implementation.

References

  1. Eva Beckschulze, Sebastian Biallas, and Stefan Kowalewski. 2012. Static analysis of lockless microcontroller C programs. In SSV’12. 103--114.Google ScholarGoogle Scholar
  2. Bruno Blanchet, Patrick Cousot, Radhia Cousot, Jérôme Feret, Laurent Mauborgne, Antoine Miné, David Monniaux, and Xavier Rival. 2003. A static analyzer for large safety-critical software. In PLDI’03. ACM, 196--207. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. François Bourdoncle. 1992. Abstract interpretation by dynamic partitioning. Journal of Functional Programming 2, 4, 407--435.Google ScholarGoogle ScholarCross RefCross Ref
  4. Dennis Brylow, Niels Damgaard, and Jens Palsberg. 2001. Static checking of interrupt-driven software. In ICSE’01. IEEE, 47--56. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Dennis Brylow and Jens Palsberg. 2004. Deadline analysis of interrupt-driven software. IEEE Transactions on Software Engineering 30, 10, 634--655. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Sagar Chaki, Arie Gurfinkel, and Ofer Strichman. 2013. Verifying periodic programs with priority inheritance locks. In FMCAD’13. 137--144.Google ScholarGoogle Scholar
  7. Takashi Chikamasa, Eiji Sato, and Koji Shimizu. 2010. OSEK platform for LEGO® MINDSTORMS® Retrieved July 4, 2016 from http://lejos-osek.sourceforge.net/.Google ScholarGoogle Scholar
  8. Nathan Cooprider and John Regehr. 2006. Pluggable abstract domains for analyzing embedded software. In LCTES’06. ACM, 44--53. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Patrick Cousot and Radhia Cousot. 1976. Static determination of dynamic properties of programs. In Proceedings of the 2nd International Symposium on Programming. Dunod, Paris, 106--130.Google ScholarGoogle Scholar
  10. Patrick Cousot and Radhia Cousot. 1977. Abstract interpretation: A unified lattice model for static analysis of programs by construction or approximation of fixpoints. In POPL’77. ACM, 238--252. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Stephen A. Edwards. 2003. Tutorial: Compiling concurrent languages for sequential processors. ACM Transactions on Design Automation of Electronic Systems 8, 2, 141--187. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. Jérôme Feret. 2004. Static analysis of digital filters. In ESOP’04. Springer, 33--48.Google ScholarGoogle Scholar
  13. Dan Goodin. 2015. Boeing 787 Dreamliners contain a potentially catastrophic software bug. Retrieved July 4, 2016 from http://arstechnica.com/information-technology/2015/05/boeing-787-dreamliners-contain-a-potentially-catastrophic-software-bug/.Google ScholarGoogle Scholar
  14. Omar Inverso, Ermenegildo Tomasco, Bernd Fischer, Salvatore La Torre, and Gennaro Parlato. 2014. Bounded model checking of multi-threaded C programs via lazy sequentialization. In CAV’14, Lecture Notes in Computer Sciences, Vol. 8559. Springer, Berlin, 585--602. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Bertrand Jeannet, Nicolas Halbwachs, and Pascal Raymond. 1999. Dynamic partitioning in analyses of numerical properties. In SAS’99. Springer, 39--50. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Bertrand Jeannet and Antoine Miné. 2009. Apron: A library of numerical abstract domains for static analysis. In CAV’09, Lecture Notes in Computer Sciences, Vol. 5643. Springer, Berlin, 661--667. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. Nicholas Kidd, Suresh Jagannathan, and Jan Vitek. 2010. One stack to run them all - Reducing concurrent analysis to sequential analysis under priority scheduling. In SPIN’10, Lecture Notes in Computer Sciences, Vol. 6349. Springer, Berlin, 245--261. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Jonathan Kotker and Sanjit A. Seshia Dorsa Sadigh. 2011. Timing analysis of interrupt-driven programs under context bounds. In FMCAD’11. IEEE Press, 81--90. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Akash Lal, Tayssir Touili, Nicholas Kidd, and Thomas W. Reps. 2008. Interprocedural analysis of concurrent programs under a context bound. In TACAS’08, Lecture Notes in Computer Sciences, Vol. 4963. Springer, Berlin, 282--298. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Laurent Mauborgne and Xavier Rival. 2005. Trace partitioning in abstract interpretation based static analyzers. In ESOP’05. Springer, 5--20. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Antoine Miné. 2006. The octagon abstract domain. Higher-Order and Symbolic Computation 19, 1, 31--100. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Antoine Miné. 2011. Static analysis of run-time errors in embedded critical parallel C programs. In ESOP’11, Lecture Notes in Computer Sciences, Vol. 6602. Springer, Berlin, 398--418. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Antoine Miné. 2014. Relational thread-modular static value analysis by abstract interpretation. In VMCAI’14, Lecture Notes in Computer Sciences, Vol. 8318. Springer, Berlin, 39--58. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. David Monniaux. 2007. Verification of device drivers and intelligent controllers: A case study. In EMSOFT’07. ACM, 30--36. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. George C. Necula, Scott McPeak, Shree Prakash Rahul, and Westley Weimer. 2002. CIL: Intermediate language and tools for analysis and transformation of C programs. In CC’02, Lecture Notes in Computer Sciences, Vol. 2304. Springer, Berlin, 213--228. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Shaz Qadeer and Dinghao Wu. 2004. KISS: Keep it simple and sequential. In PLDI’04. ACM, 14--24. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. John Regehr, Alastair Reid, and Kirk Webb. 2005. Eliminating stack overflow by abstract interpretation. ACM Transactions on Embedded Computed Systems 4, 4, 751--778. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Martin D. Schwarz, Helmut Seidl, Vesal Vojdani, Peter Lammich, and Markus Müller-Olm. 2011. Static analysis of interrupt-driven programs synchronized via the priority ceiling protocol. In POPL’11. ACM, 93--104. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Trampoline. 2015. OpenSource RTOS project. Retrieved July 4, 2016 from http://trampoline.rts-software.org/.Google ScholarGoogle Scholar
  30. Xueguang Wu, Liqian Chen, Antoine Miné, Wei Dong, and Ji Wang. 2015. Numerical static analysis of interrupt-driven programs via sequentialization. In EMSOFT’15. IEEE Press, 55--64. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Wenhua Yang, Yepang Liu, Chang Xu, and Shing-Chi Cheung. 2015. A survey on dependability improvement techniques for pervasive computing systems. SCIENCE CHINA Information Sciences 58, 5, 1--14.Google ScholarGoogle Scholar

Index Terms

  1. Static Analysis of Runtime Errors in Interrupt-Driven Programs via Sequentialization

    Recommendations

    Comments

    Login options

    Check if you have access through your login credentials or your institution to get full access on this article.

    Sign in

    Full Access

    PDF Format

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader
    About Cookies On This Site

    We use cookies to ensure that we give you the best experience on our website.

    Learn more

    Got it!