blob: 68ab0924ad86a71482025304dd5183dd84a44e74 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
sailcov
=======
sailcov is a simple branch coverage visualiser for sail specifications.
### Usage
First, compile your model to c using the `-c_coverage` flag and
including the [sail_coverage.h](../lib/sail_coverage.h) header via
the `-c_include sail_coverage.h` flag. Currently the `-c_coverage`
option will print information about possible branches and function
calls to stdout, which will be needed later, so redirect this to a
file called `all_branches`, i.e.
```
sail -c -c_coverage -c_include sail_coverage.h my_model.sail -o my_model > all_branches
```
Next we need to link implementations of the coverage tracking
functions into the generated C. This done by using the static library
in [lib/coverage/](../lib/coverage/). Currently this is written in Rust
for want of an obvious hashset implementation in C and can be built
using `cargo build --release` which will produce a `libsail_coverage.a`
static library. Once this is done, we can link this into our C
emulator by passing `$SAIL_DIR/lib/coverage/libsail_coverage.a
-lpthread -ldl` to gcc, where SAIL_DIR is the location of this
repository.
Finally, when we run our model it will append coverage information
into a file called `sail_coverage`. The tool in this directory can
compare that with the data contained in the `all_branches` file
described above and produce an html coverage report for each file in
the specification. For example:
```
sailcov -a all_branches -t sail_coverage my_model.sail
```
which produces a `my_model.html` file. Multiple sail files can be
passed to the tool, and it will produce html for each
individually. See [riscv_vmem_sv39.html](https://alasdair.github.io/riscv_vmem_sv39.html) for an
example of the output.
|