https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Well, the test-case is very interesting as it exposes 2 issues:

1) Majority of instrumented profiling code is not thread-safe, for instance
edge profiler:

  PROF_edge_counter_11 =
__gcov0._ZL20__gthread_mutex_lockP15pthread_mutex_t[0];
  PROF_edge_counter_12 = PROF_edge_counter_11 + 1;
  __gcov0._ZL20__gthread_mutex_lockP15pthread_mutex_t[0] =
PROF_edge_counter_12;

2) As the test-case does not properly join created threads and original thread
reaches gcov_exit, we get messed profile. One thread is writing to disk while
the others are still modifying counters.

I'm going to discuss the aforementioned problem on GCC mailing list.

Reply via email to