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.
Similar content being viewed by others
References
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
Baier C, Katoen J-P (2008) Principles of model checking. The MIT Press, Cambridge
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
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
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
Bryant RE (1986) Graph-based algorithms for boolean function manipulation. IEEE Trans Comput 35(8):677–691
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
Chlipala A (2010) A verified compiler for an impure functional language. SIGPLAN Not 45(1):93–106
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
clang: a C language family frontend for LLVM, http://clang.llvm.org/ (2012)
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
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
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
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
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
Competition on software verification, http://sv-comp.sosy-lab.org/ (2013)
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
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
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
Flanagan C, Godefroid P (2005) Dynamic partial-order reduction for model checking software. In: Principles of programming languages’05, pp 110–121
Ganai MK, Gupta A (2008) Efficient modeling of concurrent systems in bmc. In: Proceedings of the 15th international workshop on model checking software
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
Havelund K, Pressburger T (2000) Model checking Java programs using Java PathFinder. Int J Softw Tools Technol Transf 2(4):366–381
Holzmann G (2003) Spin model checker, the: primer and reference manual, 1st edn. Addison-Wesley Professional
Holzmann GJ (1997) The model checker SPIN. IEEE Trans Softw Eng 23(5):279–295
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
Jones SP (ed) (2002) Haskell 98 language and libraries: the revised report. http://haskell.org/
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
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)
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
MPI Forum (2009) MPI: a message-passing interface standard. Version 2.2
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
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
Rabinovitz I, Grumberg O (2005) Bounded model checking of concurrent programs. In: CAV, pp 82–97
Ramalingam G (2000) Context-sensitive synchronization-sensitive analysis is undecidable. ACM Trans Program Lang Syst 22(2):416–430
Sinha N, Wang C (2011) On interference abstractions. In: Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on principles of programming languages
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)
Swierstra SD, Alcocer PRA, Saraiva J (1998) Designing and implementing combinator languages. In: Advanced functional programming, pp 150–206
The Multicore Association (2012) Multicore communications API working group
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
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
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
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
Corresponding author
Additional information
Responsible Editor
S. Ray
Rights 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
Received:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10836-013-5405-9