diff --git a/FreeRTOS/Test/CMock/testdir.mk b/FreeRTOS/Test/CMock/testdir.mk
index e832de60b8..5ebc8fdcbe 100644
--- a/FreeRTOS/Test/CMock/testdir.mk
+++ b/FreeRTOS/Test/CMock/testdir.mk
@@ -54,6 +54,8 @@ DEPS_OBJ_LIST   :=  $(addprefix $(SCRATCH_DIR)/dep_,$(PROJECT_DEPS_SRC:.c=.o))
 EXECS           :=  $(addprefix $(EXEC_PREFIX)_,$(SUITE_UT_SRC:.c=))
 EXEC_LIST       :=  $(addprefix $(BIN_DIR)/,$(EXECS))
 LCOV_LIST       :=  $(addsuffix .info,$(addprefix $(SCRATCH_DIR)/,$(SUITE_UT_SRC:.c=)))
+COVINFO_INITIAL :=  $(SCRATCH_DIR)/$(EXEC_PREFIX)_initial.info
+COVINFO_COMBINE :=  $(SCRATCH_DIR)/$(EXEC_PREFIX)_combined.info
 COVINFO         :=  $(abspath $(SCRATCH_DIR)/..)/$(EXEC_PREFIX).info
 LIBS_LIST       :=  $(foreach lib, $(LIBS), $(LIB_DIR)/$(lib).so)
 
@@ -171,6 +173,10 @@ $(EXEC_LIST) : $(BIN_DIR)/$(EXEC_PREFIX)_%_utest : $(SCRATCH_DIR)/%_utest.o
     $(CC) $< $(subst .o,_runner.o,$<) $(SF_OBJ_LIST) $(DEPS_OBJ_LIST) \
         $(MOCK_OBJ_LIST) $(PROJ_OBJ_LIST) $(LDFLAGS) -o $@
 
+# Generate baseline inital coverage data from .gcno file
+$(SCRATCH_DIR)/$(EXEC_PREFIX)_initial.info : $(PROJ_OBJ_LIST)
+    lcov $(LCOV_OPTS) --capture --initial --directory $(PROJ_DIR) -o $@
+
 # Run the test runner and genrate a filtered gcov.json.gz file
 $(SCRATCH_DIR)/%_utest.info : $(BIN_DIR)/$(EXEC_PREFIX)_%_utest \
                               $(PROJ_DIR)/callgraph.json
@@ -197,5 +203,9 @@ $(SCRATCH_DIR)/%_utest.info : $(BIN_DIR)/$(EXEC_PREFIX)_%_utest \
     rm -f $(PROJ_GCDA_LIST)
 
 # Combine lcov from each test bin into one lcov info file for the suite
-$(COVINFO) : $(LCOV_LIST)
-    lcov $(LCOV_OPTS) -q -o $@ $(foreach cov,$(LCOV_LIST),--add-tracefile $(cov) )
+$(COVINFO_COMBINE) : $(LCOV_LIST)
+    lcov $(LCOV_OPTS) -o $@ $(foreach cov,$(LCOV_LIST),--add-tracefile $(cov) )
+
+# Add baseline / initial coverage generated by gcc to point out untagged functions
+$(COVINFO) : $(COVINFO_COMBINE) $(COVINFO_INITIAL)
+    lcov $(LCOV_OPTS) -o $@ --add-tracefile $(COVINFO_INITIAL) --add-tracefile $(COVINFO_COMBINE)