gcov: fix TOPN streaming from shared libraries
Before the change gcc did not stream correctly TOPN counters if counters belonged to a non-local shared object. As a result zero-section optimization generated TOPN sections in a form not recognizable by '__gcov_merge_topn'. The problem happens because in a case of multiple shared objects '__gcov_merge_topn' function is present in address space multiple times (once per each object). The fix is to never rely on function address and predicate on TOPN counter types. libgcc/ChangeLog: PR gcov-profile/96913 * libgcov-driver.c (write_one_data): Avoid function pointer comparison in TOP streaming decision.
This commit is contained in:
parent
46a2741547
commit
4ecf368f4b
@ -424,7 +424,7 @@ write_one_data (const struct gcov_info *gi_ptr,
|
||||
|
||||
n_counts = ci_ptr->num;
|
||||
|
||||
if (gi_ptr->merge[t_ix] == __gcov_merge_topn)
|
||||
if (t_ix == GCOV_COUNTER_V_TOPN || t_ix == GCOV_COUNTER_V_INDIR)
|
||||
write_top_counters (ci_ptr, t_ix, n_counts);
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user