package frama-c
Install
Dune Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
NNicolas Bellec
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
VVincent Botbol
-
QQuentin Bouillaguet
-
DDavid Bühler
-
ZZakaria Chihani
-
SSylvain Chiron
-
LLoïc Correnson
-
JJulien Crétin
-
PPascal Cuoq
-
ZZaynah Dargaye
-
BBasile Desloges
-
JJean-Christophe Filliâtre
-
PPhilippe Herrmann
-
MMaxime Jacquemin
-
BBenjamin Jorge
-
FFlorent Kirchner
-
AAlexander Kogtenkov
-
RRemi Lazarini
-
TTristan Le Gall
-
KKilyan Le Gallic
-
JJean-Christophe Léchenet
-
MMatthieu Lemerre
-
DDara Ly
-
DDavid Maison
-
CClaude Marché
-
AAndré Maroneze
-
TThibault Martin
-
FFonenantsoa Maurica
-
MMelody Méaulle
-
BBenjamin Monate
-
YYannick Moy
-
PPierre Nigron
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
JJan Rochel
-
MMuriel Roger
-
CCécile Ruet-Cros
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=095ffbb3086a6cd963a03e3defab4f0dc32e9a43f026e552ec9ae346a6e20522
doc/frama-c-wp.core/Wp/Sigma/index.html
Module Wp.Sigma
Source
Memory Environments.
The concrete memory is partionned into a vector of abstract data. Each component of the partition is called a memory chunk and holds an abstract representation of some part of the memory.
A sigma assigns a logical variable to each memory chunk, assigned lazily, that represents the contents of this slice of memory at a given program point.
Remark: memory chunks are not required to be independant from each other, provided the memory model implementation is consistent with the chosen representation. Conversely, a given object might be represented by several memory chunks.
Memory chunk types.
The type of chunks is extensible. Each memory model extends this type with of its own memory chunks by functor Make
.
Memory chunks at a given program point.
This is a collection of variables indexed by chunks. New chunks are generated from the context pool of Lang.freshvar
.
Chunks API
Uniform Sets and Maps of chunks.
Internal representation of chunks (chunk-kind). This type can only be extended via functor Make
.
Sigma API
Duplicate the environment. Fresh chunks in the copy are not duplicated into the source environment.
Make two environment pairwise equal via the passive form.
Missing chunks in one environment are added with the corresponding variable of the other environment. When both environments don't agree on a chunk, their variables are added to the passive form.
Make chunks equal outside of some domain.
This is similar to join
, but outside the given footprint of an assigns clause. Although, the function returns the equality predicates instead of a passive form.
Like in join
, missing chunks are reported from one side to the other one, and common chunks are added to the equality bag.
Make the union of each sigma, choosing the minimal variable in case of conflict. Both initial environments are kept unchanged.
Make the union of each sigma, choosing a new variable for each conflict, and returns the corresponding joins. Both initial environments are kept unchanged.
Same than merge
but for a list of sigmas. Much more efficient than folding merge step by step.
Iterates over the chunks and associated variables already accessed so far in the environment.
Same as iter
for both environments.
All the chunks in the provided footprint are generated and made fresh.
Existing chunk variables outside the footprint are copied into the new environment. The original environement itself is kept unchanged. More efficient than iterating havoc_chunk
over the footprint.
All the chunks are made fresh. As an optimisation, when ~call:true
is set, only non-local chunks are made fresh. Local chunks are those for which Chunk.is_frame
returns true
.
Return a copy of the environment where chunks in the footprint have been removed. Keep the original environment unchanged.
Footprint of a memory environment. That is, the set of accessed chunks so far in the environment.
writes s
indicates which chunks are new in s.post
compared to s.pre
.