Add CFLAGS_KCOV_DATAFLOW and RUSTFLAGS_KCOV_DATAFLOW exports to scripts/Makefile.kcov, containing: -fsanitize-coverage=dataflow-args,dataflow-ret -g (with optional -fno-inline via CONFIG_KCOV_DATAFLOW_NO_INLINE)
scripts/Makefile.lib applies these flags when a module's Makefile sets: KCOV_DATAFLOW_file.o := y (per-file) KCOV_DATAFLOW := y (per-directory) Also supports CONFIG_KCOV_DATAFLOW_INSTRUMENT_ALL for global enablement. The flags are only applied to kernel objects (same guard as basic KCOV). Signed-off-by: Yunseong Kim <[email protected]> --- scripts/Makefile.kcov | 6 ++++++ scripts/Makefile.lib | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/scripts/Makefile.kcov b/scripts/Makefile.kcov index 78305a84ba9d..101173fe194b 100644 --- a/scripts/Makefile.kcov +++ b/scripts/Makefile.kcov @@ -2,10 +2,16 @@ kcov-flags-y += -fsanitize-coverage=trace-pc kcov-flags-$(CONFIG_KCOV_ENABLE_COMPARISONS) += -fsanitize-coverage=trace-cmp +# KCOV dataflow: trace function args and return values +kcov-dataflow-flags-y := -fsanitize-coverage=dataflow-args,dataflow-ret -g +kcov-dataflow-flags-$(CONFIG_KCOV_DATAFLOW_NO_INLINE) += -fno-inline + kcov-rflags-y += -Cpasses=sancov-module kcov-rflags-y += -Cllvm-args=-sanitizer-coverage-level=3 kcov-rflags-y += -Cllvm-args=-sanitizer-coverage-trace-pc kcov-rflags-$(CONFIG_KCOV_ENABLE_COMPARISONS) += -Cllvm-args=-sanitizer-coverage-trace-compares export CFLAGS_KCOV := $(kcov-flags-y) +export CFLAGS_KCOV_DATAFLOW := $(kcov-dataflow-flags-y) +export RUSTFLAGS_KCOV_DATAFLOW := -Cpasses=sancov-module -Cllvm-args=-sanitizer-coverage-level=3 -Cllvm-args=-sanitizer-coverage-dataflow-args -Cllvm-args=-sanitizer-coverage-dataflow-ret -Cdebuginfo=2 export RUSTFLAGS_KCOV := $(kcov-rflags-y) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 80e127c75a93..519bf651cdcf 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -88,6 +88,13 @@ _c_flags += $(if $(patsubst n%,, \ _rust_flags += $(if $(patsubst n%,, \ $(KCOV_INSTRUMENT_$(target-stem).o)$(KCOV_INSTRUMENT)$(if $(is-kernel-object),$(CONFIG_KCOV_INSTRUMENT_ALL))), \ $(RUSTFLAGS_KCOV)) +# KCOV dataflow: per-file opt-in or global via CONFIG_KCOV_DATAFLOW_INSTRUMENT_ALL +_c_flags += $(if $(patsubst n%,, \ + $(KCOV_DATAFLOW_$(target-stem).o)$(KCOV_DATAFLOW)$(if $(is-kernel-object),$(CONFIG_KCOV_DATAFLOW_INSTRUMENT_ALL))), \ + $(CFLAGS_KCOV_DATAFLOW)) +_rust_flags += $(if $(patsubst n%,, \ + $(KCOV_DATAFLOW_$(target-stem).o)$(KCOV_DATAFLOW)$(if $(is-kernel-object),$(CONFIG_KCOV_DATAFLOW_INSTRUMENT_ALL))), \ + $(RUSTFLAGS_KCOV_DATAFLOW)) endif # -- 2.43.0

