gcov question

Aitor.Viana.Sanchez at esa.int Aitor.Viana.Sanchez at esa.int
Wed Sep 15 13:02:16 UTC 2010


Hi Mariana,

happy to hear that. If you have performed any mods on the code would you 
please forward them to me in, say source code or patch format?


Regards,

Aitor






From:
Mariana Solaro <msolaro at invap.com.ar>
To:
Aitor.Viana.Sanchez at esa.int
Cc:
rtems-users at rtems.org, rtems-users-bounces at rtems.org
Date:
09/15/2010 02:59 PM
Subject:
Re: gcov question



Hello Aitor, thank you very much for your help. We used what you gave us, 
and it finally worked.
We are measuring the coverage using the TSIM and using the real hardware.

Best regards, 
Mariana


El 02/09/2010 11:56 a.m., Aitor.Viana.Sanchez at esa.int escribió: 
Hi Mariana, 

When you compile your code with -ftest-coverage and -fprofile-arcs the 
compiler analyses and divides the compiled code into basic blocks. Those 
blocks are one or more lines of code and each of them has a counter, added 
also by the compiler. The compiled code is also instrumented with some 
assembly code in order to increase the basic block counters. 

The __gcov_init and __gcov_merge_add functions (among others) are missing 
from the RTEMS toolchain so need to be implemented (or borrow from the 
libgcov.c as they are pretty standard). The only problem you may face is 
that the libgcov standard library is implemented for non-embedded systems 
which means that the counters and coverage information is dumped from time 
to time to the proper files. In ERC32 (embedded system) you won't have 
that capability so you'll have to modify (re-implement) some of the 
functions. In particular gcov_init() and gcov_exit() to store the info in 
local memory and flush it off a e.g. serial line. 
On the other side you'll need an application that interprets the data and 
generages the gcov files. 

I already did that exercise some time ago for LEON2 processor (pretty 
similar to ERC32) and I attach to this email the source code. 

This source code has the following directory tree: 
arch -> all the architecture dependent code 
build -> build directory 
include -> header files directory 
lib -> standard libgcov.c file 
os -> OS dependent code. So far only for RTEMS 
samples -> some example programs 
tools -> gcov-iov version generator tool


If you look into the arch directory you'll see the sparc sub-directory and 
under this both the erc32 and leon2 directories. The erc32 directory and 
particulary the if_serial.c file is the one you'll have to modify to make 
it work under ERC32. Only four functions need to be implemented 
if_serial_init - initialise the serial interface 
if_serial_read - read from the serial interface 
if_serial_write - write to the serial interface 
if_serial_destroy - destroy the serial interface

Implementing those functions and adding to the Makefile the necessary 
lines to also compile the erc32 architecture (easy) you'll build a 
libgcov_rtems_erc32.a library which you'll link together with your 
application under coverage testing. 

In the directory e.g samples/bubble you'll find the the lcov.sh script. 
Which contains all the necessary commands to compile the bubble.c 
application, link it with the libcov_rtems_xxx.a library, execute it under 
TSIM and then analyse the results. 


I did not get into too much detail regarding the GCOV functionality. The 
source code attached is working and I have used it with RTEMS 4.8 and 
LEON2 under both TSIM and real hardware using the RS232 port. 



With regard to GPROF, also some code needs to be implemented. I already 
started a gprof implementation for leon2 and RTEMS 4.8 but its still not 
working 100% properly. If you want I can also send it to you. 


Hope this helps 


Aitor 





Mariana Solaro <msolaro at invap.com.ar> 
Sent by: rtems-users-bounces at rtems.org 
09/02/2010 03:42 PM 


To
rtems-users at rtems.org 
cc

Subject
gcov question








Hello, I have a question about gcov an how to use it.
We are using the sparc ERC32 processor, and the RTEMS 4.10 version.
We've seen that there is a tool called gcov that allows it to measure 
the tests coverage. We don´t know exactly how to use it with RTEMS. We 
already try to compile the source code with the -ftest-coverage and 
-fprofile-arcs options, but it only generates the .gcno files, and not 
the .gcda files, so when using gcov, the coverage indicated is 0%.
When the linker starts it says that it can't find the __gcov_init and 
__gcov_merge_add functions.
So, I would like to know how to use the gcov and gprof tools with RTEMS 
if it is posible.

Thank You!

Bye

_______________________________________________
rtems-users mailing list
rtems-users at rtems.org
http://www.rtems.org/mailman/listinfo/rtems-users


-- 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20100915/4d2a9892/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 14091 bytes
Desc: not available
URL: <http://lists.rtems.org/pipermail/users/attachments/20100915/4d2a9892/attachment-0001.jpe>


More information about the users mailing list