gcov: fix TOPN streaming from shared libraries
authorSergei Trofimovich <siarheit@google.com>
Sun, 6 Sep 2020 11:13:54 +0000 (12:13 +0100)
committerSergei Trofimovich <siarheit@google.com>
Tue, 22 Sep 2020 10:41:04 +0000 (11:41 +0100)
commit4ecf368f4b4223fb2df4f3887429dfbb48852e38
tree031f2bdda3e470e17656355aa44e52c1df8f5f15
parent46a274154786678e037fdce5dacd0305cddba0f9
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.
libgcc/libgcov-driver.c