Development of a Translator from LLVM to ACL2

In our current work a library of formally verified software components is to be created, and assembled, using the Low-Level Virtual Machine (LLVM) intermediate form, into subsystems whose top-level assurance relies on the assurance of the individual components. We have thus undertaken a project to...

Full description

Bibliographic Details
Main Authors: David S. Hardin, Jennifer A. Davis, David A. Greve, Jedidiah R. McClurg
Format: Article
Language:English
Published: Open Publishing Association 2014-06-01
Series:Electronic Proceedings in Theoretical Computer Science
Online Access:http://arxiv.org/pdf/1406.1566v1
id doaj-e0fbd289923e4c7e9ce6705c32523c0e
record_format Article
spelling doaj-e0fbd289923e4c7e9ce6705c32523c0e2020-11-24T21:02:57ZengOpen Publishing AssociationElectronic Proceedings in Theoretical Computer Science2075-21802014-06-01152Proc. ACL2 201416317710.4204/EPTCS.152.13:11Development of a Translator from LLVM to ACL2David S. Hardin0Jennifer A. Davis1David A. Greve2Jedidiah R. McClurg3 Rockwell Collins Rockwell Collins Rockwell Collins University of Colorado In our current work a library of formally verified software components is to be created, and assembled, using the Low-Level Virtual Machine (LLVM) intermediate form, into subsystems whose top-level assurance relies on the assurance of the individual components. We have thus undertaken a project to build a translator from LLVM to the applicative subset of Common Lisp accepted by the ACL2 theorem prover. Our translator produces executable ACL2 formal models, allowing us to both prove theorems about the translated models as well as validate those models by testing. The resulting models can be translated and certified without user intervention, even for code with loops, thanks to the use of the def::ung macro which allows us to defer the question of termination. Initial measurements of concrete execution for translated LLVM functions indicate that performance is nearly 2.4 million LLVM instructions per second on a typical laptop computer. In this paper we overview the translation process and illustrate the translator's capabilities by way of a concrete example, including both a functional correctness theorem as well as a validation test for that example.http://arxiv.org/pdf/1406.1566v1
collection DOAJ
language English
format Article
sources DOAJ
author David S. Hardin
Jennifer A. Davis
David A. Greve
Jedidiah R. McClurg
spellingShingle David S. Hardin
Jennifer A. Davis
David A. Greve
Jedidiah R. McClurg
Development of a Translator from LLVM to ACL2
Electronic Proceedings in Theoretical Computer Science
author_facet David S. Hardin
Jennifer A. Davis
David A. Greve
Jedidiah R. McClurg
author_sort David S. Hardin
title Development of a Translator from LLVM to ACL2
title_short Development of a Translator from LLVM to ACL2
title_full Development of a Translator from LLVM to ACL2
title_fullStr Development of a Translator from LLVM to ACL2
title_full_unstemmed Development of a Translator from LLVM to ACL2
title_sort development of a translator from llvm to acl2
publisher Open Publishing Association
series Electronic Proceedings in Theoretical Computer Science
issn 2075-2180
publishDate 2014-06-01
description In our current work a library of formally verified software components is to be created, and assembled, using the Low-Level Virtual Machine (LLVM) intermediate form, into subsystems whose top-level assurance relies on the assurance of the individual components. We have thus undertaken a project to build a translator from LLVM to the applicative subset of Common Lisp accepted by the ACL2 theorem prover. Our translator produces executable ACL2 formal models, allowing us to both prove theorems about the translated models as well as validate those models by testing. The resulting models can be translated and certified without user intervention, even for code with loops, thanks to the use of the def::ung macro which allows us to defer the question of termination. Initial measurements of concrete execution for translated LLVM functions indicate that performance is nearly 2.4 million LLVM instructions per second on a typical laptop computer. In this paper we overview the translation process and illustrate the translator's capabilities by way of a concrete example, including both a functional correctness theorem as well as a validation test for that example.
url http://arxiv.org/pdf/1406.1566v1
work_keys_str_mv AT davidshardin developmentofatranslatorfromllvmtoacl2
AT jenniferadavis developmentofatranslatorfromllvmtoacl2
AT davidagreve developmentofatranslatorfromllvmtoacl2
AT jedidiahrmcclurg developmentofatranslatorfromllvmtoacl2
_version_ 1716774772311851008