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:
parent
852cc0f58d
commit
a8b38f1c44
37
Makefile
37
Makefile
@ -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"
|
||||||
|
|
||||||
|
@ -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
|
53
make_gcov.sh
53
make_gcov.sh
@ -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"
|
|
40
run_gcov.sh
40
run_gcov.sh
@ -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."
|
|
Loading…
Reference in New Issue
Block a user