|
From: <sv...@va...> - 2011-12-14 20:10:31
|
Author: bart
Date: 2011-12-14 20:05:51 +0000 (Wed, 14 Dec 2011)
New Revision: 12308
Log:
DRD: Suppress uninteresting races triggered by the dynamic loader
Modified:
trunk/drd/drd_main.c
Modified: trunk/drd/drd_main.c
===================================================================
--- trunk/drd/drd_main.c 2011-12-14 07:30:05 UTC (rev 12307)
+++ trunk/drd/drd_main.c 2011-12-14 20:05:51 UTC (rev 12308)
@@ -324,7 +324,20 @@
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()");
}
|