https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84107
Bug ID: 84107 Summary: indirect call profiling broken with multiple DSOs Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: visibility, wrong-code Severity: normal Priority: P3 Component: gcov-profile Assignee: unassigned at gcc dot gnu.org Reporter: amonakov at gcc dot gnu.org CC: marxin at gcc dot gnu.org Target Milestone: --- Created attachment 43272 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43272&action=edit testcase archive (Marxin, on IRC you've requested this bug to be filed; enjoy!) The finely crafted testcase in the attachment segfaults with null pointer dereference in __gcov_indirect_call_profiler_v2. In general libgcov should have "hidden" visibility on small symbols that have no need to inter-operate between different shared objects and can be freely duplicated in user-built shared libraries (thus indirect profiling symbols probably all miss the visibility annotation). Large symbols and symbols that must exist in exactly one instance in the running program probably should be a part of (nonexistent) libgcov.so.0.