> Hi, > this patch fixes problem we noticed with Martin Liska where gcov_dump is > called > several times per execution of firefox (on each fork and exec). This causes > runs to be large and makes functions executed once per program to be > considered > cold. > > This patch makes us to update runs just once per execution and not on each > streaming of profile data. While testing it I also noticed that program > summary is now broken, since crc32 is accumulated per each dumping instead > just > once. > > I believe the newly introduced static vars should go - there is nothing really > preventing us from doing two concurent updates and also it just unnecesary > increases to footprint of libgcov. I converted thus all_prg and crc32 back to > local vars. > > Bootstrapped/regtested x86_64-linux, comitted. > > * libgcov-driver.c (get_gcov_dump_complete): Update comments. > (all_prg, crc32): Remove static vars. > (gcov_exit_compute_summary): Rewrite to return crc32; do not clear > all_prg. > (gcov_exit_merge_gcda): Add crc32 parameter. > (gcov_exit_merge_summary): Add crc32 and all_prg parameter; > do not account run if it was already accounted. > (gcov_exit_dump_gcov): Add crc32 and all_prg parameters. > (gcov_exit): Initialize all_prg; update.
Hi, it seems I forgot the following hunk in my tree. With fork we now get errors about corrupted profile info: run_max * runs < sum_max. Obviously problem here is again about definition what is run and what is maximum per run. I think run_max is quite pointless part of our summary so I think I will drop it, but first I need to look into the histogram code. I apologize for the breakage. Honza Index: ChangeLog =================================================================== --- ChangeLog (revision 204984) +++ ChangeLog (working copy) @@ -1,3 +1,7 @@ +2013-11-18 Jan Hubicka <j...@suse.cz> + + * profile.c (compute_branch_probabilities): Do not sanity check run_max. + 2013-11-18 Bernd Schmidt <ber...@codesourcery.com> * cgraphunit.c (ipa_passes): Don't execute all_lto_gen_passes. Index: profile.c =================================================================== --- profile.c (revision 204984) +++ profile.c (working copy) @@ -528,11 +528,6 @@ compute_branch_probabilities (unsigned c /* Very simple sanity checks so we catch bugs in our profiling code. */ if (!profile_info) return; - if (profile_info->run_max * profile_info->runs < profile_info->sum_max) - { - error ("corrupted profile info: run_max * runs < sum_max"); - exec_counts = NULL; - } if (profile_info->sum_all < profile_info->sum_max) {