SMT-Based Bounded Model Checking for Embedded ANSI-C Software. Lucas Cordeiro, Bernd Fischer, Joao Marques-Silva

Similar documents
arxiv: v2 [cs.se] 13 Jul 2009

SMT-Based Bounded Model Checking for Embedded ANSI-C Software

ECBS SMT-Bounded Model Checking of C++ Programs. Mikhail Ramalho, Mauro Freitas, Felipe Sousa, Hendrio Marques, Lucas Cordeiro, Bernd Fischer

Verifying C & C++ with ESBMC

UNDERSTANDING PROGRAMMING BUGS IN ANSI-C SOFTWARE USING BOUNDED MODEL CHECKING COUNTER-EXAMPLES

Applying Multi-Core Model Checking to Hardware-Software Partitioning in Embedded Systems

ESBMC 1.22 (Competition Contribution) Jeremy Morse, Mikhail Ramalho, Lucas Cordeiro, Denis Nicole, Bernd Fischer

Deductive Methods, Bounded Model Checking

Handling Loops in Bounded Model Checking of C Programs via k-induction

: A Bounded Model Checking Tool to Verify Qt Applications

Model Checking Embedded C Software using k-induction and Invariants

Seminar in Software Engineering Presented by Dima Pavlov, November 2010

Bounded Model Checking Of C Programs: CBMC Tool Overview

Formal Verification of Embedded Software in Medical Devices Considering Stringent Hardware Constraints

SMT-Based Bounded Model Checking of C++ Programs

Software Model Checking. Xiangyu Zhang

Minimum Satisfying Assignments for SMT. Işıl Dillig, Tom Dillig Ken McMillan Alex Aiken College of William & Mary Microsoft Research Stanford U.

Introduction to CBMC: Part 1

Decision Procedures in the Theory of Bit-Vectors

Introduction to CBMC. Software Engineering Institute Carnegie Mellon University Pittsburgh, PA Arie Gurfinkel December 5, 2011

MEMORY MANAGEMENT TEST-CASE GENERATION OF C PROGRAMS USING BOUNDED MODEL CHECKING

BITCOIN MINING IN A SAT FRAMEWORK

Verifying Temporal Properties via Dynamic Program Execution. Zhenhua Duan Xidian University, China

A Bounded Model Checker for SPARK Programs

System LAV and Its Applications

Exploiting Safety Properties in Bounded Model Checking for Test Cases Generation of C Programs

CSE507. Practical Applications of SAT. Computer-Aided Reasoning for Software. Emina Torlak

An Introduction to Satisfiability Modulo Theories

Abstraction techniques for Floating-Point Arithmetic

OptCE: A Counterexample-Guided Inductive Optimization Solver

Encoding floating-point numbers using the SMT theory in ESBMC: An empirical evaluation over the SV-COMP benchmarks

Abstract Interpretation

More on Verification and Model Checking

Encoding floating-point numbers using the SMT theory in ESBMC: An empirical evaluation over the SV-COMP benchmarks

Symbolic and Concolic Execution of Programs

CS 267: Automated Verification. Lecture 13: Bounded Model Checking. Instructor: Tevfik Bultan

arxiv: v1 [cs.ai] 11 Apr 2017

Lecture Notes on Real-world SMT

Integration of SMT Solvers with ITPs There and Back Again

Satisfiability Modulo Theories: ABsolver

Complete Instantiation of Quantified Formulas in Satisfiability Modulo Theories. ACSys Seminar

HySAT. what you can use it for how it works example from application domain final remarks. Christian Herde /12

Bug Finding with Under-approximating Static Analyses. Daniel Kroening, Matt Lewis, Georg Weissenbacher

SMT-LIB for HOL. Daniel Kroening Philipp Rümmer Georg Weissenbacher Oxford University Computing Laboratory. ITP Workshop MSR Cambridge 25 August 2009

Interpolation-based Software Verification with Wolverine

Applications of Logic in Software Engineering. CS402, Spring 2016 Shin Yoo

