This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[2] Re: [gcov] No data gathered for child processes


On Wed, Sep 23, 2009 at 06:48:29PM +0200, Holger Blasum wrote:
> > You must note that the parent process and the child processes have the  
> > exact same code. In fact, the parent process is just forked.
> 
> Ah now I understand. Well then one has a classical race condition: 
> the same infrastructure for storing coverage data (*.gcda files) is 
> used by both parent and child, and who terminates last will get the 
> overwrite I guess.

Let me stress: I'm not sure at the moment whether that race condition
is necessary or just accidental (and no-one has ever bothered to fix
it). Study the gcov sources (not long and documented in the paper I 
linked to in yesterday's mail) - don't have patience atm to do that myself.
Special things to look at is e.g. atexit() and how this is used in 
a forking context.

> > I did not yet resolve the problem. I hope I will be able with your help.
> 
> Fixing ideas: 
> (1) try renaming functions in your child (ugly, I agree, but could be automated).
>  Maybe first try out whether this works with a very small example.
> (2) modify gcov so that that the gcda files are written in a way that if 
> 	a child with say process ID (pid) 2 has a main.c 
> 	and a parent with say pid 1 has main.c, then the data is dumped into
> 	main.1.gcda, main.2.gcda, and modify gcov.c to sum up both 
> 
> BTW, anyone else is encouraged to comment on too (I had just been a user 
> of gcov too - no contributions to development). There is also a list
> with gcov knowledge at the lcov project 
> http://ltp.sourceforge.net/coverage/lcov.php

Oops, https://lists.sourceforge.net/lists/listinfo/ltp-coverage to give
a more useful pointer.

-- 
Holger


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]