aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--c_emulator/riscv_sim.c12
2 files changed, 19 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 8167ec9..0389ec6 100644
--- a/Makefile
+++ b/Makefile
@@ -146,6 +146,12 @@ else
C_FLAGS += -O3 -flto
endif
+ifneq (,$(SAILCOV))
+C_FLAGS += -DSAILCOV
+SAIL_FLAGS += -c_coverage -c_include sail_coverage.h
+C_LIBS += $(SAIL_LIB_DIR)/coverage/libsail_coverage.a -lpthread -ldl
+endif
+
RISCV_EXTRAS_LEM_FILES = riscv_extras.lem mem_metadata.lem riscv_extras_fdext.lem
# Feature detect if we are on the latest development version of Sail
# and use an updated lem file if so. This is just until the opam
@@ -218,7 +224,7 @@ ocaml_emulator/tracecmp: ocaml_emulator/tracecmp.ml
generated_definitions/c/riscv_model_$(ARCH).c: $(SAIL_SRCS) model/main.sail Makefile
mkdir -p generated_definitions/c
- $(SAIL) $(SAIL_FLAGS) -O -Oconstant_fold -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h -c_no_main $(SAIL_SRCS) model/main.sail -o $(basename $@)
+ $(SAIL) $(SAIL_FLAGS) -O -Oconstant_fold -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h -c_no_main $(SAIL_SRCS) model/main.sail -o $(basename $@) > generated_definitions/c/all_branches
generated_definitions/c2/riscv_model_$(ARCH).c: $(SAIL_SRCS) model/main.sail Makefile
mkdir -p generated_definitions/c2
diff --git a/c_emulator/riscv_sim.c b/c_emulator/riscv_sim.c
index ebd3b9d..4d6a4c0 100644
--- a/c_emulator/riscv_sim.c
+++ b/c_emulator/riscv_sim.c
@@ -14,6 +14,7 @@
#include "elf.h"
#include "sail.h"
#include "rts.h"
+#include "sail_coverage.h"
#include "riscv_platform.h"
#include "riscv_platform_impl.h"
#include "riscv_sail.h"
@@ -551,6 +552,15 @@ void write_signature(const char *file)
fclose(f);
}
+void close_logs(void) {
+#ifdef SAILCOV
+ if (sail_coverage_exit() != 0) {
+ fprintf(stderr, "Could not write coverage information!\n");
+ exit(EXIT_FAILURE);
+ }
+#endif
+}
+
void finish(int ec)
{
if (sig_file) write_signature(sig_file);
@@ -572,6 +582,7 @@ void finish(int ec)
fprintf(stderr, "Instructions: %d\n", total_insns);
fprintf(stderr, "Perf: %.3f Kips\n", Kips);
}
+ close_logs();
exit(ec);
}
@@ -903,4 +914,5 @@ int main(int argc, char **argv)
#endif
model_fini();
flush_logs();
+ close_logs();
}