Decision Procedures. An Algorithmic Point of View. Bit-Vectors. D. Kroening O. Strichman. Version 1.0, ETH/Technion

DSVerifier: A Bounded Model Checking Tool for Digital Systems

COMP2611: Computer Organization. Data Representation

GNATprove a Spark2014 verifying compiler Florian Schanda, Altran UK

Model Checking Software Programs with. First Order Logic Specifications using AIG Solvers

The Low-Level Bounded Model Checker LLBMC

Bounded Model Checking of C++ Programs based on the Qt Cross-Platform Framework (Journal-First Abstract)

Introduction. Preliminaries. Original IC3. Tree-IC3. IC3 on Control Flow Automata. Conclusion

F-Soft: Software Verification Platform

VS 3 : SMT Solvers for Program Verification

JBMC: A Bounded Model Checking Tool for Verifying Java Bytecode. Lucas Cordeiro Pascal Kesseli Daniel Kroening Peter Schrammel Marek Trtik

Bounded Model Checking with Parametric Data Structures

URBiVA: Uniform Reduction to Bit-Vector Arithmetic

Improving Coq Propositional Reasoning Using a Lazy CNF Conversion

King s Research Portal

Incremental Proof Development in Dafny

Constraint-Based Search Strategies For Bounded Program Verification. Michel RUEHER

The SMT-LIB 2 Standard: Overview and Proposed New Theories

PySMT: a Solver-Agnostic Library for Fast Prototyping of SMT-Based Algorithms

Lecture 2: Symbolic Model Checking With SAT

Motivation. CS389L: Automated Logical Reasoning. Lecture 17: SMT Solvers and the DPPL(T ) Framework. SMT solvers. The Basic Idea.

Counterexample Guided Inductive Optimization Applied to Mobile Robot Path Planning SBR/LARS 2017

Verifying Multithreaded Software with Impact

Quantifying Information Leaks in Software

Application of Propositional Logic II - How to Test/Verify my C program? Moonzoo Kim

PLDI 2016 Tutorial Automata-Based String Analysis

On Computing Minimum Size Prime Implicants

Yices 1.0: An Efficient SMT Solver

Automated Test Generation using CBMC

Applying Multi-Core Model Checking to Hardware- Software Partitioning in Embedded Systems (extended version)

SAT Solvers. Ranjit Jhala, UC San Diego. April 9, 2013

Symbolic Execu.on. Suman Jana

A Case Study on Model Checking and Deductive Verification Techniques of Safety-Critical Software

SAT-based Model Checking for C programs

Finding and Fixing Bugs in Liquid Haskell. Anish Tondwalkar

Formally Certified Satisfiability Solving

Efficiently Solving Bit-Vector Problems Using Model Checkers

Lecture 12 Integers. Computer and Network Security 19th of December Computer Science and Engineering Department

Decision Procedures. An Algorithmic Point of View. Decision Procedures for Propositional Logic. D. Kroening O. Strichman.

Model-Based Diagnosis versus Error Explanation

Formalization of Incremental Simplex Algorithm by Stepwise Refinement

Exploring Abstraction Techniques for Scalable Bit-Precise Verification of Embedded Software

HECTOR: Formal System-Level to RTL Equivalence Checking

Symbolic Execution. Wei Le April

arxiv: v2 [cs.pl] 3 Apr 2018

COUNTEREXAMPLE-GUIDED MODEL SYNTHESIS

n HW7 due in about ten days n HW8 will be optional n No CLASS or office hours on Tuesday n I will catch up on grading next week!

Inf2C - Computer Systems Lecture 2 Data Representation

Generating Small Countermodels. Andrew Reynolds Intel August 30, 2012

Evaluation of SAT like Proof Techniques for Formal Verification of Word Level Circuits

LEARNING TO INSTANTIATE QUANTIFIERS

Alive: Provably Correct InstCombine Optimizations

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Error Explanation with Distance Metrics

Transcription:

SMT-Based Bounded Model Checking for Embedded ANSI-C Software Lucas Cordeiro, Bernd Fischer, Joao Marques-Silva b.fischer@ecs.soton.ac.uk

