c4f (previously known as act
)
is a 'fuzzer' over C litmus tests of a format broadly compatible with
that produced by memalloy
and consumed by herdtools7.
It takes initial litmus tests, and performs transformations to them
that complicate their compilation while (hopefully!) preserving the
soundness of the initial test's postcondition.
Other parts of the C4 project include:
The overall c4f project, and all original code, is licenced under
the MIT licence: see LICENSE
.
The C lexer and parser are based on those from
herdtools7. We include these in
c4f under the provisos of herd's
CECILL-B
licence: see LICENSE.herd
. (This is not an
official endorsement by the Herd team of this project.)
c4f consists of two programs:
c4f
, the fuzzer itself, with commands to run the fuzzer, replay fuzzer traces,
and bisect fuzzer traces;c4f-c
, a toolset for interpreting C litmus tests and dumping them to executable C.Each command has various subcommands, including the help
command: for example,
c4f help
will tell you information about which subcommands the fuzzer has.
NOTE:
c4f uses Jane Street's core
library, which only works properly on
POSIX-style operating systems. If you're using Windows, consider
using WSL, or Cygwin, etc.
There are two main ways to build and run c4f:
opam install .
(or make install
) to install it on your machine as a pinned OPAM package;
then, if your OPAM switch is in PATH, just run the tools directly;dune exec TOOLNAME -- ...
; this will automatically build c4f
for you when needed, but won't work well with c4f's scripts, and won't
automatically install dependencies. (The --
is needed to stop dune
from
trying to parse the arguments itself.)You can also manually build c4f using dune build
, or
make
(which just calls the former).
c4f optionally accepts a configuration file listing fuzzer parameters. If
you're using c4t, it sets up the configuration itself; if not, check
c4f.conf.example
for an idea of what goes in such a file, and use -config PATH
to supply one.
To test whether c4f is installed and working, you can try:
$ git clone https://github.com/c4-project/c4-corpora /path/to/corpora
$ c4f run /path/to/corpora/partialSC/small/test_8.litmus
(or dune exec c4f -- run
, per above)
This should output some truly horrendous C to stdout. (You can
experiment with the other test_X.litmus
files in that directory,
supply your own Litmus test, or add -o path.litmus
to write to a
file.)