DRD_(trace_mem_access)(a1, len, eStart, 0, 0);
}
- if (UNLIKELY(DRD_(running_thread_inside_pthread_create)()))
+ /*
+ * Hack: telling the tool about initial permissions happens before
+ * the pre_thread_first_insn callback is invoked, which sets
+ * DRD_(g_drd_running_tid). Suppress all memory accesses on these
+ * initial memory regions since sporadically it happens that an
+ * (uninteresting) data race is reported on one of these regions, triggered
+ * by the symbol lookup algorithms in the dynamic loader. That behavior
+ * can be reproduced on Linux/amd64 by disabling the DRD_(g_drd_running_tid)
+ * test below and by running the following command:
+ * ./vg-in-place --tool=drd --check-stack-var=yes \
+ * drd/tests/annotate_smart_pointer 50 50
+ */
+ if (UNLIKELY(DRD_(running_thread_inside_pthread_create)()
+ || DRD_(g_drd_running_tid) == DRD_INVALID_THREADID))
{
DRD_(start_suppression)(a1, a2, "pthread_create()");
}