Bounded Model Checking (BMC) Basic Idea: check negation of given property up to given depth transition system ϕ ϕ 1 ϕ 2 ϕ k-1 ϕ k... M M 1 M 2 M k-1 M k counterexample trace property bound transition system M unrolled k times for programs: unroll loops, unfold arrays, translated into verification condition ψ such that ψ satisfiable iff ϕ has counterexample of max. depth k has been applied successfully to verify (embedded) software

SAT-based CBMC [D. Kroening] implements BMC for ANSI-C/C++ programs using SAT-solvers: C/C++ source scan and parse parse tree typecheck and convert to SSA IRep tree properties BMC unroll program k times verification conditions check satisfiability using a SAT solver SAT solver

SAT-based CBMC [D. Kroening] implements BMC for ANSI-C/C++ programs using SAT-solvers: C/C++ source scan and parse parse tree typecheck and convert to SSA IRep tree properties Problems (due to bit-blasting): BMC unroll program k times verification conditions SAT solver complex expressions lead to large propositional formulae high-level information is lost check satisfiability using a SAT solver conversion to propositional form Encoding of x == a + b represent x, a, b by n independent propositional variables each represent addition by logical circuit represent equality by equivalences on propositional variables

Objective of this work Exploit SMT to improve BMC of embedded software exploit background theories of SMT solvers provide suitable encodings for pointers bit operations unions arithmetic over- and underflow build an SMT-based BMC tool for full ANSI-C build on top of CBMC front-end use several third-party SMT solvers as back-ends evaluate ESBMC over embedded software applications

Satisfiability Modulo Theories (1) SMT decides the satisfiability of first-order logic formulae using the combination of different background theories ( building-in operators). Theory Example Equality x 1 =x 2 (x 1 =x 3 ) (x 1 =x 3 ) Bit-vectors (b >> i) & 1 = 1 Linear arithmetic (4y 1 + 3y 2 4) (y 2 3y 3 3) Arrays (j = k a[k]=2) a[j]=2 Combined theories (j k a[j]=2) a[i] < 3

Satisfiability Modulo Theories (2) Given a decidable -theory T a quantifier-free formula ϕ ϕ is T-satisfiable iff T {ϕ} is satisfiable, i.e., there exists a structure that satisfies both formula and sentences of T Given a set Γ {ϕ} of first-order formulae over T ϕ is a T-consequence of Γ (Γ T ϕ) iff every model of T Γ is also a model of ϕ Checking Γ T ϕ can be reduced in the usual way to checking the T-satisfiability of Γ { ϕ}

Software BMC using ESBMC program modelled as state transition system state: program counter and program variables derived from control-flow graph checked safety properties give extra nodes program unrolled up to given bounds number of loop iterations size of arrays unrolled program optimized to reduce blow-up constant folding forward substitutions crucial int main() { int a[2], i, x; if (x==) a[i]=; else a[i+2]=1; assert(a[i+1]==1); }

Software BMC using ESBMC program modelled as state transition system state: program counter and program variables derived from control-flow graph checked safety properties give extra nodes program unrolled up to given bounds number of loop iterations size of arrays unrolled program optimized to reduce blow-up constant folding forward substitutions crucial front-end converts unrolled and optimized program into SSA int main() { int a[2], i, x; if (x==) a[i]=; else a[i+2]=1; assert(a[i+1]==1); } g 1 = x 1 == a 1 = a WITH [i :=] a 2 = a a 3 = a 2 WITH [2+i :=1] a 4 = g 1? a 1 : a 3 t 1 = a 4 [1+i ] == 1

Software BMC using ESBMC program modelled as state transition system state: program counter and program variables derived from control-flow graph checked safety properties give extra nodes program unrolled up to given bounds number of loop iterations size of arrays unrolled program optimized to reduce blow-up constant folding forward substitutions crucial front-end converts unrolled and optimized program into SSA extraction of constraints C and properties P specific to selected SMT solver, uses theories satisfiability check of C P int main() { int a[2], i, x; if (x==) a[i]=; else a[i+2]=1; assert(a[i+1]==1); } ( x1 = ) = store( a, i,) g1 : = a1 : C : = a2 : = a a3 : = store 2 a4 : = ite( g1, a1, a3) ( a,2 + i,1) i i < 2 2 + i 2 + i < 2 P : = 1+ i 1+ < 2 i select( a4, i + 1) = 1

