]> git.ipfire.org Git - thirdparty/systemd.git/blame - README-gcov_for_udev
[PATCH] make udev-test.pl test for root permissions before running
[thirdparty/systemd.git] / README-gcov_for_udev
CommitLineData
d9154d11
GKH
1################################################
2
3Using GCC's code coverage tool, gcov, with udev
4
5################################################
6
7For more information on using gcov please see:
8
9http://gcc.gnu.org/onlinedocs/gcc/Gcov.html
10
11With that said, here is how to get code coverage analysis for udev files.
12Note that this was developed with udev version 024.
13
14- Make sure you've installed udev and that it is working properly.
15 If you are having problems, refer to the README and HOWTO-udev_for_dev
16 documents in udev tarball. I've also compiled a udev_for_dev
738e5c3f 17 toubleshooting document for Red Hat which can be found in:
d9154d11 18
738e5c3f 19 docs/rh_udev_for_dev.txt
d9154d11 20
738e5c3f 21- execute make_gcov.sh from udev top level directory
d9154d11
GKH
22
23 ./make_gcov.sh
24
25 This will compile udev with gcov support. Basically make_gcov.sh will
26 run make but override the CFLAGS. It strips any optimization from
27 CFLAGS in order for gcov to get correct code coverage analysis. It will
28 also add the -fprofile-arcs and -ftest-coverage options which are the
29 necessary flags needed to use gcov.
30
31 make_gcov.sh will assume the same default parameters as the regular
32 make but also accepts the same parameters. For example if you want
33 to get code coverage analysis for udev with the DEBUG flag turned
34 on, you would just execute:
35
36 ./make_gcov.sh DEBUG=true
37
38 There is one exception, gcov will not work with klibc as it does not
39 compile cleanly with the -fprofile-arcs and -ftest-coverage flags.
40 With this said it is pretty much useless to set the KERNEL_DIR flag
41 when using make_gcov.sh as well.
42
43 Don't be alarmed if you look into your udev directory and see that it
44 has been polluted with a bunch of *.bb, *.bbg, *.da, and *.gcov files.
45 gcov creates and uses these files to extract the code coverage info.
46
47- After running make_gcov.sh you need to install udev again. So basically,
48
49 su to root
50 make install
51
52- Then execute some udev tasks. You can run some udev tests, reboot, or
53 do anything your little udev heart desires. Once you are satisfied, you
738e5c3f 54 can now see how much udev code was covered. I personally recommend just
55 running test/udev-test.pl for starters.
d9154d11 56
738e5c3f 57- To get the udev code coverage analysis, execute run_gcov.sh from udev top
58 level directory. You need to be root to do this.
d9154d11
GKH
59
60 su to root
61 ./run_gcov.sh
62
738e5c3f 63- This creates udev_gcov.txt in the udev top level directory which holds all
64 the code coverage information. To see an example of the code coverage info
65 after executing the udev-test.pl test, please see:
d9154d11
GKH
66
67 http://developer.osdl.org/ogasawara/gcov_for_udev/udev_gcov.txt
68
69- Also, after having executed gcov on udev (ie executing run_gcov.sh) a
70 *.gcov file is created for every file which contained code that was
71 used. Looking at the *.gcov files, one will see what lines of code
72 were hit, and what lines were missed. For, example if code in udev-add.c
73 were executed, gcov then created a file called udev-add.c.gcov. And a
74 portion of udev-add.c.gov might look like:
75
76 static int get_major_minor(struct sysfs_class_device *class_dev, struct udevice *udev)
77 95 {
78 95 struct sysfs_attribute *attr = NULL;
79
80 95 attr = sysfs_get_classdev_attr(class_dev, "dev");
81 95 if (attr == NULL)
82 ###### goto error;
83 dbg("dev='%s'", attr->value);
84
85 95 if (sscanf(attr->value, "%u:%u", &udev->major, &udev->minor) != 2)
86 ###### goto error;
87 dbg("found major=%d, minor=%d", udev->major, udev->minor);
88
89 95 return 0;
90 error:
91 ###### return -1;
92 }
93
94 Any line of code that is preceded by a "######" implies that the code
95 was never hit during execution.
96
97- Once you are done with using gcov for udev and want to return to your
98 normal use of udev. Simply,
99
100 ./make_gcov.sh clean
101
102 This will clean out all the *.bb, *.bbg, *.da, *.gcov files produced by gcov.
103 It will also run a regular make clean on your udev directory. Then just run
104 a regular make and make install and you are back to normal:
105
106 make
107 su to root
108 make isntall