Removed --trace-mem which traced all memory accesses. Added support for multiple --trace-address options. A range size can now be specified to the VG_USERREQ__DRD_START_TRACE_ADDR client request. Added VG_USERREQ__DRD_STOP_TRACE_ADDR client request.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7814 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_suppression.c b/exp-drd/drd_suppression.c
index 91fcbde..63c7251 100644
--- a/exp-drd/drd_suppression.c
+++ b/exp-drd/drd_suppression.c
@@ -35,6 +35,7 @@
 
 static struct bitmap* s_suppressed;
 static Bool s_trace_suppression;
+Bool g_any_address_traced = False;
 
 
 // Function definitions.
@@ -81,7 +82,7 @@
      VG_(get_and_pp_StackTrace)(VG_(get_running_tid)(), 12);
      tl_assert(False);
   }
-  bm_clear(s_suppressed, a1, a2);
+  bm_clear_store(s_suppressed, a1, a2);
 }
 
 /**
@@ -104,6 +105,33 @@
   return bm_has_any(s_suppressed, a1, a2, eStore);
 }
 
+void drd_start_tracing_address_range(const Addr a1, const Addr a2)
+{
+  tl_assert(a1 < a2);
+
+  bm_access_range_load(s_suppressed, a1, a2);
+  if (! g_any_address_traced)
+  {
+    g_any_address_traced = True;
+  }
+}
+
+void drd_stop_tracing_address_range(const Addr a1, const Addr a2)
+{
+  tl_assert(a1 < a2);
+
+  bm_clear_load(s_suppressed, a1, a2);
+  if (g_any_address_traced)
+  {
+    g_any_address_traced = bm_has_any(s_suppressed, 0, ~(Addr)0, eLoad);
+  }
+}
+
+Bool drd_is_any_traced(const Addr a1, const Addr a2)
+{
+  return bm_has_any(s_suppressed, a1, a2, eLoad);
+}
+
 void drd_suppression_stop_using_mem(const Addr a1, const Addr a2)
 {
   if (s_trace_suppression)