Encoding of Numeric Types SMT solvers typically provide different encodings for numbers: abstract domains (Z, R) fixed-width bit vectors (unsigned int, ) > internalized bit-blasting verification results can depend on encodings (a > ) (b > ) (a + b > ) valid in abstract domains such as Z or R majority of VCs solved faster if numeric types are modelled by abstract domains but possible loss of precision ESBMC supports both encodings doesn t hold for bitvectors, due to possible overflows

Encoding Numeric Types as Bitvectors Bitvector encodings need to handle type casts and implicit conversions arithmetic conversions implemented using word-level functions (part of the bitvector theory: extractbits, ) > different conversions for every pair of types > uses type information provided by front-end conversion to / from bool via if-then-else operator arithmetic over- / underflow standard requires modulo-arithmetic for unsigned integers define error literals to detect over- / underflow for other types res_ok overflow(x, y) underflow(x, y) > similar to conversions floating-point numbers approximated by fixed-point numbers, integral part only represented by fixed-width bitvector

Encoding of Structured Datatypes arrays and records / tuples typically handled directly by SMT-solver pointers modelled as tuples p.o representation of underlying object p.i index (if pointer used as array base) Store object at position int main() { int a[2], i, x, *p; p=a; if (x==) a[i]=; else a[i+1]=1; assert(*(p+2)==1); } C:= p 1 := store(p,, &a[]) p 2 := store(p 1, 1, ) g 2 := (x 2 == ) a 1 := store(a, i, ) a 2 := a a 3 := store(a 2, 1+ i, 1) Update index Store index at position 1 a 4 := ite(g 1, a 1, a 3 ) p 3 := store(p 2, 1, select(p 2, 1)+2)

Encoding of Structured Datatypes arrays and records / tuples typically handled directly by SMT-solver pointers modelled as tuples p.o representation of underlying object p.i index (if pointer used as array base) int main() { int a[2], i, x, *p; p=a; if (x==) a[i]=; else a[i+1]=1; assert(*(p+2)==1); } P:= i i < 2 1+ i 1+ i < 2 select(p 3, ) == &a[] select(select(p 3, ), negation satisfiable (a[2] unconstrained) assert fails select(p 3, 1)) == 1

Evaluation

Comparison of SMT solvers Goal: compare efficiency of different SMT-solvers CVC3 (1.5) Boolector (1.) Z3 (2.) Set-up: identical ESBMC front-end, individual back-ends operations not supported by SMT-solvers are axiomatized standard desktop PC, time-out 36 seconds

Comparison of SMT solvers Module #L #P BubbleSort lines of code (n=35) (n=14) SelectionSort (n=35) (n=14) 43 43 34 34 17 17 17 17 CVC3 Boolector Z3 Time Error Time Error Time Error 28.3 number of 1.9 properties MO checked 1 182.7 8.5.8 MO 1 74.6 2 163.2.8 74.4 InsertionSort (n=35) 86 17 35.6 2.4 2.5 (n=14) 86 17 MO 1 TO 1 143 Prim 79 3 16.9.5.5 size of arrays StrCmp 14 6 9.9 91.2 38.8 MinMax 19 9 MO 1 947.6 6.2 lms 258 23 111.9 138.7 138.6 Bitwise 18 1 272.4 7.5 28.4 adpcm_encode adpcm_decode 149 111 12 1 211.8 43.8 738.9 2.2 5.5 14.3

