Skip to main content
Log in

LLVMVF: A Generic Approach for Verification of Multicore Software

  • Published:
Journal of Electronic Testing Aims and scope Submit manuscript

Abstract

Proliferation of multicore hardware boosted the need for verification of multicore software that is running on these hardware. Multicore software demands new verification techniques different from the ones used for sequential software. Many optimized compiler frameworks are arising to address the complexities of multicore software. Among these compilers, Low Level Virtual Machine (LLVM) is especially gaining popularity because i) has a universal front-end that allows to read in many different input languages, ii) aggressive optimizations to improve code performance and quality, and iii) a well-defined intermediate bytecode representation, called LLVM IR, that allows a unified intermediate representation. In this work, we present a novel framework, called LLVM Verification Framework (LLVMVF), implemented in a purely functional language for verification of multicore software. To our knowledge, this is the first verification framework using the LLVM bytecode representation for multicore software. We present an SMT-based Bounded Model Checker backend of LLVMVF and perform initial experiments on multicore software using Pthreads library. Furthermore, we compare our results with an existing multicore software verification tool.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7

Similar content being viewed by others

References

  1. Armando A, Mantovani J, Platania L (2009) Bounded model checking of software using smt solvers instead of sat solvers. Int J Softw Tools Technol Transf 11(1):69–83

    Article  Google Scholar 

  2. Baier C, Katoen J-P (2008) Principles of model checking. The MIT Press, Cambridge

    MATH  Google Scholar 

  3. Barnat J, Brim L, Ročkai P (2012) Towards LTL model checking of unmodified thread-based C & C++ programs. In: NASA formal methods symposium, volume 7226 of LNCS, pp 252–267

  4. Barnett M, Chang B-YE, DeLine R, Jacobs B, Leino KRM (2006) Boogie: a modular reusable verifier for object-oriented programs. In: Proceedings of the 4th international conference on formal methods for components and objects, pp 364–387

  5. Biere A, Cimatti A, Clarke EM, Zhu Y (1999) Symbolic model checking without bdds. In: Proceedings of the 5th international conference on tools and algorithms for construction and analysis of systems, pp 193–207

  6. Bryant RE (1986) Graph-based algorithms for boolean function manipulation. IEEE Trans Comput 35(8):677–691

    Article  MATH  Google Scholar 

  7. Cadar C, Dunbar D, Engler DR (2008) KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs. In: OSDI, pp 209–224

  8. Chlipala A (2010) A verified compiler for an impure functional language. SIGPLAN Not 45(1):93–106

    Article  Google Scholar 

  9. Cimatti A, Griggio A, Schaafsma B, Sebastiani R (2013) The MathSAT5 SMT solver. In: Proceedings of the international conference on tools and algorithms for construction and analysis of systems (TACAS), number 7795 in Lecture Notes in Computer Science

  10. clang: a C language family frontend for LLVM, http://clang.llvm.org/ (2012)

  11. Clarke E, Kroening D, Sharygina N, Yorav K (2005) SATABS: SAT-based predicate abstraction for ANSI-C. In: Proceedings of tools and algorithms for the construction and analysis of systems (TACAS 2005), pp 570–574

  12. Clarke EM, Grumberg O, Jha S, Lu Y, Veith H (2000) Counterexample-guided abstraction refinement. In: Proceedings of the 12th international conference on computer aided verification, CAV ’00, pp 154–169

  13. Clarke EM, Kroening D, Lerda F (2004) A tool for checking ansi-c programs. In: Proceedings of the international conference on tools and algorithms for construction and analysis of systems (TACAS), pp 168–176

  14. Cohen E, Dahlweid M, Hillebrand M, Leinenbach D, Moskal M, Santen T, Schulte W, Tobies S (2009) VCC: a practical system for verifying concurrent C. In: Proceedings of the 22nd international conference on theorem proving in higher order logics, pp 23–42

  15. Cordeiro L, Fischer B (2010) Bounded model checking of multi-threaded software using smt solvers. In: Presentation-only paper in 8th international workshop on satisfiability modulo theories (SMT) at FLoC, Edinburgh, Scotland

  16. Competition on software verification, http://sv-comp.sosy-lab.org/ (2013)

  17. de Moura LM, Bjørner N (2008) Z3: an efficient smt solver. In: Proceedings of the international conference on tools and algorithms for construction and analysis of systems (TACAS), pp 337–340

  18. Deniz E, Sen A, Holt J (2012) Verification and coverage of message passing multicore applications. ACM Trans Des Autom Electron Syst 17(3):1–31

    Article  Google Scholar 

  19. Emmi M, Qadeer S, Rakamarić Z (2011) Delay-bounded scheduling. In: Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on principles of programming languages

  20. Flanagan C, Godefroid P (2005) Dynamic partial-order reduction for model checking software. In: Principles of programming languages’05, pp 110–121

  21. Ganai MK, Gupta A (2008) Efficient modeling of concurrent systems in bmc. In: Proceedings of the 15th international workshop on model checking software

  22. Godefroid P, Wolper P (1991) A partial approach to model checking. In: Proceedings of the 6th IEEE symposium on logic in computer science, pp 406–415

  23. Havelund K, Pressburger T (2000) Model checking Java programs using Java PathFinder. Int J Softw Tools Technol Transf 2(4):366–381

    Article  MATH  Google Scholar 

  24. Holzmann G (2003) Spin model checker, the: primer and reference manual, 1st edn. Addison-Wesley Professional

  25. Holzmann GJ (1997) The model checker SPIN. IEEE Trans Softw Eng 23(5):279–295

    Article  MathSciNet  Google Scholar 

  26. Ivancic F, Yang Z, Ganai M, Gupta A, Ashar P (2008) Efficient sat-based bounded model checking for software verification. Theoret Comput Sci 404(3):256–274

    Article  MathSciNet  MATH  Google Scholar 

  27. Jones SP (ed) (2002) Haskell 98 language and libraries: the revised report. http://haskell.org/

  28. Kahlon V, Gupta A, Sinha N (2006) Symbolic model checking of concurrent programs using partial orders and on-the-fly transactions. In: Proceedings of the 18th international conference on computer aided verification

  29. Lattner C, Adve V (2004) LLVM: a compilation framework for lifelong program analysis and transformation. In: Proceedings of the 2004 international symposium on code generation and optimization (CGO’04)

  30. Merz F, Falke S, Sinz C (2012) LLBMC: bounded model checking of C and C++ programs using a compiler IR. In: VSTTE, pp 146–161

  31. MPI Forum (2009) MPI: a message-passing interface standard. Version 2.2

  32. Qadeer S, Rehof J (2005) Context-bounded model checking of concurrent software. In: Proceedings of tools and algorithms for the construction and analysis of systems

  33. Rabinovitz I, Grumberg O (2005) Bounded model checking of concurrent programs. In: Proceedings of the international conference on computer-aided verification (CAV), pp 319–325

  34. Rabinovitz I, Grumberg O (2005) Bounded model checking of concurrent programs. In: CAV, pp 82–97

  35. Ramalingam G (2000) Context-sensitive synchronization-sensitive analysis is undecidable. ACM Trans Program Lang Syst 22(2):416–430

    Article  Google Scholar 

  36. Sinha N, Wang C (2011) On interference abstractions. In: Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on principles of programming languages

  37. Sousa M, Sen A (2012) Generation of TLM testbenches using mutation testing. In: Proceedings of international conference on hardware/software codesign and system synthesis (CODES/ISSS)

  38. Swierstra SD, Alcocer PRA, Saraiva J (1998) Designing and implementing combinator languages. In: Advanced functional programming, pp 150–206

  39. The Multicore Association (2012) Multicore communications API working group

  40. Tristan J-B, Govereau P, Morrisett G (2011) Evaluating value-graph translation validation for llvm. In: Proceedings of the 32nd ACM SIGPLAN conference on programming language design and implementation, pp 295–305

  41. Vujošević-Janičić M, Kuncak V (2012) Development and evaluation of LAV: an SMT-based error finding platform. In: Proceedings of the 4th international conference on verified software: theories, tools, experiments, pp 98–113

  42. Zhao J, Nagarakatte S, Martin MM, Zdancewic S (2012) Formalizing the llvm intermediate representation for verified program transformations. In: Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on principles of programming languages. ACM, pp 427–440

Download references

Acknowledgments

This research was supported by Semiconductor Research Corporation under task 2082.001, Marie Curie European Reintegration Grant within the 7th European Community Framework Programme, BU Research Fund 7223, and the Turkish Academy of Sciences.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Alper Sen.

Additional information

Responsible Editor

S. Ray

Rights and permissions

Reprints and permissions

About this article

Cite this article

Sousa, M., Sen, A. LLVMVF: A Generic Approach for Verification of Multicore Software. J Electron Test 29, 635–646 (2013). https://doi.org/10.1007/s10836-013-5405-9

Download citation

  • Received:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10836-013-5405-9

Keywords

Navigation