diff options
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | c_emulator/riscv_sim.c | 12 |
2 files changed, 19 insertions, 1 deletions
@@ -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(); } |