Comparison of SMT solvers Module #L #P BubbleSort (n=35) (n=14) 43 43 17 17 CVC3 Boolector Z3 Time Error Time Error Time Error 28.3 MO 1 1.9 182.7 2 163.2 SelectionSort (n=35) (n=14) 34 17 34 17 8.5 MO 1.8 74.6.8 74.4 All SMT-solvers can InsertionSort (n=35) 86 35.6 2.4 2.5 handle (n=14) 86 17the VCs MO from 1the TO 1 143 embedded applications Prim 79 3 16.9.5.5 StrCmp 14 6 9.9 91.2 38.8 MinMax 19 9 MO 1 947.6 6.2 lms 258 23 111.9 138.7 138.6 Bitwise 18 1 272.4 7.5 28.4 adpcm_encode adpcm_decode 149 111 12 1 211.8 43.8 738.9 2.2 5.5 14.3

Comparison of SMT solvers Module #L #P BubbleSort (n=35) (n=14) SelectionSort (n=35) (n=14) 43 43 34 34 17 17 17 17 CVC3 Boolector Z3 Time Error Time Error Time Error CVC3 doesn t scale 28.3 1.9 2 MO 1 182.7 that well and runs 163.2 out of memory 8.5.8.8 MO 1 74.6 74.4 InsertionSort (n=35) 86 17 35.6 2.4 2.5 (n=14) 86 17 MO 1 TO 1 143 Prim 79 3 16.9.5.5 StrCmp 14 6 9.9 91.2 38.8 MinMax 19 9 MO 1 947.6 6.2 lms 258 23 111.9 138.7 138.6 Bitwise 18 1 272.4 7.5 28.4 adpcm_encode adpcm_decode 149 111 12 1 211.8 43.8 738.9 2.2 5.5 14.3

Comparison of SMT solvers Module #L #P BubbleSort (n=35) 43 17 28.3 (n=14) Boolector 43 17and Z3 MOroughly 1 comparable, with some SelectionSort (n=35) 34 17 8.5 advantages (n=14) 34 17 for MO Z3 1 CVC3 Boolector Z3 Time Error Time Error Time Error 1.9 182.7.8 74.6 2 163.2.8 74.4 InsertionSort (n=35) 86 17 35.6 2.4 2.5 (n=14) 86 17 MO 1 TO 1 143 Prim 79 3 16.9.5.5 StrCmp 14 6 9.9 91.2 38.8 MinMax 19 9 MO 1 947.6 6.2 lms 258 23 111.9 138.7 138.6 Bitwise 18 1 272.4 7.5 28.4 adpcm_encode adpcm_decode 149 111 12 1 211.8 43.8 738.9 2.2 5.5 14.3

Comparison of SMT solvers Goal: compare efficiency of different SMT-solvers CVC3 (1.5) Boolector (1.) Z3 (2.) Set-up: identical ESBMC front-end, individual back-ends unsupported operations axiomatized standard desktop PC, time-out 36 seconds SMT-solver of choice: Z3 best coverage of domain overall fastest

Comparison to SMT-CBMC [A. Armando et al.] SMT-based BMC for C, built on top of CVC3 (hard-coded) limited coverage of language Goal: compare efficiency of encodings Module ESBMC SMT-CBMC Z3 CVC3 CVC3 BubbleSort (n=35) 2. 28.7 94.5 (n=14) 163.1 MO * SelectionSort (n=35) (n=14).8 74.4 8.5 MO 66.5 MO BellmanFord.3.5 13.6 Prim.5 16.9 18.4 StrCmp 38.8 9.9 TO SumArray 4.7 1.2 113.8 MinMax 6.2 MO MO

Comparison to SMT-CBMC [A. Armando et al.] SMT-based BMC for C, built on top of CVC3 (hard-coded) limited coverage of language Goal: compare efficiency of encodings Module All benchmarks taken from SMT-CBMC suite ESBMC SMT-CBMC Z3 CVC3 CVC3 BubbleSort (n=35) 2. 28.7 94.5 (n=14) 163.1 MO * SelectionSort (n=35) (n=14).8 74.4 8.5 MO 66.5 MO BellmanFord.3.5 13.6 Prim.5 16.9 18.4 StrCmp 38.8 9.9 TO SumArray 4.7 1.2 113.8 MinMax 6.2 MO MO

