This program is licensed under the GPL2 license, see license headers in source code files and the full license in the LICENSE file.
This is a plugin for Frama-C. Given ab entry-point function with an ACSL contract, it infers ACSL contracts for helper functions, i.e. functions further down the call tree. Current version has been tested with Frama-C v29. Please note that the plugin is experimental and still under development so that no results are guaranteed.
This plugin requires TriCera to be installed on your system, see:
https://github.com/uuverifiers/tricera
Installation:
Register as plug-in using these commands (Ubuntu):
dune build @install && dune install
Execution:
Run the plugin on file test.c as:
frama-c -saida -saida-tricera-path <path-to-tricera> test.c
where path-to-tricera is the path to the TriCera executable (tri). If no path is
provided, the plugin will use tri
in $PATH
.
Lib-entry option:
Optionally, use the Frama-C lib-entry option to non-deterministically assign all global
variables in TriCera before analysis, e.g.:
frama-c -saida test.c -saida-tricera-path <path-to-tricera> -lib-entry
Verification option:
Use the -saida-wp option for running the -wp plugin to verify the inferred contracts and verify that the top-level
contract for the main function can be verified by relying on inferred contract, use as:
frama-c -saida -saida-tricera-path <path-to-tricera> -saida-wp test.c
The plugin is currently limited to programs/specifications following these rules:
Aside from the limitations listed above, many more limitations/bugs expected to exist.
The execution of the plugin can be summarized as:
Step 1: convert the top-level contract to a TriCera harness function
Step 2: Merge the harness function with the source code (this result is stored in tmp_harness_source_merged.c
)
Step 3: Run tricera on the result from step 2
Step 4: Merge the inferred contracts from step 3 with the source code (this result is stored in tmp_inferred_source_merged.c
)
Step 5: (optional) Run the wp plugin on the result from step 4