Call for Testers: Kernel GCOV

Jun Su junsu at delphij.net
Mon Feb 23 05:24:06 PST 2004


Hi All,

I created a patch to support gcov in multi platform and kernel module.  
Please have test.
You can download the patch from:
http://www.arbornet.org/~junsu/gcov.diff

CAUTION: The patch will change ldscript.${MACHINE_ARCH}. It may caused  
your kernel can not be boot. Please backup your kernel before testing this  
patch.
I have only tested this patch in i386. For the lack of other machines, I  
can not test it in other platform. Please let me know if it works in other  
platforms.

Description
-------------
   GCOV is a test coverage program distributed as part of GCC. It helps  
discover
   where your optimization efforts will best affect your code. Using GCOV  
one can
   find out some basic performance statistics on a per source file level  
such as:

     * how often each line of code executes

     * what lines of code are actually executed


   GCOV is already available for user level applications. PHK has  
implemented the kenel
support for i386 before.

Usage
------
   1. Kernel GCOV Compile
      You need manually put -fprofile-arcs -ftest-coverage. You can specify  
it in enverienment or in /etc/make.conf.
       csh:
	  setenv COPTFLAGS "-fprofile-arcs -ftest-coverage"
	bash:
	  set COPTFLAGS="-fprofile-arcs -ftest-coverage";export COPTFLAGS
	make.conf
	  COPTFLAGS= -O -pipe -fprofile-arcs -ftest-coverage

	If you only want to gcov some file, for example, kern_proc.c. After a  
normal compiling, delete
kern_proc.o. Then set the above compile option, and run make again.

   2. Kernel Module GCOV Compile
	It is simple. Cd to modules/xxx/ folder, and Run the following command:
	   make -DCOVERAGE

   3. Compile a new kernbb
	Since I changed the symbol bbhead to _bb_head, we need change kernbb  
correspond. Change the bbhead to _bb_head.
struct nlist namelist[] = {
         { "_bb_head", 0, 0, 0, 0 },
         { NULL, 0, 0, 0, 0 }
};

4. Get the result
After the new kernel boot and load the modules you want to profile. Run  
some typical scenario. Then use kernbb to get .bb files.
The files will be written to your obj folder. If you use make buildkernel  
KERNCONF=KERNEL_NAME, then the folder is /usr/obj/usr/src/sys/KERNEL_NAME.

Use gcov command to check the result.
gcov ¨Co /usr/obj/usr/src/sys/KERNEL_NAME/ /usr/src/sys/kern/kern_proc.c

If you have any questions, please drop me an email.

Next step, I will try to implement PHK's idea to measure how much code  
runs under Gaint. :-)

Thanks,

Jun Su


More information about the freebsd-current mailing list