Merge in the DATASYMS branch.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7540 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/helgrind/hg_main.c b/helgrind/hg_main.c
index 664c449..b0a0cff 100644
--- a/helgrind/hg_main.c
+++ b/helgrind/hg_main.c
@@ -48,6 +48,7 @@
 #include "pub_tool_options.h"
 #include "pub_tool_xarray.h"
 #include "pub_tool_stacktrace.h"
+#include "pub_tool_debuginfo.h"  /* VG_(get_data_description) */
 
 #include "helgrind.h"
 
@@ -7828,6 +7829,8 @@
             SVal  old_state;
             ExeContext* mb_lastlock;
             Thread* thr;
+            Char  descr1[96];
+            Char  descr2[96];
          } Race;
          struct {
             Thread* thr;  /* doing the freeing */
@@ -7917,6 +7920,20 @@
    // FIXME: tid vs thr
    tl_assert(isWrite == False || isWrite == True);
    tl_assert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
+
+   tl_assert(sizeof(xe.XE.Race.descr1) == sizeof(xe.XE.Race.descr2));
+   xe.XE.Race.descr1[0] = xe.XE.Race.descr2[0] = 0;
+   if (VG_(get_data_description)(
+             &xe.XE.Race.descr1[0],
+             &xe.XE.Race.descr2[0],
+             sizeof(xe.XE.Race.descr1)-1,
+             data_addr )) {
+      tl_assert( xe.XE.Race.descr1
+                    [ sizeof(xe.XE.Race.descr1)-1 ] == 0);
+      tl_assert( xe.XE.Race.descr2
+                    [ sizeof(xe.XE.Race.descr2)-1 ] == 0);
+   }
+
    VG_(maybe_record_error)( map_threads_reverse_lookup_SLOW(thr),
                             XE_Race, data_addr, NULL, &xe );
 }
@@ -8452,6 +8469,12 @@
                       old_state, old_buf, new_state, new_buf);
       }
 
+      /* If we have a better description of the address, show it. */
+      if (xe->XE.Race.descr1[0] != 0)
+         VG_(message)(Vg_UserMsg, "  %s", &xe->XE.Race.descr1);
+      if (xe->XE.Race.descr2[0] != 0)
+         VG_(message)(Vg_UserMsg, "  %s", &xe->XE.Race.descr2);
+
       break; /* case XE_Race */
    } /* case XE_Race */
 
@@ -8801,7 +8824,7 @@
                                    hg_cli__realloc,
                                    HG_CLI__MALLOC_REDZONE_SZB );
 
-   VG_(needs_data_syms)();
+   VG_(needs_var_info)();
 
    //VG_(needs_xml_output)          ();