1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-30 23:21:08 +03:00

fic gcov use and move it into the Makefile

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
This commit is contained in:
Kay Sievers 2005-09-12 15:26:33 +02:00
parent 852cc0f58d
commit a8b38f1c44
4 changed files with 49 additions and 123 deletions

View File

@ -27,6 +27,10 @@ USE_LOG = true
# to print the debug messages to syslog) # to print the debug messages to syslog)
DEBUG = false DEBUG = false
# compile with gcc's code coverage option
# (use it with DEBUG, works only with glibc)
USE_GCOV = false
# include Security-Enhanced Linux support # include Security-Enhanced Linux support
USE_SELINUX = false USE_SELINUX = false
@ -186,6 +190,11 @@ else
STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
endif endif
ifeq ($(strip $(USE_GCOV)),true)
CFLAGS += -fprofile-arcs -ftest-coverage
LDFLAGS = -fprofile-arcs
endif
# if our own version of klibc is used, we need to build it # if our own version of klibc is used, we need to build it
ifeq ($(strip $(USE_KLIBC)),true) ifeq ($(strip $(USE_KLIBC)),true)
KLIBC_INSTALL = $(PWD)/klibc/.install KLIBC_INSTALL = $(PWD)/klibc/.install
@ -291,6 +300,10 @@ ccdv: ccdv.c
clean: clean:
- find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print0 | xargs -0rt rm -f - find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print0 | xargs -0rt rm -f
- find -name "*.gcno" -print0 | xargs -0rt rm -f
- find -name "*.gcda" -print0 | xargs -0rt rm -f
- find -name "*.gcov" -print0 | xargs -0rt rm -f
- rm -f udev_gcov.txt
- rm -f core $(PROGRAMS) $(GEN_HEADERS) $(GEN_CONFIGS) - rm -f core $(PROGRAMS) $(GEN_HEADERS) $(GEN_CONFIGS)
$(MAKE) -C klibc SUBDIRS=klibc clean $(MAKE) -C klibc SUBDIRS=klibc clean
@extras="$(EXTRAS)"; for target in $$extras; do \ @extras="$(EXTRAS)"; for target in $$extras; do \
@ -397,4 +410,28 @@ test tests: all
buildtest: buildtest:
./test/simple-build-check.sh ./test/simple-build-check.sh
.PHONY: buildtest
gcov-all:
$(MAKE) clean all DEBUG=true USE_GCOV=true
@echo
@echo "binaries built with gcov support."
@echo "run the tests and analyze with 'make udev_gcov.txt'"
.PHONY: gcov-all
# see docs/README-gcov_for_udev
udev_gcov.txt: $(wildcard *.gcda) $(wildcard *.gcno)
for file in `find -maxdepth 1 -name "*.gcno"`; do \
name=`basename $$file .gcno`; \
echo "################" >> $@; \
echo "$$name.c" >> $@; \
echo "################" >> $@; \
if [ -e "$$name.gcda" ]; then \
gcov -l "$$name.c" >> $@ 2>&1; \
else \
echo "code for $$name.c was never executed" >> $@ 2>&1; \
fi; \
echo >> $@; \
done; \
echo "view $@ for the result"

View File

@ -2,6 +2,8 @@
Using GCC's code coverage tool, gcov, with udev Using GCC's code coverage tool, gcov, with udev
Leann Ogasawara <ogasawara@osdl.org>, April 2004
################################################ ################################################
For more information on using gcov please see: For more information on using gcov please see:
@ -13,14 +15,11 @@ Note that this was developed with udev version 024.
- Make sure you've installed udev and that it is working properly. - Make sure you've installed udev and that it is working properly.
If you are having problems, refer to the README and HOWTO-udev_for_dev If you are having problems, refer to the README and HOWTO-udev_for_dev
documents in udev tarball. I've also compiled a udev_for_dev documents in udev tarball.
toubleshooting document for Red Hat which can be found in:
docs/rh_udev_for_dev.txt
- execute make_gcov.sh from udev top level directory - execute make_gcov.sh from udev top level directory
./make_gcov.sh make gcov-all
This will compile udev with gcov support. Basically make_gcov.sh will This will compile udev with gcov support. Basically make_gcov.sh will
run make but override the CFLAGS. It strips any optimization from run make but override the CFLAGS. It strips any optimization from
@ -28,21 +27,9 @@ Note that this was developed with udev version 024.
also add the -fprofile-arcs and -ftest-coverage options which are the also add the -fprofile-arcs and -ftest-coverage options which are the
necessary flags needed to use gcov. necessary flags needed to use gcov.
make_gcov.sh will assume the same default parameters as the regular If you look into your udev directory and see that it has been polluted with
make but also accepts the same parameters. For example if you want a bunch of *.gcno, *.gcda and *.gcov files. gcov creates and uses these files
to get code coverage analysis for udev with the DEBUG flag turned to extract the code coverage info.
on, you would just execute:
./make_gcov.sh DEBUG=true
There is one exception, gcov will not work with klibc as it does not
compile cleanly with the -fprofile-arcs and -ftest-coverage flags.
With this said it is pretty much useless to set the KERNEL_DIR flag
when using make_gcov.sh as well.
Don't be alarmed if you look into your udev directory and see that it
has been polluted with a bunch of *.bb, *.bbg, *.da, and *.gcov files.
gcov creates and uses these files to extract the code coverage info.
- After running make_gcov.sh you need to install udev again. So basically, - After running make_gcov.sh you need to install udev again. So basically,
@ -58,7 +45,7 @@ Note that this was developed with udev version 024.
level directory. You need to be root to do this. level directory. You need to be root to do this.
su to root su to root
./run_gcov.sh make udev_gcov.txt
- This creates udev_gcov.txt in the udev top level directory which holds all - This creates udev_gcov.txt in the udev top level directory which holds all
the code coverage information. To see an example of the code coverage info the code coverage information. To see an example of the code coverage info
@ -95,14 +82,9 @@ Note that this was developed with udev version 024.
was never hit during execution. was never hit during execution.
- Once you are done with using gcov for udev and want to return to your - Once you are done with using gcov for udev and want to return to your
normal use of udev. Simply, normal use of udev, run a regular 'make clean' on your udev directory.
Then just run a regular make and make install and you are back to normal:
./make_gcov.sh clean make clean all
This will clean out all the *.bb, *.bbg, *.da, *.gcov files produced by gcov.
It will also run a regular make clean on your udev directory. Then just run
a regular make and make install and you are back to normal:
make
su to root su to root
make isntall make install

