@@ -103,9 +103,11 @@ SAIL_ARCH_SRCS = $(PRELUDE)
103103SAIL_ARCH_SRCS += riscv_types_common.sail riscv_types_ext.sail riscv_types.sail
104104SAIL_ARCH_SRCS += riscv_vmem_types.sail $(SAIL_REGS_SRCS ) $(SAIL_SYS_SRCS ) riscv_platform.sail
105105SAIL_ARCH_SRCS += riscv_mem.sail $(SAIL_VM_SRCS )
106+ SAIL_ARCH_RVFI_SRCS = $(PRELUDE ) rvfi_dii.sail riscv_types_common.sail riscv_types_ext.sail riscv_types.sail riscv_vmem_types.sail $(SAIL_REGS_SRCS ) $(SAIL_SYS_SRCS ) riscv_platform.sail riscv_mem.sail $(SAIL_VM_SRCS ) riscv_types_kext.sail
106107SAIL_ARCH_SRCS += riscv_types_kext.sail # Shared/common code for the cryptography extension.
107108
108109SAIL_STEP_SRCS = riscv_step_common.sail riscv_step_ext.sail riscv_decode_ext.sail riscv_fetch.sail riscv_step.sail
110+ RVFI_STEP_SRCS = riscv_step_common.sail riscv_step_rvfi.sail riscv_decode_ext.sail riscv_fetch_rvfi.sail riscv_step.sail
109111
110112SAIL_OTHER_SRCS = $(SAIL_STEP_SRCS )
111113ifeq ($(ARCH ) ,RV32)
@@ -117,6 +119,7 @@ endif
117119PRELUDE_SRCS = $(addprefix model/,$(PRELUDE ) )
118120SAIL_SRCS = $(addprefix model/,$(SAIL_ARCH_SRCS ) $(SAIL_SEQ_INST_SRCS ) $(SAIL_OTHER_SRCS ) )
119121SAIL_RMEM_SRCS = $(addprefix model/,$(SAIL_ARCH_SRCS ) $(SAIL_RMEM_INST_SRCS ) $(SAIL_OTHER_SRCS ) )
122+ SAIL_RVFI_SRCS = $(addprefix model/,$(SAIL_ARCH_RVFI_SRCS ) $(SAIL_SEQ_INST_SRCS ) $(RVFI_STEP_SRCS ) )
120123SAIL_COQ_SRCS = $(addprefix model/,$(SAIL_ARCH_SRCS ) $(SAIL_SEQ_INST_SRCS ) $(SAIL_OTHER_COQ_SRCS ) )
121124
122125PLATFORM_OCAML_SRCS = $(addprefix ocaml_emulator/,platform.ml platform_impl.ml softfloat.ml riscv_ocaml_sim.ml)
@@ -271,10 +274,41 @@ $(SOFTFLOAT_LIBS):
271274csim : c_emulator/riscv_sim_$(ARCH )
272275.PHONY : osim
273276osim : ocaml_emulator/riscv_ocaml_sim_$(ARCH )
277+ .PHONY : rvfi
278+ rvfi : c_emulator/riscv_rvfi_$(ARCH )
274279
275280c_emulator/riscv_sim_$(ARCH ) : generated_definitions/c/riscv_model_$(ARCH ) .c $(C_INCS ) $(C_SRCS ) $(SOFTFLOAT_LIBS ) Makefile
276281 gcc -g $(C_WARNINGS ) $(C_FLAGS ) $< $(C_SRCS ) $(SAIL_LIB_DIR ) /* .c $(C_LIBS ) -o $@
277282
283+ # Note: We have to add -c_preserve since the functions might be optimized out otherwise
284+ rvfi_preserve_fns =-c_preserve rvfi_set_instr_packet \
285+ -c_preserve rvfi_get_cmd \
286+ -c_preserve rvfi_get_insn \
287+ -c_preserve rvfi_get_v2_trace_size \
288+ -c_preserve rvfi_get_v2_support_packet \
289+ -c_preserve rvfi_get_exec_packet_v1 \
290+ -c_preserve rvfi_get_exec_packet_v2 \
291+ -c_preserve rvfi_get_mem_data \
292+ -c_preserve rvfi_get_int_data \
293+ -c_preserve rvfi_zero_exec_packet \
294+ -c_preserve rvfi_halt_exec_packet \
295+ -c_preserve rvfi_write \
296+ -c_preserve rvfi_read \
297+ -c_preserve rvfi_wX \
298+ -c_preserve print_rvfi_exec \
299+ -c_preserve print_instr_packet \
300+ -c_preserve print_rvfi_exec
301+
302+ # sed -i isn't posix compliant, unfortunately
303+ generated_definitions/c/riscv_rvfi_model_$(ARCH ) .c : $(SAIL_RVFI_SRCS ) model/main.sail Makefile
304+ mkdir -p generated_definitions/c
305+ $(SAIL ) $(c_preserve_fns ) $(rvfi_preserve_fns ) $(SAIL_FLAGS ) -O -Oconstant_fold -memo_z3 -c -c_include riscv_prelude.h -c_include riscv_platform.h -c_no_main $(SAIL_RVFI_SRCS ) -c_include riscv_rvfi_callbacks.c model/main.sail -o $(basename $@ )
306+ sed -e ' /^[[:space:]]*$$/d' $@ > $@ .new
307+ mv $@ .new $@
308+
309+ c_emulator/riscv_rvfi_$(ARCH ) : generated_definitions/c/riscv_rvfi_model_$(ARCH ) .c $(C_INCS ) $(C_SRCS ) $(SOFTFLOAT_LIBS ) Makefile
310+ gcc -g $(C_WARNINGS ) $(C_FLAGS ) $< -DRVFI_DII $(C_SRCS ) $(SAIL_LIB_DIR ) /* .c $(C_LIBS ) -o $@
311+
278312latex : $(SAIL_SRCS ) Makefile
279313 mkdir -p generated_definitions/latex
280314 $(SAIL ) -latex -latex_prefix sail -o generated_definitions/latex $(SAIL_SRCS )
@@ -453,7 +487,7 @@ clean:
453487 -rm -rf generated_definitions/lem/* generated_definitions/isabelle/* generated_definitions/hol4/* generated_definitions/coq/*
454488 -rm -rf generated_definitions/for-rmem/*
455489 -$(MAKE ) -C $(SOFTFLOAT_LIBDIR ) clean
456- -rm -f c_emulator/riscv_sim_RV32 c_emulator/riscv_sim_RV64
490+ -rm -f c_emulator/riscv_sim_RV32 c_emulator/riscv_sim_RV64 c_emulator/riscv_rvfi_RV32 c_emulator/riscv_rvfi_RV64
457491 -rm -rf ocaml_emulator/_sbuild ocaml_emulator/_build ocaml_emulator/riscv_ocaml_sim_RV32 ocaml_emulator/riscv_ocaml_sim_RV64 ocaml_emulator/tracecmp
458492 -rm -f * .gcno * .gcda
459493 -rm -f z3_problems
0 commit comments