diff options
Diffstat (limited to 'docs/README-gcov_for_udev')
-rw-r--r-- | docs/README-gcov_for_udev | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/docs/README-gcov_for_udev b/docs/README-gcov_for_udev new file mode 100644 index 0000000000..c223dc38e8 --- /dev/null +++ b/docs/README-gcov_for_udev @@ -0,0 +1,90 @@ +################################################ + +Using GCC's code coverage tool, gcov, with udev + +Leann Ogasawara <ogasawara@osdl.org>, April 2004 + +################################################ + +For more information on using gcov please see: + +http://gcc.gnu.org/onlinedocs/gcc/Gcov.html + +With that said, here is how to get code coverage analysis for udev files. +Note that this was developed with udev version 024. + +- 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 + documents in udev tarball. + +- execute make_gcov.sh from udev top level directory + + make gcov-all + + This will compile udev with gcov support. Basically make_gcov.sh will + run make but override the CFLAGS. It strips any optimization from + CFLAGS in order for gcov to get correct code coverage analysis. It will + also add the -fprofile-arcs and -ftest-coverage options which are the + necessary flags needed to use gcov. + + If you look into your udev directory and see that it has been polluted with + a bunch of *.gcno, *.gcda 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, + + su to root + make install + +- Then execute some udev tasks. You can run some udev tests, reboot, or + do anything your little udev heart desires. Once you are satisfied, you + can now see how much udev code was covered. I personally recommend just + running test/udev-test.pl for starters. + +- To get the udev code coverage analysis, execute run_gcov.sh from udev top + level directory. You need to be root to do this. + + su to root + make udev_gcov.txt + +- 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 + after executing the udev-test.pl test, please see: + + http://developer.osdl.org/ogasawara/gcov_for_udev/udev_gcov.txt + +- Also, after having executed gcov on udev (ie executing run_gcov.sh) a + *.gcov file is created for every file which contained code that was + used. Looking at the *.gcov files, one will see what lines of code + were hit, and what lines were missed. For, example if code in udev-add.c + were executed, gcov then created a file called udev-add.c.gcov. And a + portion of udev-add.c.gov might look like: + + static int get_major_minor(struct sysfs_class_device *class_dev, struct udevice *udev) + 95 { + 95 struct sysfs_attribute *attr = NULL; + + 95 attr = sysfs_get_classdev_attr(class_dev, "dev"); + 95 if (attr == NULL) + ###### goto error; + dbg("dev='%s'", attr->value); + + 95 if (sscanf(attr->value, "%u:%u", &udev->major, &udev->minor) != 2) + ###### goto error; + dbg("found major=%d, minor=%d", udev->major, udev->minor); + + 95 return 0; + error: + ###### return -1; + } + + Any line of code that is preceded by a "######" implies that the code + was never hit during execution. + +- Once you are done with using gcov for udev and want to return to your + 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 clean all + su to root + make install |