summaryrefslogtreecommitdiff
path: root/docs/README-gcov_for_udev
diff options
context:
space:
mode:
Diffstat (limited to 'docs/README-gcov_for_udev')
-rw-r--r--docs/README-gcov_for_udev90
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