diff -r c6107b4575a4 src/Makefile
--- a/src/Makefile	Thu Feb 14 22:19:51 2013 +0100
+++ b/src/Makefile	Fri Feb 15 11:27:00 2013 +0800
@@ -2303,7 +2303,7 @@
 
 # Clean up all the files that have been produced, except configure's.
 # We support common typing mistakes for Juergen! :-)
-clean celan: testclean
+clean celan: testclean gcov-clean
 	-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
 	-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
 	-rm -f conftest* *~ auto/link.sed
@@ -2781,6 +2781,25 @@
 	-$(SHELL) ./mkinstalldirs $(APPDIR)/Contents/MacOS
 	-$(SHELL) ./mkinstalldirs $(RESDIR)/English.lproj
 
+GCOV = gcov
+GCOV_FLAGS = --preserve-paths --branch-probabilities --all-blocks
+GCOV_CFLAGS = -O0 -fprofile-arcs -ftest-coverage
+GCOV_LDFLAGS = -fprofile-arcs -lgcov
+LCOV_REPORT_DIR = lcov-report
+gcov: clean
+	$(MAKE) gcov-test; \
+	$(MAKE) lcov-report; \
+	$(MAKE) gcov-report
+gcov-test:
+	$(MAKE) CFLAGS="$(GCOV_CFLAGS)" LDFLAGS="$(GCOV_LDFLAGS)" test
+.PHONY: lcov-report
+lcov-report:
+	geninfo -b . .
+	genhtml objects/*.gcda.info -o $(LCOV_REPORT_DIR)
+gcov-report:
+	for f in *.c; do gcov $(GCOV_FLAGS) -o objects $$f; done
+gcov-clean:
+	-rm -rf *.gcov objects/*.gcda objects/*.gcda.info $(LCOV_REPORT_DIR)
 
 ###############################################################################
 ### (automatically generated by 'make depend')