Comparison to SMT-CBMC [A. Armando et al.] SMT-based BMC for C, built on top of CVC3 (hard-coded) limited coverage of language Goal: compare efficiency of encodings Module ESBMC SMT-CBMC Z3 CVC3 CVC3 BubbleSort (n=35) 2. 28.7 94.5 (n=14) ESBMC substantially faster, 163.1 MO * even SelectionSort with identical (n=35) solvers.8 probably better (n=14) encoding 74.4 8.5 MO 66.5 MO BellmanFord.3.5 13.6 Prim.5 16.9 18.4 StrCmp 38.8 9.9 TO SumArray 4.7 1.2 113.8 MinMax 6.2 MO MO

Comparison to SMT-CBMC [A. Armando et al.] SMT-based BMC for C, built on top of CVC3 (hard-coded) limited coverage of language Goal: compare efficiency of encodings Module ESBMC SMT-CBMC Z3 CVC3 CVC3 BubbleSort (n=35) 2. 28.7 94.5 (n=14) 163.1 MO * Z3 not uniformly SelectionSort (n=35).8 8.5 66.5 (n=14) 74.4 MO better than MO CVC3 BellmanFord.3.5 13.6 Prim.5 16.9 18.4 StrCmp 38.8 9.9 TO SumArray 4.7 1.2 113.8 MinMax 6.2 MO MO

Comparison to SAT-CBMC [D. Kroening] SAT-based BMC for full ANSI-C not recent SMT-based version mature tool (V 2.9) front-end and overall structure shared with ESBMC Goal: compare efficiency of SAT vs. SMT on identical verification problems

Comparison to SAT-CBMC [D. Kroening] encoding time SAT-CBMC SMT / SAT solver time ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO - 35 132.6.2 error detected in module GOOD THING error occurred in tool BAD THING ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13. 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Comparison to SAT-CBMC [D. Kroening] encoding time SAT-CBMC ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO MO 35 132.6.2 error detected in module GOOD THING SMT / SAT solver time error occurred in tool BAD THING ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 all embedded systems applicatons exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Comparison to SAT-CBMC [D. Kroening] SAT-CBMC ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO - 35 132.6.2 ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13. 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Comparison to SAT-CBMC [D. Kroening] SMT-encoding often more efficient than bit-blasting and never worse SAT-CBMC ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO - 35 132.6.2 ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13. 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Comparison to SAT-CBMC [D. Kroening] SAT-CBMC ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 SMT-solver often significantly faster than SAT-solver jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO - 35 132.6.2 ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13. 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Comparison to SAT-CBMC [D. Kroening] SAT-CBMC ESBMC Time #P Time #P Module #L #P Enc. Solver Fail Error Enc. Solver Fail Error fft1 218 72.4 <.1.4 <.1 fft1k 155 39 MO - 39 2337.8 <.1 SMT-solver often significantly faster than SAT-solver, but not always SMT good on multiple theories jfdctint 374 331 1.2 <.1 1.5 2.4 1 lms 258 35 MO - 35 132.6.2 ludcmp 144 88 4.5 TO 1 <.1 1.44 qurt 164 8 18.8 TO 1 1.2 7.7 pocsag 521 183 15.3.1 1 12.3 5.8 1 adpcm 473 553 74.3 3.5 45.7 9.2 laplace 11 76 3.8 TO 76 12.3.3 exstbkey 558 18 1.2 <.1 1.2 <.1 exstbhdmi 145 25 167.9 78.9 164.4 33.5 exstbled 43 6 195.9 13. 165.6 44.5 exstbhwacc 1432 113.7 <.1.7 <.1 exstbres 353 4 271.8 319. 269.3 1161.

Conclusions SMT-based BMC is more efficient than SAT-based BMC but not uniformly described and evaluated first SMT-based BMC for ANSI-C provided encodings for typical ANSI-C constructs not directly supported by SMT-solvers available at users.ecs.soton.ac.uk/lcc8r/esbmc/ Future work: better handling of floating-point numbers concurrency (based on Pthread library) termination analysis