Team Pop Art

Members
Overall Objectives
Scientific Foundations
Application Domains
Software
New Results
Contracts and Grants with Industry
Other Grants and Activities
Dissemination
Bibliography

Section: Software

Apron and BDDApron Libraries

Participant : Bertrand Jeannet.

Principles

The Apron library(http://apron.cri.ensmp.fr/library/ ) is dedicated to the static analysis of the numerical variables of a program by abstract interpretation [44] . Many abstract domains have been designed and implemented for analysing the possible values of numerical variables during the execution of a program (see Figure 1 ). However, their API diverge largely (datatypes, signatures, ...), and that does not facilitate their diffusion and experimental comparison w.r.t. efficiency and precision aspects.

The Apron library aims to provide:

From an abstract domain implementor point of view, the benefits of the Apron library are:

For the client static analysis community, the benefits are a unified, higher-level interface, that allows experimenting, comparing, and combining abstract domains.

In 2010, the Taylor1plus domain [52] , which is the underlying abstract domain of the tool Fluctuat [50] has been integrated in APRON.

Figure 1. Typical static analyser and examples of abstract domains
IMG/bertrand1

The BDDApron library(http://pop-art.inrialpes.fr/~bjeannet/bjeannet-forge/bddapron/index.html ) aims at a similar goal, by adding finite-types variables and expressions to the concrete semantics of Apron domains. It is built upon the Apron library and provides abstract domains for the combination of finite-type variables (booleans, enumerated types, n -bits integers) and numerical variables (integers, rationals, floating-point numbers). It first allows to manipulate expressions that freely mix, using BDDs and MTBDDs, finite-type and numerical Apron expressions and conditions. It then provides abstract domains that combines BDDs and Apron abstract values for representing invariants holding on both finite-type variables and numerical variables.

Implementation and Distribution

The Apron library (Fig. 2 ) is written in ANSI C, with an object-oriented and thread-safe design. Both multi-precision and floating-point numbers are supported. A wrapper for the Ocaml language is available, and a C++ wrapper is on the way. It is distributed since June 2006 under the LGPL license and available at http://apron.cri.ensmp.fr . Its development has still progressed much since. There are already many external users (ProVal/Démons, LRI Orsay, France — CEA-LIST, Saclay, France — Analysis of Computer Systems Group, New-York University, USA — Sierum software analysis platform, Kansas State University, USA — NEC Labs, Princeton, USA — EADS CCR, Paris, France — IRIT, Toulouse, France) and it is being packaged as a Redhat and Debian package.

The BDDApron library is written in Ocaml , using polymorphism features of Ocaml to make it generic. It is also thread-safe. It provides two different implementations of the same domain, each one presenting pros and cons depending on the application. It is currently used by the ConcurInterproc interprocedural and concurrent program analyzer.

Figure 2. Organisation of the Apron library
IMG/bertrand2

previous
next

Logo Inria