Embedded software verification using symbolic execution and uninterpreted functions

  • Authors:
  • David Currie;Xiushan Feng;Masahiro Fujita;Alan J. Hu;Mark Kwan;Sreeranga Rajan

  • Affiliations:
  • Synopsys, Inc., Marlbaro, MA;Department of Computer Science, University of British Columbia, Vancouver, BC, Canada;University of Tokyo, Tokyo, Japan;Department of Computer Science, University of British Columbia, Vancouver, BC, Canada;Stanford University, Stanford, CA;Fujitsu Laboratories of America, Sunnyvale, CA

  • Venue:
  • International Journal of Parallel Programming
  • Year:
  • 2006

Quantified Score

Hi-index 0.00

Visualization

Abstract

Symbolic simulation and uninterpreted functions have long been staple techniques for formal hardware verification. In recent years, we have adapted these techniques for the automatic, formal verification of low-level embedded software--specifically, checking the equivalence of different versions of assembly language programs. Our approach, though limited in scalability, has proven particularly promising for the intricate code optimizations and complex architectures typical of high-performance embedded software, such as for DSPs and VLIW processors. Indeed, one of our key findings was how easy it was to create or retarget our verification tools to different, even very complex, machines. The resulting tools automatically verified or found previously unknown bugs in several small sequences of industrial and published example code. This paper provides an introduction to these techniques and a review of our results.