Merge branches/OTRACK_BY_INSTRUMENTATION into the trunk.  This adds
support to Memcheck for tracking the origin of uninitialised values,
if you use the --track-origins=yes flag.

This currently causes some Memcheck regression tests to fail, because
they now print an extra line of advisory text in their output.  This
will be fixed.

The core-tool interface is slightly changed.  The version number for
the interface needs to be incremented.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7982 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_main.c b/exp-drd/drd_main.c
index 3b9563a..bdb13b5 100644
--- a/exp-drd/drd_main.c
+++ b/exp-drd/drd_main.c
@@ -497,6 +497,20 @@
   }
 }
 
+static void drd_start_using_mem_w_ecu(const Addr a1,
+                                      const SizeT len,
+                                      UInt ec_uniq)
+{
+  drd_start_using_mem(a1, len);
+}
+
+static void drd_start_using_mem_w_tid(const Addr a1,
+                                      const SizeT len,
+                                      ThreadId tid)
+{
+  drd_start_using_mem(a1, len);
+}
+
 static __inline__
 void drd_stop_using_mem(const Addr a1, const SizeT len,
                         const Bool is_stack_mem)
@@ -538,7 +552,8 @@
 static void drd_start_using_mem_stack(const Addr a, const SizeT len)
 {
   thread_set_stack_min(thread_get_running_tid(), a - VG_STACK_REDZONE_SZB);
-  drd_start_using_mem(a - VG_STACK_REDZONE_SZB, len + VG_STACK_REDZONE_SZB);
+  drd_start_using_mem(a - VG_STACK_REDZONE_SZB, 
+                      len + VG_STACK_REDZONE_SZB);
 }
 
 /* Called by the core when the stack of a thread shrinks, to indicate that */
@@ -552,7 +567,9 @@
                      True);
 }
 
-static void drd_start_using_mem_stack_signal(const Addr a, const SizeT len)
+static void drd_start_using_mem_stack_signal(
+               const Addr a, const SizeT len,
+               ThreadId tid_for_whom_the_signal_frame_is_being_constructed)
 {
   thread_set_vg_running_tid(VG_(get_running_tid)());
   drd_start_using_mem(a, len);
@@ -945,6 +962,7 @@
     case Ist_IMark:
       instrument = VG_(seginfo_sect_kind)(NULL, 0, st->Ist.IMark.addr)
         != Vg_SectPLT;
+      addStmtToIRSB(bb, st);
       break;
 
     case Ist_MBE:
@@ -1125,7 +1143,7 @@
   VG_(track_pre_mem_read)         (drd_pre_mem_read);
   VG_(track_pre_mem_read_asciiz)  (drd_pre_mem_read_asciiz);
   VG_(track_post_mem_write)       (drd_post_mem_write);
-  VG_(track_new_mem_brk)          (drd_start_using_mem);
+  VG_(track_new_mem_brk)          (drd_start_using_mem_w_tid);
   VG_(track_new_mem_mmap)         (drd_start_using_mem_w_perms);
   VG_(track_new_mem_stack)        (drd_start_using_mem_stack);
   VG_(track_new_mem_stack_signal) (drd_start_using_mem_stack_signal);
@@ -1140,7 +1158,7 @@
   VG_(track_pre_thread_ll_exit)   (drd_thread_finished);
 
   // Other stuff.
-  drd_register_malloc_wrappers(drd_start_using_mem,
+  drd_register_malloc_wrappers(drd_start_using_mem_w_ecu,
                                drd_stop_using_nonstack_mem);
 
   drd_clientreq_init();