]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
drd manual: Document how to avoid false positive reports on the C++11 std::thread...
authorBart Van Assche <bvanassche@acm.org>
Fri, 6 Jun 2014 07:23:06 +0000 (07:23 +0000)
committerBart Van Assche <bvanassche@acm.org>
Fri, 6 Jun 2014 07:23:06 +0000 (07:23 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13998

drd/docs/drd-manual.xml

index fcf769cc99a811c0d187d0eb925e59fab6414455..0fb8b4bfdc35babf6999798556a8b3874d66a1f4 100644 (file)
@@ -1249,6 +1249,32 @@ before Valgrind's header files are available.
 </sect2>
 
 
+<sect2 id="drd-manual.C++11" xreflabel="C++11">
+<title>Debugging C++11 Programs</title>
+
+<para>If you want to use the C++11 class std::thread you will need to add the
+following code at the start of a common header or at the start of each source
+file to avoid that false positives are reported on the std::thread
+implementation:</para>
+
+<programlisting>
+#include &lt;valgrind/drd.h&gt;
+#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(addr) ANNOTATE_HAPPENS_BEFORE(addr)
+#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(addr)  ANNOTATE_HAPPENS_AFTER(addr)
+#define _GLIBCXX_EXTERN_TEMPLATE -1
+</programlisting>
+
+<para>This code must occur before any C++ header files are included. Since the
+implementation of std::thread uses the C++ shared pointer implementation, that
+shared pointer implementation has to be annotated in order to avoid false
+positives. The above code implements such annotation.  See also <emphasis>The
+GNU C++ Library Manual, Debugging Support</emphasis>
+(<ulink url="http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html">http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html</ulink>)
+for more information.</para>
+
+</sect2>
+
+
 <sect2 id="drd-manual.gnome" xreflabel="GNOME">
 <title>Debugging GNOME Programs</title>