View File

@ -1,53 +0,0 @@
#!/bin/sh
#
# gcov capability for udev
#
# Provides code coverage analysis for udev.
#
# make_gcov.sh assumes the same same default parameters as make, but also
# accepts the same parameters as make (see README file in udev/ for
# parameter info). There is one exception, klibc can not be used with
# gcov as it will not compile cleanly.
#
# make_gcov.sh then overrides CFLAGS to strip out optimization in order
# for gcov to get correct code coverage analysis.
#
# Leann Ogasawara <ogasawara@osdl.org>, April 2004
# clean up udev dir
clean_udev () {
find -name "*.gcno" -exec rm -f "{}" \;
find -name "*.gcda" -exec rm -f "{}" \;
find -name "*.gcov" -exec rm -f "{}" \;
rm -f udev_gcov.txt
make clean
}
PWD=`pwd`
GCCINCDIR=`gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp"`
LIBSYSFS="-I$PWD/libsysfs/sysfs -I$PWD/libsysfs"
WARNINGS="-Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations"
GCC="-I$GCCINCDIR"
USE_LOG="-DUSE_LOG"
DEBUG="-D_GNU_SOURCE"
GCOV_FLAGS="-pipe -fprofile-arcs -ftest-coverage"
for i in $*; do
pre=`echo $i | sed 's/=.*//g'`
post=`echo $i | sed 's/.*=//g'`
if [ $pre = "USE_KLIBC" ] && [ $post = "true" ]; then
echo "cannot use gcov with klibc, will not compile"
exit
elif [ $pre = "USE_LOG" ] && [ $post = "false" ]; then
USE_LOG=""
elif [ $pre = "DEBUG" ] && [ $post = "true" ]; then
DEBUG="-g -DDEBUG -D_GNU_SOURCE"
elif [ $pre = "clean" ]; then
clean_udev
exit
fi
done
clean_udev
make $* CFLAGS="$WARNINGS $GCOV_FLAGS $USE_LOG $DEBUG $GCC $LIBSYSFS" LDFLAGS="-Wl,-warn-common -fprofile-arcs"

View File

@ -1,40 +0,0 @@
#!/bin/sh
#
# run gcov on udev
#
# Generate code coverage analysis for udev files
#
# This requires that you compiled udev with gcov flags i.e.
# you should have compiled udev with the make_gcov.sh script.
#
# Leann Ogasawara <ogasawara@osdl.org>, April 2004
PWD=`pwd`
# check if root else may not have access to *.da files
# and gcov analysis will fail.
if [ $(id -u) -ne 0 ]; then
echo "please become root before executing run_gcov.sh"
exit 1
fi
echo > udev_gcov.txt
echo "CODE COVERAGE ANALYSIS FOR UDEV" >> udev_gcov.txt
echo >> udev_gcov.txt
for file in `find -maxdepth 1 -name "*.gcno"`; do
name=`basename $file .gcno`
echo "################" >> udev_gcov.txt
echo "$name.c" >> udev_gcov.txt
echo "################" >> udev_gcov.txt
if [ -e "$name.gcda" ]; then
gcov -l "$name.c" >> udev_gcov.txt 2>&1
else
echo "code for $name.c was never executed" >> udev_gcov.txt 2>&1
echo "no code coverage analysis to be done" >> udev_gcov.txt 2>&1
fi
echo >> udev_gcov.txt
done
echo "udev gcov analysis done. View udev_gcov.txt for results."